来源:https://segmentfault.com/q/1010000010018151

参考:https://www.cnblogs.com/lynxcat/p/7954456.html

协程可以用在,异步网络 IO 的时候,使其成为非阻塞的。

比如你在一个 http 请求里面,你需要请求外面的接口,那么会有下面的场景。

你的前置 server 是 nginx,nginx 是非阻塞异步的,但是 php-fpm 是同步阻塞的。那么当你在请求外面接口的时候,这个任务就会被阻塞。(这里补充一下,php-fpm 的 Worker 进程是同步阻塞的)

假设你使用协程,那么当你在请求接口的时候,你的这个任务就可以暂停,保存上下文。然后呢,当你的接口返回了之后,重新调起这个任务继续执行。你的进程就不必耗在这一个任务上了,可以去处理其它的 http 请求了。这样是不是并发量就高了?

同理,当你的请求在查询数据库的时候,也是一个 IO 请求,也是同步的。协程就可以让你这些 IO 编程异步非阻塞的,从而增大你的并发量。这主要是让你的 CPU 可以在等待 IO 的时候,可以处理别的事情。所有的 IO 请求都可以通过协程做到这一点。

你的这篇文章我看过,是很好的一篇文章。这里作者用 yield 实现了一个任务调度,就是干我上面说的那些事情的。你也可以看看鸟哥翻译的 http://www.laruence.com/2015/...,可以说是对你看到的这个翻译的一个补充。他通过 yield 实现了一个异步非阻塞的服务器,当然只是一个 demo 啦。有个例子看起来应该会好一点。

yield的好处:

1.节省内存空间(因为别人的都是一堆数组,货真价实的一个个的放进内存里,但是yield是迭代器,从头到尾就只有他一个,相当于替换符号!)

2.协程可以用在,异步网络 IO 的时候,使其成为非阻塞的。

最新文章

  1. COGS1008. 贪婪大陆[树状数组 模型转换]
  2. C# DataTable中根据某Column值(不重复)获取该值所在行
  3. jQuery--事件总结
  4. unkow jdbc driver : http://maven.apache.org
  5. LeetCode Palindrome Permutation II
  6. Codeforces Round #367 (Div. 2)---水题 | dp | 01字典树
  7. 错误 -force-32bit 与 ANDROID_EMULATOR_FORCE_32BIT=true
  8. Opacity多浏览器透明度兼容处理(转)
  9. 使用android.view.TouchDelegate扩大View的触摸点击区域
  10. 【Itext】7步制作Itext5页眉页脚pdf实现第几页共几页
  11. [转帖]ulimit、limits.conf、sysctl和proc文件系统
  12. 读取HTML文件进行格式化解析
  13. 买了本Delphi面向对象编程思想,正在看,产生些问题。
  14. 使用cxf两个声明导致ObjectFactory 类中发生冲突
  15. 【编程基础】编译器 cc、gcc、g++、CC 的区别
  16. solr 加载 停用/扩展词典
  17. VMWare虚拟机安装创建虚拟机的使用教程
  18. html5--移动端视频video的android兼容,去除播放控件、全屏等
  19. nodejs v8引擎
  20. 安装虚拟机与Linux的学习

热门文章

  1. 用pymysql和Flask搭建后端,响应前端POST和GET请求
  2. 加密解密 Python
  3. 【poj 2429】GCD & LCM Inverse (Miller-Rabin素数测试和Pollard_Rho_因数分解)
  4. F - F HDU - 1173(二维化一维-思维)
  5. C++判断输入是否为double
  6. Python Count函数的应用
  7. Java第三十五天,用JDBC操作MySQL数据库(一),基础入门
  8. Flask 入门(七)
  9. String 对象-->substring() 方法
  10. 学习《深入应用c++11》1