Windows操作系统,一个线程模型,其中ThreadPool与IO完成关联,每次完成Async IO时释放〜一个线程,然后使用~release_ thread来处理IO完成。
虽然linux select可用于异步IO,但它似乎不支持IO Completion / ThreadPool逻辑。
是否有任何Linux等同于线程模型上方的IO Completion / ThreadPool?
答案 0 :(得分:1)
我不知道直接执行此操作的任何内容,但您可以将select()
循环与您自己的线程池结合使用以获得类似的行为。当select()
返回并检查您的fd_set
以查看哪些文件描述符已准备就绪时,将每个描述符推送到线程池进行处理。您仍然需要一个主线程来运行select()
循环,独立于线程池来处理I / O事件。
这种方法的大部分复杂性在于如何跟踪每次迭代时select()
调用中需要包含哪些描述符,以及线程池本身(因为POSIX提供线程但不是标准线程池API)。
您可能有兴趣使用像GLib这样的库,它提供了一个模块化main loop,可以帮助轮询不同的文件描述符集,以及thread pool实现。