{人面不知何去处 桃花依旧笑春风}

并发与协程

Posted in Uncategorized by interma on 2013/05/03

闲读了一下《go语言编程》,简单摘录总结一下。
目前并发的几种实现模型:
1,多进程:稳定,隔离度佳,系统原生支持,但开销非常大,并发数一般几十级别。
2,多线程:中庸,依然是系统原生支持,开销一般。并发数一般几百级别。可以很好的解决大部分问题了。
3,基于回调的异步io:性能佳,但编码成本很高(不符合一般思维)。如:node.js。
4,协程:性能佳,用户态实现,采用了一个简单的抽象模型(消息传递,yield等)。并发数可以支持到百万级别,很适用于解决抽象上就是一个并发问题(如网游)。一般采用库方式实现,也有语言原生支持的如go。

协程的内部实现:
可以参考偶像Cox的libtask。核心基于2个系统调用:makecontext(),swapcontext()。

go的协程语言层面已经包装的很舒服了,在python方面比较成熟的就是stackless库了。看看features小节中的实例就很清晰了,接口和go很类似。

Tagged with: ,