学无止境

少年辛苦终身事,莫向光阴惰寸功。——唐·杜荀鹤《题弟侄书堂》


线程进程协程

  • 进程是系统进行资源分配和调度的一个独立单位,进程是资源分配的单位,线程是cpu调度的单位。

  • 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,

  • 只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

  • 线程包含再进程中

  • 协程,又程微线程,纤程,英文名:coroutine

  • 而协程的操作则是程序员指定的,在python中通过yield,人为的实现并发处理。

  • 协程存在的意义:

  • 协程,则只使用一个线程,分解一个线程成为多个“微线程”,在一个线程中规定某个代码块的执行顺序。

  • 协程的应用场景:当程序中存在大量不需要CPU的操作时(IO)。

  • 首先我们得知道协程是啥?协程其实比线程更小的执行单元。 为啥说他是一个执行单元,因为他自带CPU上下文。

  • 协程和线程差异:

  • 线程切换非常耗性能

  • 但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。

  • 协程的问题-协程程序员自己调度

  • 让需要执行的协程更多的获得CPU时间才是问题的关键。

计算密集型和IO密集型

  • 计算密集型–>例如for循环里嵌套10层for循环–>占大量的cpu资源–>解决方案–>使用多进程不能用多线程(多线程中有个全局锁GIL)

  • IO密集型->需要网络功能,大量的事件等待网络数据的到来–>多线程、协成

  • 尽量不要再协程里面做IO密集型操作