[英]IPC for "waking up" from epoll() (C, UNIX)
我需要從另一個進程“喚醒”一個正在等待 epoll() 的進程。
我創建了一個 UDS (AF_UNIX) 類型 SOCK_DGRAM,其中:
我怎樣才能最有效地做到這一點? 我是否必須讀取()數據? 服務器能否以某種方式忽略數據而不會使套接字的內存過載?
我是否必須讀取()數據? 服務器能否以某種方式忽略數據而不會使套接字的內存過載?
如果您正在持續接收套接字上的數據,那么是的,您需要讀取該數據,否則套接字緩沖區最終會填滿。 完成后,您將不會再收到任何數據。 您不需要對讀取的數據做任何事情,如果您願意,您可以一次消耗許多字節,但讀取數據是您將它們從套接字緩沖區中刪除的方式。
如果您不讀取數據,您還會發現epoll_wait()
不會按照您想要的方式運行。 如果你在 level-triggered 模式下觀察 socket fd,並且已經有數據可以讀取,那么epoll_wait()
不會阻塞。 如果你正在看在邊沿觸發模式的套接字fd,並已經有准備讀取數據,然后接收更多的數據不會造成epoll_wait()
來取消塊。
我怎樣才能最有效地做到這一點?
你真的擔心單字節read()
調用的速度不超過每幾毫秒一次嗎? 這是針對某些低功耗嵌入式系統嗎?
如果您已經決定為此使用 epoll,我真的不認為有很大的改進空間。 如果結果對您來說表現不夠好,那么您可以考慮替代方案,例如進程共享的信號量或信號,盡管目前尚不清楚這兩者中的任何一個是否更好。 這就是性能測試的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.