繁体   English   中英

posix队列与用于进程内线程通信的自定义0复制队列

[英]posix queue vs custom 0 copy queue for intra-process thread communication

这是一个设计问题。 通常,Posix队列比任何自定义队列都更受青睐,因为它们经过了全面的测试,并提供高级功能,例如优先级排队,这可能是开发的关键。 但是,如果我们从INTRA流程通信的角度分析它,那么,如果仅在共享数据的同一流程的多个线程之间使用它们,那么它们的效果如何。 POSIX队列一旦识别出发送方和接收方共享相同的地址空间,是否通过删除不必要的copy_to_user和copy_from_user来优化其消息传递?

您的队列有两个作用:在线程之间交换数据并对其进行同步。

显然,您的替代方案是posix队列或您自己的队列(带有pthread互斥锁和用于锁定和同步的条件变量)。

对于进程内通信,所交换的数据量并不是真正的问题,因为您始终可以仅传输数据的指针(并且约定发射线程正在malloc ,而接收线程将在之后free它)消费)。

我猜(但您必须测量),Posix队列可能会稍微慢一些,因为它们可能涉及每个操作的syscall。 相比之下,pthread操作仅针对争用涉及syscall( futex(2) )(在非阻塞操作的常见情况下,互斥锁不进行syscall)。

我不确定内核是否可以优化消息传递来避免copy_to_user因为它可能不知道何时只有一个进程的队列(它无法预测以后没有其他进程mq_open同一队列)。

而且,您还可以使用流程内部的pipe (在接收方进行poll )。

但是您确实必须进行基准测试。 我不确定这有什么大问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM