我正在寻找一个在Linux中提供与Win32线程池相同级别内核调度支持的线程池抽象。具体而言,我想要找到一个能够维护一定数量正在运行的线程池。当运行的线程池因I/O阻塞时,我希望该线程池足够智能,能够启动另一个线程运行。 有人知道类似于这样的Linux线程池吗?
你不能没有操作系统的支持做到这一点。没有好的方法来告诉一个线程是否在I/O上被阻塞。因此,你需要在每个可能阻塞的操作之前原子地增加一个计数器,在之后减少它。然后你需要一个线程来监视该计数器,并在其值大于零时创建一个额外的线程。(如果它们闲置时间超过一秒钟,则移除线程。)一般来说,这并不值得努力。这只在Windows上运行良好,因为它是“Windows方式”,而Windows从根本上就是为此而建立的。对于Linux,你应该使用epoll或boost::asio。使用一些符合“Linux方式”的东西,而不是试图在非Windows操作系统上使Windows方式工作。你可以编写自己的包装器,在Windows上使用IOCP,在Linux上使用epoll等。但是这些已经存在,所以你不必费心。