如何实现单线程异步IO、信号、定时器


先说IO
通过这两天的思考和在互联网上的搜索,发现了一个事实:单线程异步IO是要依赖于操作系统实现的,比如POSIX平台的aio(内核注册io事件,完成后通过CPU中断来通知);关于aio,我记得很久以前放过一个例子在GitHub上的bin源里。

再说信号
信号这个东西本来就是异步的, 当然你也可以为了等一个信号而阻塞,比如Linux平台下sigwaitpasue

最后说定时器
定时器要做成异步的当然也有办法,比如Linux平台下的alarmsetitimer以及POSIX平台下的timer_*系列函数。如果要自己实现,那么要注意几点:

  • 当前时间的获取
  • 可以使用操作系统提供的接口,比如Linux平台下的clock_gettime,也可以使用标准库中的函数,比如C++11起chrono中提供有high_resolution_clock
  • 容器的选择
  • 平衡树、最小堆,其他的还有比如,链表、时间轮等

另外,另起一个线程是推荐的。


最后,在此提供一个简单的使用_chrono_和_最小堆_的实现

timer



转载请注明:Serenity » 如何实现单线程异步IO、信号、定时器