- 论坛徽章:
- 4
|
本帖最后由 linux_c_py_php 于 2013-02-24 22:59 编辑
starwing83 发表于 2013-02-24 22:46
回复 42# linux_c_py_php
这个卡着是允许的, 是正常的, 对于那些该yield出去并且去epoll里跑异步的如果还卡着跑, 那就不对了.
我说的都是正常情况, 比如给lua提供个connect接口, 实际底层是注册给epoll后立马就yield了, 等connect事件完成会resume去跑剩下的lua逻辑, 当然剩下的lua逻辑又会有类似的接口, 如此resume->yield不停往复, 直到lua代码全部执行完. 但天知道你调用100次connect到底哪时候能把整个lua脚本跑完, 我的server是不知道的, 我只有coroutine的lua_State可以看status, 与此同时也许这个lua脚本里的第N次connect正在epoll里异步的执行着:
connect_100times.lua:
for i=1, 100 do
succeed, connUserData = server:connect('localhost', 80) -- 底层是epoll下的非阻塞connect
...
...
server:close(connUserData)
done
我的脚本就要这样跑, 第99次resume返回到非阻塞connect的event callback中时, 我并不打算在这里检查coroutine死了没有, 于是server对lua脚本执行结束毫不知情, 我就是要解决这个"毫不知情". |
|