• python3 进程与线程


    1.进程定义    

    狭义的定义: 进程是正在运行的程序的实例。

    广义的定义:进程是一个具有 一定独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

    我们都知道程序,一个程序是静态的,通常是存放在外存中的。而当陈旭被调入内存中运行后,就成了进程。顾名思义,进程就是进行中的程序,它是个动态的概念。是系统进行资源分配与调度的基本单位。

    2.线程定义

    线程: 一堆指令的集合

    一个进程内部可能包含了很多顺序执行流,每个顺序执行流就是一个线程。

    每个进程启动时候会自动启动一个线程,通常这个线程被称之为主线程。 其他的线程可以由主线程创建,每个线程可以创建自己的子线程

    3.进程与线程的区别:

    1.线程共享内存空间,每个进程则是相互独立的。(比如word不能访问qq)

    2.一个进程里的线程之间可以直接交流(数据共享),两个进程想通信必须通过一个中间代理来实现,进程间是相互独立的不能直接通信。

    3..创建新线程很简单,创建新进程需要对齐父进程进行一次克隆。(duplication)

    4.一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作其子进程

    5.对于主线程的修改可能会影响到其他线程的运行。但是对父进程的修改不会影响到其子进程,但是不能挂掉父进程,如果挂掉父进程则子进程也会挂掉。

    4.多线程实例:

     单线程:

    import threading,time
    
    def run(n):
        print("task",n)
        time.sleep(2)
    
    starttime = time.time()
    #t1 = threading.Thread(target=run,args=("t1",))
    #t2 = threading.Thread(target=run,args=("t2",))
    #t1.start()
    #t2.start()
    
    run("t1")
    run("t2")
    
    endtime = time.time()
    print(endtime-starttime)


    执行结果:

    [python@heaven-00 0906]$ python threadingtest.py
    task t1
    task t2
    4.004261016845703

    多线程:

    import threading,time
    
    def run(n):
        print("task",n)
        time.sleep(2)
    
    starttime = time.time()
    t1 = threading.Thread(target=run,args=("t1",))           #注意此处args参数  即使是一个参数后面也要有“,”
    t2 = threading.Thread(target=run,args=("t2",))
    t1.start()
    t2.start()
    
    #run("t1")
    #run("t2")
    
    endtime = time.time()
    print(endtime-starttime)

    执行结果:

    [python@heaven-00 0906]$ python threadingtest.py
    task t1
    task t2
    0.0005490779876708984

    通过对比可以看出,多线程时候程序会在一个线程运行时候并行运行后面的代码,大大提高了工作效率。

    通过类启用线程:

    import threading,time
    
    class MyThread(threading.Thread):              #定义自己的线程类,继承threading.Thread类
        def __init__(self,n):                       
            super(MyThread,self).__init__()        #重构
            self.n = n
        
        def run(self):
            print("running task ",self.n)
         
    t1 = MyThread("t1")
    t2 = MyThread("t2")
    
    t1.run()
    t2.run()
  • 相关阅读:
    数据结构与算法10 微服务接口的鉴权和限流 [MD]
    .Net开发环境配置[OS/IIS/VS...]
    一、单件模式
    正则表达式调试器1.1
    C#2.0新特性系列文章转载
    巧用VS2005解决VS2005网站发布不便问题
    配置VS2005,加速VS2005运行速度
    转载:ASP.NET运行机制 和 图片盗链问题
    ASP.NET页面提前处理问题
    关于NTLM认证的python和.NET实现
  • 原文地址:https://www.cnblogs.com/heaven-xi/p/9598692.html
Copyright © 2020-2023  润新知