不,我不会认为管道"轻量级",但这并不一定意味着它们对您的应用程序来说也是错误的答案.
在管道上发送一个字节将需要至少3个系统调用(写入,轮询,读取).使用内存中队列和pthread操作(mutex_lock,cond_signal)可以减少开销.开放文件描述符肯定会消耗内核资源; 这就是为什么默认情况下进程通常限制为256个打开文件(而不是在适当的情况下不能扩展限制).
仍然,用于线程间通信的管道/轮询解决方案也具有优势:特别是如果您需要等待来自组合源(网络+其他线程)的输入.
当您使用Linux时,您可以调查并比较pipe
性能eventfd
.它们在技术上更快,重量更轻,但你会非常幸运地看到实践中的收益.
http://www.kernel.org/doc/man-pages/online/pages/man2/eventfd.2.html