标签:环境 单元 gil 选择 nbsp 利用 开发者 mon 效率
一、操作系统/应用程序
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密集型:多线程
计算机密集型:多进程
标签:环境 单元 gil 选择 nbsp 利用 开发者 mon 效率
原文地址:https://www.cnblogs.com/liaopeng123/p/9621044.html