IO密集型任务, 计算密集型任务, 多线程, 多进程.

IO 密集型任务, 是指磁盘 IO、网络 IO 占主要的任务, 计算量很小。比如请求网页, 读写文件等.

计算密集型任务, 是指 CPU 计算占主要的任务, CPU 一直处于满负荷状态.

多线程:
多线程即在一个进程中启动多个线程执行任务. 一般来说使用多线程达到并行的目的, 但由于 Python 中使用了全局解释锁 GIL 的概念, 导致 Python 中的多线程并不是并行执行, 而是 “交替执行”. 所以 Python 中的多线程适合 IO 密集型任务, 而不适合计算密集型任务.

多进程:
由于 Python 中 GIL 的原因, 对于计算密集型任务, Python 下比较好的方式是使用多进程, 这样可以非常有效的使用 CPU 资源。当然同一时间执行的进程数量取决于你电脑的 CPU 核心数.

举个例子:

1.单进程单线程: 一个人在一个桌子上吃菜.

2.单进程多线程: 多个人在同一个桌子上吃菜.

3.多进程单线程: 多个人每个人在自己的桌子上吃菜.

多线程的问题是多个人同时吃一道菜的时候容易发生争抢, 例如两个人同时夹一个菜, 一个人刚伸出筷子, 结果伸到的时候被别人夹走了。

资源共享就会发生冲突争抢.

---对于 windows 来说, [开桌子]的开销很大, 因此 windows 鼓励大家在一个桌子上吃菜. 因此 windows 多线程的学习重点是要大量面对资源争抢与同步方面的问题.

    ---对于 Linux 来说, [开桌子]的开销很小, 因此 Linux 鼓励大家在一个桌子上吃菜. 这带来的新问题是: 坐在两张不同桌子上, 说话不方便. 因此: Linux 下的学习重点是要学习进程间通讯的方法.

###[开桌子] 是指创建进程.