Reactor
moduo网络库的reactor模式基本构成为“non-blocking I/O + I/O multiplexing”,程序的基本结构是一个事件循环(event loop),以事件驱动(event-driven)和事件回调(event callback)的方式实现业务逻辑。此文参照陈硕的moduo网络库稍作简化,抽出reactor模式的基本框架。
1、线程同步:采用底层同步原语,互斥器+条件变量
线程同步尽量使用高级并发编程构建。若要使用底层同步原语,则尽量只使用互斥器和条件变量。互斥器和条件变量构成了多线程编程的全部必备同步原语,用它们即可完成任何多线程同步任务。
1.1封装互斥器
封装互斥器保护对象共享资源,不同对象间不会构成锁争用。其中:
MutexLock封装临界区。用RAII手法封装互斥器的创建与摧毁。
MutexLockGuard封装临界区的进入和退出,即加锁和解锁。它是一个栈上对象,作用域刚好等于临界区域。
1.2封装条件变量
2. 封装线程thread
采用线程池技术
3.事件循环
Reactor模式基本构成为“non-blocking I/O + I/O multiplexing”,遵循“one loop per thread” 。程序的基本结构是一个事件循环(event loop),通过I/O多路复用器select、poll和epoll等实现。再以事件驱动(event-driven)和事件回调(event callback)的方式实现业务逻辑,此处暂时省略该方式,事件循环仅调用系统函数poll延时1s。