Go のクライアント ストリーミング gRPC サービスでフロー制御がどのように機能するかを知りたいです。
stream.SendMsg()
具体的には、クライアント側のブロックで呼び出しがいつ機能するかを知りたいです。ドキュメントによると:
SendMsg() は までブロックします:
- トランスポートで m をスケジュールするのに十分なフロー制御がある、または ...
では、ストリームのフロー制御メカニズムの仕様は何ですか? たとえば、ストリームからのメッセージの読み取りを担当するサーバー側のコードが、メッセージの読み取り速度が十分でない場合、どの時点で SendMsg() ブロックが呼び出されるのでしょうか?
サーバーがクライアントにそれ以上のデータを受信する準備ができていないことを伝えるために実装された何らかのバックプレッシャーメカニズムはありますか? それまでの間、バックプレッシャ信号の前に正常に送信されたすべてのメッセージはどこにキューに入れられますか?