事件驱动实现单线程实现并发 真正的高效并发
来源:互联网 发布:淘宝购物分享在哪里 编辑:程序博客网 时间:2024/05/17 23:22
单线程并发其实本质就是事件驱动加上异步系统调用。 这个在7年前就像做过,但是鉴于工作不需要也就没有去实现。 最近几年某个大型存储虚拟化系统就是事件驱动,而且一个cpu一个polling线程。
普通的并发实现依赖于多线程,然而多线程的切换中的上下文切换用到了用户空间,内核空间是几千行的内核代码的执行。 这个极大的浪费了系统资源。 另外,在某些比较实时的应用中,request的请求依赖于正在执行的线程是否yeld()。
单线程实现多路并发依赖于polling函数,去查询事件,这个可以自己实现也可以用系统函数,譬如select(), epoll(). 如果某个request请求的处理涉及的逻辑比较复杂,涉及到和其他模块的交互,甚至许多数据库操作、文件操作、socket操作等,那么实现就会比较复杂。
1. 针对某个request创造上下文,也就是自己实现context,记住一定要有ID标记哦。
2. 对复杂request请求使用状态机处理。 不同的步骤,对应不同的状态。
3. 不允许有阻塞操作,如果设计到文件、socket、数据库等,必须使用其异步操作,不然会阻塞polling 线程的执行。
4. 非阻塞而且异步。非阻塞还不够,非阻塞不一定是异步。 如果某个操作譬如数据库操作,调用时候执行条件满足于是立即执行了,但是执行时间久且在另外的节点上。于是可以异步操作。
5. 既然是异步,则必须有完成时的回调函数,完成方必须给出事件或者直接回调 callback.
6.根据系统性质,确定代码回到polling函数的时间,确定单个任务执行的最大时间。 如果某个任务确实需要大量的代码和时间,那么建议添加slow task机制。
开源事件驱动库: ibevent,libev和libuv
http://hi.baidu.com/jakisou/item/9fa97a32b5c99d637c034bc6
系统异步操作介绍
//linux 非阻塞 文件读写I/O介绍 AIO
http://blog.csdn.net/gotosola/article/details/7411688
//linux 下文件异步操作介绍 AIO_read 的使用
http://blog.csdn.net/wenhuiqiao/article/details/7066267//数据库异步操作, sql_server的很多操作支持异步。
//socket支持异步。
无堵塞并发编程
http://www.jdon.com/42781
http://blog.chinaunix.net/uid-22939760-id-186334.html
- 事件驱动实现单线程实现并发 真正的高效并发
- 单线程实现并发
- 什么是并发、单线程,事件驱动
- 如何实现高效的并发编程
- 线程实现并发服务器
- iOS并发编程指南——超级详细的指南,放弃线程,高效并发,实现完美体验吧
- I/O复用实现单线程并发服务器
- 一种简单线程并发控制的实现
- 并发包-Semaphore实现线程的通信
- 高并发下最全线程安全的单例模式几种实现
- 并发编程实践四:实现正确和高效的锁
- 抢红包、秒杀高并发场景的 mysql 高效实现
- JAVA Executor实现并发线程
- JAVA Executor实现并发线程
- C 线程实现并发服务器
- 高效的事件处理模式和高效的并发模式
- Quartz 并发/单线程
- Quartz 并发/单线程
- 算法导论 5.2-1 5.2-2
- 移植ubuntu core到Arm开发板
- MT6572平台加入呼吸灯功能——编写APP Demo
- HDU 1787 欧拉函数
- 从存储和分析角度看大数据和云计算区别
- 事件驱动实现单线程实现并发 真正的高效并发
- Memcached windows 下安装与测试
- Android WebApp无法使用ScrollTo等方法控制滚动条位置
- Android应用开发之synchronized
- windows核心编程--线程高级
- coldfusion9.0.2用post 提交表单的 字段个数超过100会出现500服务器错误
- 不熟的命令 或 方法等 方便今后查找
- Gallery的简单应用
- C语言 - 字符串的输入、输出