我的不完全理解是 Twisted、Stackless、Greenlet、Eventlet、Coroutines 都使用了异步网络 IO 和用户态线程,这些线程非常轻量级且切换速度很快。但我不确定它们之间有什么区别。
它们听起来也与 Erlang 进程非常相似。它们几乎是一回事吗?
任何可以帮助我更多地理解这个主题的人将不胜感激。
我的不完全理解是 Twisted、Stackless、Greenlet、Eventlet、Coroutines 都使用了异步网络 IO 和用户态线程,这些线程非常轻量级且切换速度很快。但我不确定它们之间有什么区别。
它们听起来也与 Erlang 进程非常相似。它们几乎是一回事吗?
任何可以帮助我更多地理解这个主题的人将不胜感激。
首先,非阻塞 I/O 与绿色线程或协程没有任何共同之处,但它会影响它们的调度方式。
现在:
上钩了!(欢迎修复!):
大体上:
这些都不像 Erlang 进程那样轻巧或得到很好的支持。
将 Stackless 与 Greenlet 进行比较时,您几乎是对的。缺少的是:
Stackless 本身并没有添加任何东西。相反,在 Stackless 5 年后发明的 Greenlet 删除了某些东西。它编写得足够简单,可以构建为扩展模块而不是替代解释器。
这真的很有趣——Stackless 有更多的功能,切换效率提高了大约 10 倍,并提供了执行状态的酸洗。
Greenlet 仍然获胜,这可能只是因为作为扩展模块易于使用。所以我正在考虑通过用酸洗扩展 Greenlet 来恢复这个过程。也许这会再次改变情况:-)