[英]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.