进程:每个人都领一套工具(环境,上下文)去干活,人多(核多)就可以做得更快。
线程:一个人领一套工具后干活,但要干很多工作,先干哪个要听老板的(系统),遇见要等待的事情,老板会叫你先干别的。但老板不懂你干的活,比如你挖一个坑放一个萝卜盖土,结果他让你挖坑,盖土,放萝卜。这时候就要用锁告诉老板这个必须先放了萝卜才能埋土。
协程:一个人领一套工具后干活,但要干很多工作,先干哪个要听自己的,同样遇见要等待的事情,你会自主地先干别的。对于老板来说,协程内的工作属于一个包的事,他会下命令让你吃饭,但不会规定先吃哪个菜。正是因为省去了老板这一工作量,才大大提高了公司的效率,毕竟是占用领导的工作量,先洗澡还先吃饭也要问领导不得慢成啥。
你吃饭吃到一半,电话来了
你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行你吃饭吃到一半,电话来了
你停了下来接了电话,接完后继续吃饭,这说明你支持并发你吃饭吃到一半,电话来了
你一边打电话一边吃饭,这说明你支持并行并发关乎结构,并行关乎执行
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位
线程是进程中代码的不同执行路线
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间 (包括代码段、数据集、堆等) 及一些进程级的资源 (如打开文件和信号),某进程内的线程在其它进程不可见
调度和切换:线程上下文切换比进程上下文切换要快得多
驹说码事 深入理解Python异步编程(上)
伯乐在线 Python 3.5 协程究竟是个啥
伯乐在线 以操作系统的角度述说线程与进程
知乎 谈谈 Python 协程技术的演进
cenalulu Python 的 GIL 是什么鬼,多线程性能究竟如何
segmentfault 一起了解什么是高并发
简书 Python yield from 用法详解
Tony Bai 也谈并发与并行