我正在寻找在Linux中提供与Win32线程池相同级别的内核调度器支持的线程池抽象。具体来说,我感兴趣的是找到一个线程池来维护一定数量的正在运行的线程。当运行池线程阻塞I/O时,我希望线程池足够聪明以启动另一个线程运行。
有人知道linux有这种情况吗?
发布于 2012-06-04 21:45:26
如果没有操作系统的支持,你真的无法做到这一点。没有一个很好的方法来判断线程在I/O上被阻塞了,最后你不得不在每次操作之前原子地增加一个计数器,而每次操作之后,计数器可能会被阻塞和减少。然后,您需要一个线程来监视该计数器,并在超过零的情况下创建一个额外的线程。(如果线程空闲时间超过一秒左右,则移除它们。)
一般来说,这是不值得的努力。这只在Windows上运行得很好,因为它是"Windows方式“,而Windows是从底层构建的。对于Linux,您应该使用epoll或boost::asio。使用"Linux方式“的东西,而不是试图使Windows方式在非Windows操作系统上工作。
您可以编写自己的包装器,在Windows上使用IOCP,在Linux上使用epoll,等等。但它们已经存在了,所以你不必费心。
https://stackoverflow.com/questions/10885605
复制相似问题