我使用C ++编写并在嵌入式Linux上执行的多线程Server应用程序上工作。一个线程(我称它们为通信线程)应处理所有套接字I / O(发送和接收消息)。 根据接收到的消息,通信线程将消息发送到另一个线程(例如,控制器线程),该线程处理所需的序列。由控制器线程在序列的末尾创建一个返回消息。该消息被写回到通信线程,该线程应将其传输到客户端。
这两个线程之间的通信是通过受 mutex 和 condition_variable 保护的队列实现的。现在,当通信线程收到套接字消息时,它将它们传输到控制器线程,并等待来自控制器线程的消息。 因此,多线程体系结构没有任何好处。我的目标是在通讯线程中等待套接字消息或“排队”消息。
为此,我想更改线程之间的队列实现,并用管道或eventfd替换它们。然后,我将使用Communication-Thread中的select()函数来同时观察队列和套接字。但是我对此解决方案的性能有些担忧。 有没有更好的主意或解决方案?
紧凑型问题:
我会同时在多线程应用程序中观察套接字和某种消息。 对于这种类型的问题,有人知道比管道或eventfd更有效的实现吗?
感谢您对此主题的任何提示
答案 0 :(得分:2)
如果boost :: asio在嵌入式Linux版本上可用,请使用。它旨在完全满足您的需求,具有出色的界面和出色的功能。看一下教程。这需要一点时间来适应,但是它使多线程网络应用程序变得容易得多。