进程和线程相关
2021-07-03 17:05
标签:环境 单元 gil 选择 nbsp 利用 开发者 mon 效率 一、操作系统/应用程序 1、硬件 硬件包括硬盘、cpu、主板、显卡、内存、电源........ 2、系统 系统就是由程序员写出来的软件,该软件用于控制计算机的硬件,让他们相互配合工作 3、安装软件(安装应用程序) 二、线程和进程 应用程序调用操作系统的线程和进程 单进程、多线程的应用程序 一个应用程序(软件),可以有多个进程(默认只有一个),一个进程中可以创建多个线程(默认只有一个) 操作系统帮助开发者操作硬件 python在多线程和多进程的情况 1、多线程情况下 计算机密集型操作:效率低。(GIL锁) IO操作:效率高 2、多进程的情况下 计算机密集型:效率高(浪费资源,不得已而为之) IO操作:效率高 对于python进程和线程的选择: 计算机密集型:多进程 IO操作:多线程 3、GIL锁:是全局解释器锁。用于限制一个进程中同一个时刻只有一个线程被CPU处理 扩展:默认GIL锁在执行100个CPU指令(过期时间) 三、在python中主线程和子线程的执行情况 1、主线程默认等待子线程执行 当把time.sleep(arg)去掉时打印结果:3,9,123 2、主线程不在等待子线程,主线程执行完毕则所有子线程终止(子线程在可以在主线程之前完成) 3、开发者可以控制主线程等待子线程的时间(最多等待时间) 总结: 1、线程是CPU工作的最小单元,创建线程是为了利用多核优势实现操作 2、创建进程是为了做数据隔离,进程是为了提供环境让线程工作 3、在python中存在一个GIL锁 影响:多线程无法利用多核优势 解决:创建多进程 4、IO密集型:多线程 计算机密集型:多进程 进程和线程相关 标签:环境 单元 gil 选择 nbsp 利用 开发者 mon 效率 原文地址:https://www.cnblogs.com/liaopeng123/p/9621044.html1 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‘) #主线程
1 import sys
2 v1=sys.getcheckinterval()
3 print(v1) #100
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
加上 子线程.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)