您现在的位置:首页 --> 查看专题: 回调
近来老见到人有内存泄漏的问题,自己写模块和例子的时候,也发现有内存泄漏的问题。。。学艺不精啊,所以特在这写一个文章来分享一下有关这方面的内容。
传统EDSM最常见的方式就是I/O事件的异步回调。基本上都会有一个叫做dispatcher的单线程主循环(又叫event loop),用户通过向dispatcher注册回调函数(又叫event handler)来实现异步通知,从而不必在原地空耗资源干等,在dispatcher主循环中通过select()/poll()系统调用来等待各种I/O事件的发生,当内核检测到事件触发并且数据可达或可用时,select()/poll()会返回从而使dispatcher调用相应的回调函数来对处理用户的请求。所以异步回调与其说是通知,不如说用委托更恰当。
socket 底层有一个 poll 的 api ,通过 epoll 或 kqueue 或 select 取得一系列的事件。用 lua 怎么封装它呢?一个比较直接的想法是注入一个 callback function ,对于每个事件回调一个 lua 函数。但这容易引起许多复杂的问题。因为回调函数很不可控,内部可能抛出异常,也可能引起函数重入,或是做了一些你不喜欢去做的事情。
[ 共3篇文章 ][ 第1页/共1页 ][ 1 ]
近3天十大热文
-
[1180] WordPress插件开发 -- 在插件使用 -
[73] 解决 nginx 反向代理网页首尾出现神秘字 -
[43] web开发设计人员不可不用的在线web工具和 -
[39] Java开发岗位面试题归类汇总 -
[31] 一句话crontab实现防ssh暴力破解 -
[31] Rax 系列教程(长列表) -
[30] 手机产品设计方向 -
[27] 程序员疫苗:代码注入 -
[27] 如何建立合适的索引? -
[26] oracle技术方面的路线
赞助商广告


