簡體   English   中英

Unix域套接字:使延遲不變

[英]Unix domain socket : Make Latency constant

問題摘要:AF_UNIX穩定發送,突發接收。

我有一個應用程序B,它通過Unix域數據報套接字接收數據。 有一個對等應用程序A向它發送數據。 A和B都連續運行(並且都是SCHED_FIFO)。 我的應用程序A也打印接收時間。

對等應用程序B可以在不同的時間(僅以毫秒為單位)發送數據。 理想情況下(我所期望的),數據包發送延遲應與接收延遲完全匹配。 例如:

A sends in time            :  5ms     10ms      15ms     21ms   30ms   36ms
B should receive in time   :  5+x ms  10+x ms   15+x ms  21+x ms ... 

其中x是恆定延遲。

但是當我進行實驗時,我在B中觀察到的是:

A sends in time            :  5ms     10ms      15ms     21ms   30ms   36ms
B received in time         :  5+w ms  10+x ms   15+y ms  21+z ms ... 

(w,x,y,z是不同的恆定延遲)。 所以給定發送時間后,我無法預測接收時間。

是因為Unix域套接字涉及某些緩沖嗎? 請為該問題提出一些解決方法,以便可以從發送時間開始確定接收時間。 我需要1毫秒的精度。

(我正在使用香草Linux 3.0內核)

當您使用阻塞recv()時,如果沒有可用的數據報,則您的程序將被取消調度。 這對您的用例不利-您希望程序保持最新狀態。 因此,請使您的recv()處於非阻塞狀態,並通過忙於等待來處理EAGAIN。 這將消耗一個內核的100%,但我認為您會發現它可以幫助您實現目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM