python学习第二十八节(进程,线程)
一个进程可以开启多个线程,当线程共用一个数据集的时候,都可以访问一个数据集。
可以省内存空间等等。
一个进程最少会有一个主线程。
线程必须在进程中。
线程是最小的执行单元。
进程是最小的资源管理单元。
切换的操作者:操作系统
进程/线程切换原则:
1、时间片
2、遇到IO操作切换。(input/socket.recv等等,这些函数不会占用CPU,直接切走)
python有全局解释器锁
所以不能实现一个进程内的线程无法同一时刻内实现并行。
threading模块有个thread类
由于同一时刻内 一个进程只能执行一个线程,所以属于并发。
activeCount()显示线程数量
join() 等待,阻塞。 如果t1 t2子线程不执行结束 后面主线程不执行
给子线程设置了守护线程之后,只要主线程执行完毕就不等子线程了,直接退出 程序。
如果主线程是非守护线程,子线程默认继承主线程,也是非守护线程。
如果子线程中有一个开了守护线程,那主线程结束后依然会判断是否有非守护线程的子线程,如果有依旧执行,如果时间比守护线程久,守护线程会执行结束,如果比守护线程短,守护线程不会执行完毕。
主线程和子线程如果运行完,只要有一个没有结束,其他的都结束,并没有消失,
所以threading.activeCount()可以看到所有的数量。
多线程的好处在IO密集型任务。程序中存在大量的IO操作。
计算密集型任务,程序存在大量计算任务。还不如顺序执行,多线程反而慢很多。如下图:
每次切换,还需要保存运算结果,所以时间比较慢。
中天一片无情月,是我平生不悔心