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