libuv与原始epoll或IOCP

时间:2016-05-13 19:15:44

标签: multithreading epoll iocp libuv

我正在编写消息库的IO核心并考虑libuv与使用Linux上的原始epoll和Windows上的IOCP(最终是其他的,solaris事件等)。我喜欢libuv的可移植性,我&#39 ;我看着表演。

epoll和IOCP允许多个线程直接等待IO事件,内核进行调度。虽然我没有任何数字,但可能比用户空间调度效率更高。

libuv(基于我的阅读)有一个thread-usafe事件循环,但我可以实现一个leader-follower线程池。我的意思是,一个线程(一次)是"领导者"等待事件。当领导者得到一个事件时,它表示一个追随者应该接任领导者。前领导者处理事件然后成为追随者。

我希望假设libuv得到有效实施,应该与原始多线程epoll / IOCP的性能接近。我会做自己的测量,但我想听听有经验的人的意见。

1 个答案:

答案 0 :(得分:3)

免责声明:我是libuv的维护者之一。

我建议你从libuv开始。如果只是因为它包含已经处理好的角落案例,并且内置了大量的知识。如果你想支持其他平台,你将最终以这种或那种方式重新发明libuv: - )

使用libuv构建服务器原型后,运行一些基准测试,看看瓶颈在哪里。根据您编写的服务器类型,您可能需要/想要一个多线程事件循环,而libuv不是这样,但libuv很可能对您有用。