簡體   English   中英

Linux 套接字的 SIGIO 與 epoll

[英]SIGIO vs epoll for Linux sockets

linux 的套接字文檔( man 7 socket )說您可以將套接字設置為 O_ASYNC,然后在套接字准備好讀/寫時接收信號。

但是,似乎大多數人都使用 epoll。 使用 epoll 而不是這種異步信令系統的原因是什么?

如果您有一個中央循環,您可以在其中捕獲所有類型的事件,那么編寫單線程應用程序就變得非常容易,而且您不必擔心在不同的執行上下文中運行時可能出現的所有同步問題。

如果您使用信號處理程序,則必須注意不要從信號處理程序上下文中調用不可重入函數。 有一個允許調用的異步信號安全函數列表。 正如您所看到的,這是一個簡短的列表! 因此,您的信號處理程序不能做太多事情,也許只能設置一個標志或發送一條消息,而真正的工作必須在“某處”完成。 事實上,信號處理程序非常有限。

在多線程應用程序中使用信號處理程序也並不像乍一看那么容易,因為處理程序是針對每個任務而不是每個線程的。 閱讀更多: 多線程環境中的信號處理函數

暫無
暫無

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

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