1

我有一个 pthreads 应用程序,我目前使用常规 linux 管道来通信并向各个线程发送消息。它工作正常,并没有真正损坏,但我有一种可以改进的感觉。

如果我想设计最小的延迟,那么在 pthread 之间进行通信的最快方法是什么?使用条件变量会比管道更快吗?

我需要传递少量数据,作为带有几个参数的单个 int optcode。pthreads 条件变量会让我在线程之间传递数据吗?

谢谢,

-安德烈斯

4

2 回答 2

1

由于它在线程之间,因此共享内存或无锁队列都会快得多。

选择哪一个取决于您传递的数据。由锁保护的两个线程之间共享的静态缓冲区很好。在您生成数据并将其传递给另一个线程的地方,队列可能是更好的选择。

有界无锁 MPMC 队列的一些实现可在此处获得:http ://www.1024cores.net

顺便说一句,要小心编写自己的无锁数据结构。它们并不像您期望的那样微不足道。锁定版本将是一个好的开始,并且仍然会胜过管道。

在进程之间调用它们的 linux 管道(或 unix 域套接字是一个不错的选择)。

于 2012-12-10T23:50:57.350 回答
1

使用线程而不是单独的进程的主要优点是它们共享内存。通过管道发送数据需要通过内核进行往返,而将共享内存缓冲区与互斥锁和条件变量结合使用可以避免这种情况——当然它应该比使用管道具有更低的延迟。

您不使用条件变量直接传递感兴趣的数据。相反,数据被放置到两个线程共享的内存位置,并且使用条件变量来唤醒正在等待数据到达的线程。

于 2012-12-11T06:04:20.007 回答