作者回复: 挺好的建议,多谢。下一节我们讲 “进程内协同:同步、互斥与通讯”。
作者回复: 协程不走系统调用。协程切换只是寄存器的保存和恢复,所以可以在用户态下自己来实现。
作者回复: 从单位时间成本来说,有一定优势但也不会特别大。主要少掉的代价是从用户态到内核态再回到用户态的成本。这种差异类似于系统调用和普通函数调用的差异。因为高性能服务器上io次数实在太多了,所以单位成本上能够少一点,积累起来也是很惊人的。
作者回复: 如果用同步 io,那么每个并行 io 必然需要需要一个线程。epoll 在于让 io 等待都发生在相同的地方,相当于线程做了多路 io 复用。
作者回复: https://github.com/Tencent/libco
作者回复: 1、https://m.baidu.com/sf_edu_wenku/view/3210fec818e8b8f67c1cfad6195f312b3169ebe8
2、是的,执行权会转移
作者回复: python的协程是比较狭义的,它只是一种编程模式,并不算执行体。你可以了解一下Go语言的goroutine。
作者回复: 我认为是这样
作者回复: 但是操作系统太多了,语言适配操作系统易,反过来难
作者回复: 应对方式有两种:一种是经典的线程池+异步io,一种是基于协程的同步io。后者背后的原理也是线程池+异步io,只不过加上了协程的语法糖了。
作者回复: https://linux.cn/article-5681-1.html?pr
你可以仔细看一下中文版的
作者回复: 1、文章中有表格,里面的调度方就是你说的控制方。不同执行体控制方不一样,调度算法不一样,概率也就不一样。
2、线程知道函数地址就行,一样是入口。
3、共享存储包括内存、数据库等等。
作者回复: 不会相互影响
作者回复: 可以查一下fork相关的资料,这个api很经典,有很多介绍材料