2016-11-05 57 views
0

我很少知道epoll,檢查一些文件,然後想後,運行這樣的:如何使用epoll並使處理函數非阻塞?

while(true){ 
    epoll_wait(some_sock_fds); 
    foreach(usable_fds){ 
     handler(one_fd); <----- this function must be non-blocking ? 
    } 
} 

handler功能應該有一些關於網絡的讀/寫或文件操作,我想應該是不阻止,是嗎?

如何編寫handler函數,使其不會阻塞主循環?

+0

它可以阻止,epoll等待,只給你那些不會阻止的fds,所以處理器保證不會阻塞。 –

+0

@RomanHocke在'foreach'循環中,處理第一個'fd'可能花費5s,第二個'fd'應該等待5s,是嗎? – user1418404

+0

「處理第一個fd可能花費5s」第一個fd的數據已準備就緒,由epoll保證,不會有任何等待。 –

回答

0

io線程應該關注網絡任務。如果套接字被阻塞,則應該在單獨的線程中處理每個套接字。每個套接字一個線程。