gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:52 25 4
gpt4 key购买 nike

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

最佳答案

您的队列有两个作用:在线程之间交换数据并同步它们。

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

对于进程内通信,交换的数据量并不是真正的问题,因为您总是可以只传输数据的指针(并且约定发送线程是 malloc-接收线程将在消费后释放它。

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

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

您还可以在流程内部使用管道(在接收方使用poll)。

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

关于c - 用于进程内线程通信的posix队列与自定义0复制队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com