簡體   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