2016-11-05 1 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

'foreach'ループの@RomanHockeは、最初の' fd'を処理するには5秒、2番目の 'fd'は5秒待つ必要がありますか? – user1418404

+0

"最初のfdを処理するには5秒かかります"最初のfdのデータは準備ができており、epollによって保証されています。 –

答えて

0

ioスレッドは、ネットワークタスクに焦点を当てる必要があります。ソケットがブロックされている場合は、すべてのソケットを別のスレッドで処理する必要があります。ソケットあたり1つのスレッド。

関連する問題