zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    华为平板暴力禁用wifi
    传输层与数据层架构一二谈
    内外网访问控制设计
    机房通信网设计
    list add元素覆盖之前元素问题思考
    IIS8无法调用Oracle.DataAccess .dll问题
    线程令牌
    Socket解决粘包问题2
    Socket解决粘包问题1
    Socket异步通信学习三
  • 原文地址:https://www.cnblogs.com/heaven-xi/p/9598692.html
Copyright © 2011-2022 走看看