标签:
通俗易懂的回答:让原来要使用异步+回调方式写的非人类代码,可以用看似同步的方式写出来...
补充一个好处:可以按串行模型去组织原本分散在不同上下文中的代码逻辑,避免状态同步问题。
*******************************************************************************************
没有啥复杂的东西,考虑清楚需求,就可以很自然的衍生出这些解决方案。
行,故事讲到这里,我们来看看并发的好处:
我们看到阻塞、切换到其他进程(线程)的操作,都会交由操作系统来完成。所以不管是进程还是线程,每次阻塞、切换都需要陷入系统调用(system call),先让CPU跑操作系统的调度程序,然后再由调度程序决定该跑哪一个进程(线程)。
如果我们不要这些功能了,我自己在进程里面写一个逻辑流调度的东西,碰着i\o我就用非阻塞式的。那么我们即可以利用到并发优势,又可以避免反复系统调用,还有进程切换造成的开销,分分钟给你上几千个逻辑流不费力。这就是协程。
本质上协程就是用户空间下的线程。
**************************************************************************************************
协程的好处:
协程通常是纯软件实现的多任务,与CPU和操作系统通常没有关系,所以没有理论上限。
唯一的缺点似乎就是:它不能同时将 CPU 的多个核用上。但对 lua 来说这通常不是问题,因为一个宿主程序里面是可以允许有多个 lua 状态机的,开多个线程或进程,然后每个核开一个 lua 状态机即可。
references:
http://www.zhihu.com/question/20511233
标签:
原文地址:http://www.cnblogs.com/foohack/p/4612428.html