【发布时间】:2012-08-22 09:26:43
【问题描述】:
当我们想要设计一个通用的事件处理(I/O 解复用)或反应器模式模型时。我们使用的底层系统调用是“select”或“poll”。但是这两个系统调用在常见的 FD 集上都不是线程安全的。不能在多线程环境中使用。
处理跨多个 I/O 的多线程事件的更好方法是什么。
我能看到的一种方式是,主线程接收任何事件并推送到线程池的共享队列中。但是工作线程不能通过 I/O 发送数据会导致同步问题。还有内存溢出的缺点。
欢迎所有可能的建议。提前致谢。
【问题讨论】:
-
我会研究 boost asio,它为你包装了底层细节,你可以使用一个更好的界面,它已经可以处理各种 io“事件”,并允许你“发布”自己的事件到要处理的“队列”...
-
您将使用一个线程进行轮询,并将实际 I/O 分配给工作线程(线程池之外)。
标签: c++ multithreading event-handling signals