Go プログラムのメイン Goroutine と Spawned Goroutine の違い
多数のクライアント リクエストを処理する場合、gRPC サーバーの動作は、メインプロセスとして起動されるか、Goroutine として起動されるか。サーバーは、メイン プロセスとして実行される場合は数千のリクエストを処理しますが、ゴルーチンとして実行される場合は数百のみです。
スタック サイズの違いの原因
ゴルーチンが生成されたためではありませんメインの goroutine よりもスタック サイズ (2K バイト) が小さくなります。 Go では、ゴルーチンは、ヒープからの割り当てにより無限の容量で、必要に応じてスタックを拡張および縮小できます。
メイン ゴルーチンの空のループ
空のループメインのゴルーチンでは CPU コアが 100% 消費され、プログラムが終了できなくなります。これを解決するには、sync.WaitGroup などのメカニズムの使用を検討し、{}、チャネル、または time.Sleep を選択して操作の完了を待ちます。
メインおよび生成された Goroutine のスタック制限
最初の想定に反して、メインゴルーチンと生成されたゴルーチンのスタック制限は同じです。これは、2 つのゴルーチンを実行することで実証できます。1 つはメインのゴルーチンとして、もう 1 つは生成されたゴルーチンとして実行されます。 The Go Playground で見られるように、どちらのゴルーチンもデフォルトの 250MB のスタック制限を超え、「スタック オーバーフロー」エラーでクラッシュします。
結論として、メインのゴルーチンと生成されたゴルーチンの主な違いは、むしろその動作に関係しています。固有のスタック サイズよりも大きくなります。メインのゴルーチンは、空のループでプログラムの実行をブロックする可能性があるため、慎重に使用する必要があります。
以上がgRPC サーバーがメイン プロセスとして実行する場合と比較して、Goroutine として処理するリクエストが大幅に少なくなるのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。