【发布时间】:2018-12-17 05:47:48
【问题描述】:
我从事一个用 C++ 编写并在嵌入式 Linux 上执行的多线程服务器应用程序。一个线程(我称之为通信线程)应该处理所有套接字 I/O(发送和接收消息)。 根据接收到的消息,通信线程将消息发送到另一个处理所需序列的线程(例如控制器线程)。控制器线程在序列结束时创建返回消息。此消息被写回通信线程,通信线程应将它们传输给客户端。
这两个线程之间的通信是通过队列实现的,队列通过mutex和condition_variable保护。现在,当通信线程收到套接字消息时,它会将它们传输到控制器线程并等待来自控制器线程的消息。 因此,多线程架构并没有带来任何好处。我的目标是在通信线程中等待套接字消息或“排队”消息。
为此,我想更改线程之间的队列实现并用管道或 eventfd 替换它们。然后我会使用 Communication-Thread 中的 select() 函数同时观察队列和套接字。但我对这个解决方案的性能有些担忧。 有人对此问题有更好的想法或解决方案吗?
简洁的问题:
我会同时在多线程应用程序中观察套接字和某种消息。 对于这类问题,有人知道比管道或 eventfd 更有效的实现吗?
感谢您对此主题的任何提示
【问题讨论】:
标签: c++ linux multithreading sockets server