进程和线程相关

一、操作系统/应用程序

1、硬件

硬件包括硬盘、cpu、主板、显卡、内存、电源........

2、系统

系统就是由程序员写出来的软件,该软件用于控制计算机的硬件,让他们相互配合工作

3、安装软件(安装应用程序)

二、线程和进程

应用程序调用操作系统的线程和进程

单进程、多线程的应用程序

1 import threading
2     print('666')
3 
4         def func(arg):
5     print(arg)
6     t = threading.Thread(target=func) #创建线程
7     t.start()
8 
9     print('end')   #主线程

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

操作系统帮助开发者操作硬件

python在多线程和多进程的情况

1、多线程情况下

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

  IO操作:效率高

2、多进程的情况下

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

  IO操作:效率高

对于python进程和线程的选择:

  计算机密集型:多进程

  IO操作:多线程

3、GIL锁:是全局解释器锁。用于限制一个进程中同一个时刻只有一个线程被CPU处理  

  扩展:默认GIL锁在执行100个CPU指令(过期时间)

1 import sys
2 v1=sys.getcheckinterval()
3 print(v1)   #100

三、在python中主线程和子线程的执行情况

1、主线程默认等待子线程执行

1 import time
2 def func(arg):
3     time.sleep(arg)
4     print(arg)
5 t1 = threading.Thread(target=func,args=(3,))
6 t1.start()
7 t2 = threading.Thread(target=func,args=(9,))
8 t2.start()
9 print(123)  
# 打印结果 123,3,9

当把time.sleep(arg)去掉时打印结果:3,9,123

2、主线程不在等待子线程,主线程执行完毕则所有子线程终止(子线程在可以在主线程之前完成)
加上   子线程.setDaemon()

 1 import time
 2 def func(arg):
 3     time.sleep(2)
 4     print(arg)
 5 
 6 t1 = threading.Thread(target=func,args=(3,))
 7 t1.setDaemon(True) #设置等待
 8 t1.start()
 9 
10 t2 = threading.Thread(target=func,args=(9,))
11 t1.setDaemon(True)
12 t2.start()
13 print(123)

3、开发者可以控制主线程等待子线程的时间(最多等待时间)

总结:

1、线程是CPU工作的最小单元,创建线程是为了利用多核优势实现操作

2、创建进程是为了做数据隔离,进程是为了提供环境让线程工作

3、在python中存在一个GIL锁

  影响:多线程无法利用多核优势

  解决:创建多进程

4、IO密集型:多线程

  计算机密集型:多进程

猜你喜欢

转载自www.cnblogs.com/liaopeng123/p/9621044.html