您现在的位置:首页 --> 查看专题: 回调
近来老见到人有内存泄漏的问题,自己写模块和例子的时候,也发现有内存泄漏的问题。。。学艺不精啊,所以特在这写一个文章来分享一下有关这方面的内容。
传统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天十大热文
- [49] WEB系统需要关注的一些点
- [48] Oracle MTS模式下 进程地址与会话信
- [46] Go Reflect 性能
- [45] Twitter/微博客的学习摘要
- [45] android 开发入门
- [45] 【社会化设计】自我(self)部分――欢迎区
- [45] IOS安全–浅谈关于IOS加固的几种方法
- [44] find命令的一点注意事项
- [43] 图书馆的世界纪录
- [43] 关于恐惧的自白
赞助商广告