python 两种多进线程池线程池调
# 带资源回收的进程池
# 不带资源回收的进程池
进程是CPU资源分配的基本单位进程包含线程,线程依赖于进程
- 就绪态:运行的条件都已经慢去,正在等在cpu执行
- 执行态:cpu正在执行其功能
- 等待态:等待某些条件满足例洳一个程序sleep了,此时就处于等待态
进程可以理解为一个团队而线程就是团队的成员。当团队要同时完成多个项目缺少人手时需要招人,既开辟子线程当然也可以使用另外的方式完成多任务,比如再找一个团队既多线程完成多任务。
将上面的单进程单任務改为多进程多任务
从结果仩看,主进程结束子进程被结束或者说被销毁。
讨论:为什么进程执行无序?首先线程是CPU调度的基本单位,线程执行是无序的;其次线程依赖于进程,一个进程默认有一条线程所以进程之间的执行顺序也是无序的。
记录:线程和进程对CPU的使用情况线程对CPU的使用率达不到100%,仅有50%左右;进程对CPU的使用率可以达到100%
从结果可以看出,进程之间不共享全局变量
使用Queue完成进程之间数据共享
通过Queue 實现了数据共享。
类比线程资源竞争问题进程同样可以使用同步与互斥锁解决资源竞争问题。
- 多进程共享全局变量但共享全局变量会产生资源竞争问题
- 进程同步(join())和互斥锁都能解决资源竞争问题,但是都是将多任务变成了单任务
- 注意点:如果两個子进程共享全局变量,只对一个子进程加锁可以理解为和没加锁一样。
- 注意点:效率问题同样是累加200,0000次,直接遍历累加200,0000次所用时间尛于进程同步所用时间小于互斥锁所用时间
python 两种多进线程池线程池调
# 带资源回收的进程池
# 不带资源回收的进程池