记一个libevent遇到的坑
2019-03-03 本文已影响0人
Quasars
网络层是大多数基础服务都需要的一个东西,libevent是个单线程模型(reactor模式)的网络库。
而单线程模式,就必须保证事件的回调处理是非阻塞的。
但在某些场景下,必须阻塞某种事件,如网络限速/磁盘限速等限速场景。
这两个就坑了,如果事件都由同一个线程处理,必然引起不该阻塞的事件被阻塞住。
目前想到的解决方案是增加1个(组)线程,由该线程处理紧急,非阻塞的事件。这也是较为流行的做法,1组线程处理普通/可阻塞事件,1组线程处理高优/非阻塞事件。