线程 进程 协程
我觉得写python 刚开始接触的比较少的 然后后面的话 可能会比较多的
用到这些东西 比如你自己写的 可能用用线程会多一点 因为Python 的就是 索引 API 还是相对来说 比较好用的 就跟什么 pthread 的这种比起来 算是更好用的 但 Python 就是它的线程 是会被全局锁 这个影响的 所以它没办法 利用所有的CPU 资源 始终只能在一个核心上面跑
所以Python 线程跟传统的那些 就是操作系统上的线程 还是有点区别的
然后进程的话 咱们现在各个操作系统上面 就是一个任务的 就是一个核心单元 然后一个进程里面 可以包含多个线程
然后进程 和 进程之间 通常来说 默认是不会共享内存的 ,但是你可以
通过一些系统调用 或者 特殊的参数 , 来做到它们的共享 一块内存
然后线程的默认之间 大家都共享一个相同的全局上下文
然后协程的话 跟前两者都不太一样
它不是一个操作系统API
然后协程次是用户态的一个线程
其实也不能说是 应该说是自己实现的 一个调度机制
因此本质上 你在线程它有个问题 它在做切换的时候 因为线程一旦就在操作系统里面 ,你调度不同的线程的时候
实际上会给每个线程 分配不同的CPU 时间 然后过了一段时间
比如 有两个线程的话 可能一个会休息一段时间 然后CPU 会给另一个线程使用 然后这个时候调度
它就会把所有的那些放在什么 寄存器 然后堆栈上的信息 全部都给它保存下来 就是上下文 然后暂停 然后切换过程 其实就是消耗是比较高的
所以 协程出现其实 主要还是为了解决 频繁切换的问题 它能比如说 你线程可能能跑个 同时跑个 几百个 几千个 然后可能 就花费大量的时间 在切换上面 然后线程本身 运行的时间 能拿到的CPU 的时间是很少的
然后调度化的CPU 时间是很多的 但你如果用协程的话 调度时间是很少的 因为它不需要 它是比线程 更加轻量的一个实现 它就是一个线上里面跑 它本质上 只是把 本质上它是一个单线程应用 然后在上下文切换这块 它这个过程是非常轻量的 当然它也有上下文切换 然后另外它把IO 给异步化了 它比如说你会用什么 它比如说你会用什么 poll epoll 这种技术 把你的网络 IO 或者是文件 IO 然后就绪之后 再把需要的程序 就那个代码给唤醒 就是被它暂停的那些协程给 唤醒 然后但是线程的话
你要做这个事情 因为开销就非常高 然后你协程的话 做这个事情开销就非常低 它出现还是为了 异步 IO , 就能做异步 IO 还有然后减少切换过程中 CPU 消耗