簡體   English   中英

在C代碼的非阻塞設計中選擇

[英]select in non-blocking design of c code

在Stevens等人的Unix Network Programming中,非阻塞套接字通過使用select調用的代碼進行了說明。 通常在阻止文件描述符之間進行選擇的調用相同。

我的理解是非阻塞設計確實是select的替代方案:我的代碼可以在非阻塞設計中循環檢查非阻塞描述符,然后執行其他操作,而不是在select調用中被阻塞。 我的理解是錯誤的還是對select調用有什么神秘之處,這使其在非阻塞設計中不可避免?

出於實際考慮,我需要使用大量的tcp套接字,每個套接字都需要設置“個人”超時。 我想到了使用非阻塞設計並遍歷相應數組的想法。 沒有選擇是否合適?

謝謝。

可自定義的不活動計時器實際上不應該與select()調用有任何關系。 分別維護您的計時器數組,在事件循環中的每個滴答聲或每次<x>迭代中更新它們,每當關聯的套接字有活動時重置任何計時器,在不活動達到閾值時將其關閉。 這與您實際處理輸入/輸出的方式沒有任何關系。

是否使用select()與是否使用非阻塞套接字正交。 畢竟, select()並沒有阻止您阻止讀取。 select()目的是防止您在不想這樣做時阻塞。 (並且不僅限於讀取:您始終可以在超時為零的情況下調用select() ,而select()也不會阻塞)。 此外,它提供了一種機制,用於知道何時有輸入比“迭代整個套接字,依次嘗試對每個套接字進行無阻塞read() ”效率更高。

暫無
暫無

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

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