进程 线程
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()
以上是关于进程 线程的主要内容,如果未能解决你的问题,请参考以下文章