- 论坛徽章:
- 4
|
本帖最后由 linux_c_py_php 于 2013-02-24 17:42 编辑
嗯, 我理解你的意思, 就是coroutine对于我来说, 我是明确知道哪时候开始哪时候结束的.
我知道coroutine的道理, 包括怎么实现来lua看来阻塞在宿主看来异步的接口, 但要做一个通用漂亮的设计, 在实现的每个lua函数里都考虑检查coroutine是否结束感觉是蛋疼的做法.
我说个实际的例子, 我是一个单线程epoll, 然后解析到一个request, 然后创建coroutine加载lua代码执行, 然后lua里调用了我实现的connect函数, connect里注册了非阻塞connect fd的事件后就yield了, 然后宿主获得了执行权, 但发现resume返回YIELD而不是OK, 说明LUA还没执行完, 所以宿主不等待继续event loop干其他的, 然后等非阻塞connect fd触发完成事件, 在其事件回调里resume coroutine继续执行lua脚本, 然后lua脚本又调用write/read等接口, 其底层都是借助event loop异步的, 而实现read/write的时候是都和检查connect里resume返回值一样, 重复的去判断resume返回OK还是YIELD.
当这个resume返回值的检查在每个API的实现里都必须出现的时候, 我觉得就需要一个通用的办法来让宿主获知coroutine的执行状况, 比如通过管道通知到event loop触发server的状态机推进到等待下一个request, 或者服务端轮询来获知coroutine是否结束以便推进状态机. |
|