Skip to content

Commit 02d5d7e

Browse files
committed
Updates shuo-ming.md
Auto commit by GitBook Editor
1 parent 19e8676 commit 02d5d7e

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

README.md

-12
Original file line numberDiff line numberDiff line change
@@ -1,12 +0,0 @@
1-
# 前言
2-
3-
近年来,在面向高并发编程的道路上,Node.js与Golang风生水起,让人们渐渐把目光从多线程模型转移到callback与CSP/Actor上,用惯了FPM多进程同步阻塞模型的PHPer中总难免有人心
4-
动。多种EventLoop一直不温不火,而国内以swoole为代表,直接以扩展形式,提供了整套callback模型的PHP异步编程解决方案,正在逐渐的流行起来。
5-
6-
Node.js在JS上开花结果,也许是浏览器的DOM事件模型培养起来的callback书写习惯,与语言自身的函数式特性适合callback代码编写。但回调固有的逻辑割裂、调试维护难的问题随着node社区的繁荣逐渐显现,从老赵脑洞大开的windjs到co与Promise,方案层出不穷,最终[Promise](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise)
7-
采纳为官方「异步编程标准规范」,从C#借鉴过来的[async/await](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function)被纳入语言标准。
8-
9-
因swoole与Node.js的I/O模型相同,PHPer有幸在高并发命题上遭遇与node一样的问题。Closure([RFC](https://wiki.php.net/rfc/closures?cm_mc_uid=26754990333314676210612&cm_mc_sid_50200000=1490031947))一定程度从语言本身改善了异步编程的体验,受限于Zend引擎作用域实现机制,PHP因缺失词法作用域从而缺失词法闭包,Closure对象采用了use语法来显式捕获upValue到静态属性的方式(closure->func.op_array.static_variables),我个人认为这有点像无法自动实现闭包的匿名函数。之后Nikita Popov在PHP中实现了Generator([RFC](https://wiki.php.net/rfc/generators)),并且让PHPer意
10-
识到生成器原来可以实现实现非抢占任务调度([译文:在PHP中使用协程实现多任务调度](http://www.laruence.com/2015/05/28/3038.html))。我们最终可以借助于生成器实现半协程来解决该问题。
11-
12-
这篇文章秉承着造轮子的精神,我们从头实现一个全功能的基于生成器(Generator)的半协程调度器与相关基础组件,并基于该调度器实(chao)现(xi)JS社区当红的koa框架,最终加深我们对异步编程的理解。

SUMMARY.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Summary
22

3-
* [前言](README.md)
4-
* [说明](shuo-ming.md)
3+
* [README](README.md)
4+
* [前言](qian-yan.md)
5+
* [说明](qian-yan/shuo-ming.md)
56
* [第一部分: 半协程调度器](di-yi-bu-52063a-ban-xie-cheng-diao-du-qi.md)
67
* [统一生成器接口](di-yi-bu-52063a-ban-xie-cheng-diao-du-qi/sheng-cheng-qi.md)
78
* [生成器迭代](di-yi-bu-52063a-ban-xie-cheng-diao-du-qi/sheng-cheng-qi-die-dai.md)

qian-yan.md

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# 前言
2+
3+
近年来,在面向高并发编程的道路上,Node.js与Golang风生水起,让人们渐渐把目光从多线程模型转移到callback与CSP/Actor上,用惯了FPM多进程同步阻塞模型的PHPer中总难免有人心
4+
动。多种EventLoop一直不温不火,而国内以swoole为代表,直接以扩展形式,提供了整套callback模型的PHP异步编程解决方案,正在逐渐的流行起来。
5+
6+
Node.js在JS上开花结果,也许是浏览器的DOM事件模型培养起来的callback书写习惯,与语言自身的函数式特性适合callback代码编写。但回调固有的逻辑割裂、调试维护难的问题随着node社区的繁荣逐渐显现,从老赵脑洞大开的windjs到co与Promise,方案层出不穷,最终[Promise](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise)
7+
采纳为官方「异步编程标准规范」,从C#借鉴过来的[async/await](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function)被纳入语言标准。
8+
9+
因swoole与Node.js的I/O模型相同,PHPer有幸在高并发命题上遭遇与node一样的问题。Closure([RFC](https://wiki.php.net/rfc/closures?cm_mc_uid=26754990333314676210612&cm_mc_sid_50200000=1490031947))一定程度从语言本身改善了异步编程的体验,受限于Zend引擎作用域实现机制,PHP因缺失词法作用域从而缺失词法闭包,Closure对象采用了use语法来显式捕获upValue到静态属性的方式(closure->func.op_array.static_variables),我个人认为这有点像无法自动实现闭包的匿名函数。之后Nikita Popov在PHP中实现了Generator([RFC](https://wiki.php.net/rfc/generators)),并且让PHPer意
10+
识到生成器原来可以实现实现非抢占任务调度([译文:在PHP中使用协程实现多任务调度](http://www.laruence.com/2015/05/28/3038.html))。我们最终可以借助于生成器实现半协程来解决该问题。
11+
12+
这篇文章秉承着造轮子的精神,我们从头实现一个全功能的基于生成器(Generator)的半协程调度器与相关基础组件,并基于该调度器实(chao)现(xi)JS社区当红的koa框架,最终加深我们对异步编程的理解。

qian-yan/shuo-ming.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
## 说明
2+
3+
1. 下文中协程均指代使用生成器实现的半协程,具体概念参见[Wiki](https://en.wikipedia.org/wiki/Coroutine)
4+
2. 下文中耗时任务指代I/O或定时器,非CPU计算。
5+
3. `广告` 继TSF之后,我司去年了开源[Zan Framework](http://zanphp.io/),内部的半协程调度器已经解决了swoole中回调接口的代码书写问题。
6+
4. 下文实例代码,限于篇幅,每部分仅呈现改动部分, 其余省略。

shuo-ming.md

-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +0,0 @@
1-
## 说明
2-
3-
1. 下文中协程均指代使用生成器实现的半协程,具体概念参见[Wiki](https://en.wikipedia.org/wiki/Coroutine)
4-
2. 下文中耗时任务指代I/O或定时器,非CPU计算。
5-
3. `广告` 继TSF之后,我司去年了开源[Zan Framework](http://zanphp.io/),内部的半协程调度器已经解决了swoole中回调接口的代码书写问题。
6-
4. 下文实例代码,限于篇幅,每部分仅呈现改动部分, 其余省略。

0 commit comments

Comments
 (0)