問題:
Go 同時実行パラダイムである TCPListener とは対照的です。 Go の Accept() 関数はブロック システム コールであり、同時実行性のためのチャネルに焦点を当てている言語の焦点と一見矛盾しています。 Accept() を使用した select() の固有のサポートや、ブロック動作を制御するオプションはないようです。
回答:
それぞれに別個の goroutine が必要であることが懸念されます。リスニングソケットは有効です。 Go ルーチンはランタイムによって管理される軽量のスレッドであるため、ブロック操作が適切になります。ランタイムはこれらのルーチンの中から効果的に選択し、目に見えるメカニズムを使わずに目的の動作を提供します。
タイムアウトを伴う選択のような操作を実装するには、次のアプローチを検討してください。
select ステートメントで newConns チャネルを監視します。
チャネルとゴルーチンを使用することで、このアプローチでは、Go の同時実行モデルを遵守しながら、リスナー アクティビティの多重化とタイムアウトの処理が可能になります。
以上がTCP Accept はブロックしているにもかかわらず、Go の同時実行モデルにどのように適合しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。