自动消息调度器的实现
来源:互联网 发布:阿里域名隐私保护 编辑:程序博客网 时间:2024/06/05 02:24
在面向Windows系统的应用开发中,利用IO完成端口进行消息排队一直是处理多线程数据同步的一个有效武器,通过IO完成端口的消息队列机制,可以把各种不同的线程数据进行同步到最终的工作线程上,这样在工作线程上,只需要实现其具体的业务逻辑就可以了,不用关心任何与资源锁定等麻烦的操作,作为IO完成端口进行数据同步,其实是充分的利用了操作系统底层的缓存处理机制和内核的锁处理机制。工作线程只需要监听消息出口就可以了,系统会自动进行阻塞控制。
但是到了跨平台的调用时,尤其是脱离了Windows桌面操作系统,由于各种API 的限制,我们就没法利用系统层面提供的IO完成端口API,也无法利用其高效处理性。 既然消息队列机制,很有用,并且在很多类库中的处理思路上已经用到了该机制,为了跨平台操作的一致性,我们就需要引入一种实现IO完成端口实现消息队列的机制。
消息队列的设计思路是,利用一个有锁队列,进行消息的排队,利用信号量,进行消息处理信号通知,利用工作者线程,实现最终的业务逻辑调用出口,工作者线程内部,通过信号量进行阻塞等待或工作。
因为是模拟IOCP消息队列的实现,其效率也就无法保证有IOCP的效率高,影响效率的主要因素在于对消息缓冲队列的入队和出队锁定,因为此处的锁定是需要在内核态和用户态进行线程切换,实际测试中,如果不是在几百上千等高并发场合,其效率还可以,可以满足一般的业务需求。
初始设计是想利用CAS原语实现无锁队列,由于其编程模型变的异常复杂和将来CAS原语会不会随着编译器在CPU指令层面的调度更改的不确定性,因此放弃了CAS原语构造无锁队列。
- 自动消息调度器的实现
- 调度器的实现
- 实现任务的自动调度——Quartz
- 进程管理和调度 --调度器的实现
- Mysql的自动事件调度
- 一个简易的QQ自动消息机的实现
- 消息调度
- IOS实现消息自动消失
- Spring Quartz 实现任务自动调度
- Spring实现自动任务调度-------------task
- Spring实现自动任务调度-------------task
- Spring+quartz实现自动任务调度
- SpringMvc自动任务调度之task实现
- Spring+Quartz 实现自动作业调度
- CFS调度器的实现代码
- FreeRTOS 抢占式调度器的实现
- Linux调度的实现
- 消息调度中心的学习资料汇总
- 虚拟内存介绍
- LightTable:更改Julia代码字体和console中字体
- 第12章、布局Layouts之LinearLayout线性布局(从零开始学Android)
- VisualStudio2010旗舰版打开后,出现各种程序包加载失败的问题。
- IP数据包 标识 标志 片偏移
- 自动消息调度器的实现
- android应用开发及系统有用代码片段总结
- 第13章、布局Layouts之RelativeLayout相对布局(从零开始学Android)
- 任意进制的转换(base2-base36)
- Eclipse “cannot be resolved to a type” error
- LeetCode——Palindrome Number
- .net C# 异步Socket 发送类.
- RemoteViews用法一:widget简单用法
- 类的继承与组合