并发学习笔记,希望各位指导一下

2012-07-07 19:33:59 +08:00
 alsotang
原文地址是:
http://fxck.it/2012/07/07/%E5%B9%B6%E5%8F%91%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

----Overview----

有几个与并发有关的概念,它们分别是: 多进程 多线程 微线程 协程 纤程。
其中,协程,其实就是纤程的别称,也是微线程的别称。协程有时也被叫做用户态线程。
一个进程可以包括多个线程,一个线程可以包括多个协程。
进程的切换开销比线程大,线程的比协程大。
进程和线程都不懂的话,就不用再看下去了。而协程是最近很火的一个概念。代表技术就是Python的gevent咯。
某些文章说道:
记得N年前看过一篇论文说服务器的发展是多进程=>多线程=>异步=>协程
References:
http://blog.csdn.net/chgaowei/article/details/7237673
http://gashero.iteye.com/blog/442177
http://www.tumblr.com/tagged/coroutine?before=1330310936

----各门语言与特定的实现----

Node.js的并发性能很好,不过它不是利用了线程或协程。它就是上面所说的那个发展过程中的异步:将每个事件都绑定一个函数,事件被触发时自动调用。属于异步I/O。
Go的goroutine据说比较接近协程。但与协程和线程的概念都不是很像,所以一般不翻译这个goroutine这个词。
Python的yield就是协程的一种实现。但我不懂Stackless到底在这之上还做出了什么改变,或许是Python的yield所提供的功能实在太简单,所以Stackless提供了更多与协程有关的API。
有资料说Ruby的yield是种简单的协程,?只适合简单的两个程序间的合作。而Fiber库对于协程的支持就比较好了。

----Python相关的一些库----

twisted, gevent, greenlet, envetlet.
twisted跟Node.js一样。官网介绍是:Twisted is an event-driven networking engine written in Python。
event-driven就是事件驱动了嘛。
gevent的介绍是:gevent based on greenlet and libevent.
greenlet是greenlet is a spin-off of Stackless。这么说greenlet来自Stackless,是Stackless的一个子集。
libevent,由名字判断是C语言的某个Linux下的库。介绍是:Currently, libevent supports /dev/poll, kqueue(2), event ports, POSIX select(2), Windows select(), poll(2), and epoll(4).
greenlet应该是libevent的一个Python包装(我猜的)。
eventlet会被拿来与gevent直接比较,见:http://ampzaa.blog.163.com/blog/static/14086966620104912833465/
所以他们应该是两个不同的Python协程库。
End
5091 次点击
所在节点    Python
1 条回复
greenblue007
2014-03-05 22:00:16 +08:00
总结得不错!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/41713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX