簡體   English   中英

無阻塞發送功能

[英]Non-Blocking sendto function

我在我的cpp代碼中使用了阻塞sendto(標志設置為0)功能,該功能的最大接收時間為3微秒,最小接收時間為600nanosec。
我想要一個非阻塞的方法(即立即返回)並且花費更少的時間。
我嘗試使用將標志設置為MSG_DONTWAIT的sendto,發現非阻塞sendto在延遲方面類似於阻塞sendto。
請提出一種非阻塞且省時的替代方法。

您需要使用select ()epoll()類似的技術來找出套接字何時確切可寫。 如果是Linux,請查看相應的man頁。 對於獨立於平台的解決方案,您可以查看libevent庫。

...最多需要3微秒,最少600納秒。

這是系統將消息放入涉及系統調用的套接字緩沖區所需的時間。 這不包括發送到對等點本身,而稍后在內核中完成。 這也意味着使用阻塞還是非阻塞sendto都沒有關系,因為在兩種情況下都需要將消息放入套接字緩沖區。 這也意味着沒有selectepollboost::asio或其他任何方法都可以使此操作更快,因為它們不會減少將消息放入套接字緩沖區所需的時間。

阻塞發送和非阻塞發送之間的唯一區別是,第一個將等待系統在套接字緩沖區中騰出空間,以防緩沖區已滿,即,如果您發送消息的速度比系統傳遞消息的速度快。

尚不知道您的應用程序實際執行的操作,但加快速度的一種方法可能是通過使用較大的消息來減少sendto調用的次數。

暫無
暫無

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

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