进程 线程

Posted nianshaoyouwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程 线程相关的知识,希望对你有一定的参考价值。

一.关于线程和进程的说明

  python本身没有进程和线程,python中调用了操作系统的线程和进程.

  一个应用程序(软件),可以有多个进程(默认只有一个),一个进程中可以创建多个线程(默认一个).

  技术分享图片

  创建进程是为了提供环境让线程工作,进程和进程之间做数据隔离(java/c#)

  创建线程是因为线程是cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(java/c#)

  而python中存在一个GIL锁造成多线程无法利用多核优势,只能开多进程处理(浪费资源)

  查看GIL切换的指令(sys.getcheckinterval)

  Python语言的创始人在开发这门语言时,目的是快速把语言开发出来,如果加上GIL锁(C语言加锁),切换时按照100条字节指令来进行线程间的切换。

 

  

二. python进程,线程和java,c#的区别

  python多线程情况下:

       计算密集型操作:效率低(GIL锁)

       IO操作:效率高

  python多进程的情况下:

       计算密集型操作:效率高(浪费资源)不得已而为之.

       IO操作:效率高(浪费资源)

  写python时IO密集型用多线程,计算密集型用多进程

 

  

  java,c#多线程情况下:

       计算密集型操作:效率高

       IO操作:效率高

  java,c#多进程的情况下:

       计算密集型操作:效率高(浪费资源)

       IO操作:效率高(浪费资源)

 

三. 线程的一些参数

    start    线程准备就绪等待CPU调度

    setDaemon  主线程不再等,主线程终止则所有子线程终止

    join 无参数,让主线程在这里等着,等到设置join的子线程执行完毕,才可以继续往下走.

    join 有参数,让主线程在这里最多等待n秒,无论是否执行完毕,会继续往下走

    threading.current_thread()   获取当前执行该函数的线程的对象

    getName  根据当前线程对象获取当前线程名称

    setName  给当前线程对象设置名称

 

四.多线程方式

  多线程方式:1  

def   func(arg):
        print(arg)
t1 =  threading.Thread(target=func,args=(11,))
t1.start()

  多线程方式:2

class   MyThread(threading.Thread):
        def  run(self):
                print(123,self._args,self._kwargs)
t1 = MyThread(args=(11,))
t1.start()

t2 = MyThread(args=(22,))
t2.start()

 

     

    

  

 

以上是关于进程 线程的主要内容,如果未能解决你的问题,请参考以下文章

多线程编程

多个请求是多线程吗

python多线程

[Python3] 043 多线程 简介

python中的多线程和多进程编程

进程和线程和协程之间的关系