1、多线程、多进程、协程
1.1 进程和线程
多线程
适合IO密集型
任务(如请求网页、读写文件等);
多进程
适合CPU密集型
任务(指CPU计算占主要的任务,CPU一直处于满负荷状态。比如在一个很大的列表中查找元素(当然这不合理)、复杂的加减乘除等。)。
文章:Python进阶:聊聊IO密集型任务、计算密集型任务,以及多线程、多进程- 多进程和多线程:都
可以并发
,也可并行
。
文章1:并发、并行和异步
文章2:线程和进程,并发和并行(Windows系统) - 同一进程下的多线程共享进程的部分资源,同时每个线程又有自己的堆栈和局部变量;
文章:进程和线程的区别 && 线程之间共享的资源 - 进程间互相独立,相互之间可通信。
文章:【Python】多进程线程与CPU核数
1.2 协程
官方文档:asyncio — 异步 I/O
文章1:进程和线程、协程的区别
文章2:Python协程原理介绍及基本使用
文章3:Python的协程异步IO(asyncio)详解
文章4:探索 Flask 对 asyncio 的支持
2、python线程安全
3、python和java比较
(1)python 多线程是假的。
- 因为GIL全局锁的存在,即使多线程下也只是让他们交替获得GIL锁,即每个线程都可以执行,但也只是“交替”执行,而不是真正的同时执行!
同一时间下,即使是多CPU
,也只有1个线程可以获得GIL锁,即也只能有一个线程可执行
!- python下
多进程并行
是真的。
(2)java下,多线程并发可以实现并行。
- 如果是单个CPU,那效果和python多线程是一样的。
- 如果是多个CPU,每个CPU上的线程互不影响,就会出现多线程下、同一时间点下、不同CPU上都有线程在跑,这样就真正实现了并发下的并行!