libuv 与原始 epoll 或 IOCP

Ala*_*way 2 multithreading epoll iocp libuv

我正在为消息传递库编写 IO 核心,并考虑使用 libuv 与在 linux 上使用原始 epoll 和在 Windows 上使用 IOCP(最终是其他的,solaris 事件等)。我喜欢 libuv 的可移植性,我正在关注性能。

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

libuv(根据我的阅读)有一个线程安全的事件循环,但我可以实现一个领导者-跟随者线程池。我的意思是一个线程(一次)是等待事件的“领导者”。当领导者收到事件时,它发出信号,追随者应该接替领导者。前领导者处理事件,然后成为追随者。

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

sag*_*hul 5

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

我建议你从 libuv 开始。如果只是因为它包含数百个已经处理的极端情况,以及大量内置知识。如果您想支持其他平台,您最终将以某种方式重新发明 libuv :-)

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