同時実行制御は、Pub/Sub の高レベル クライアント ライブラリで使用できる機能です。低レベル ライブラリを使用している場合は、独自の同時実行制御を実装することもできます。
同時実行制御のサポートは、クライアント ライブラリのプログラミング言語によって異なります。C++、Go、Java などの並列スレッドをサポートする言語を実装する場合、クライアント ライブラリはデフォルトのスレッド数を選択します。
しかし、この値がアプリケーションに最適ではない場合もあります。たとえば、サブスクライバー アプリケーションがメッセージの受信量に対応できず、CPU にバインドされていない場合は、スレッド数を増やす必要があります。CPU 使用率の高いメッセージ処理のオペレーションでは、スレッド数を減らすと、問題が解決する場合があります。
同時実行制御の構成
同時実行制御変数のデフォルト値と変数の名前は、クライアント ライブラリによって異なる場合があります。たとえば、Java クライアント ライブラリでは、同時実行制御を構成するメソッドは setSystemExecutorProvider()
、setExecutorProvider()
、setParallelPullCount()
です。
setParallelPullCount() を使用すると、開くストリームの数を決定できます。サブスクライバー クライアントが 1 つのストリームで送信されるデータ(10 MBps)よりも多くのデータを処理できる場合は、より多くのストリームを開くことができます。
setExecutorProvider() を使用すると、メッセージの処理に使用するエグゼキュータ プロバイダをカスタマイズできます。たとえば、エグゼキュータ プロバイダを、複数のサブスクライバー クライアントの間でスレッド数が制限された単一の共有エグゼキュータを返すプロバイダに変更できます。この構成は、作成されるスレッドの数を制限することに役立ちます。
setSystemExecutorProvider() を使用すると、リース管理に使用するエグゼキュータ プロバイダをカスタマイズできます。通常、
setExecutorProvider
とsetSystemExecutorProvider
で同じエグゼキュータ プロバイダを使用する場合を除き、この値は構成しません。たとえば、スループットの低いサブスクリプションが多数ある場合は、同じエグゼキュータ プロバイダを使用できます。同じ値を使用すると、クライアント内のスレッド数が制限されます。
同時実行制御に使用されるスレッドの合計数は、クライアント ライブラリで渡されるエグゼキュータ プロバイダと並列 pull 数によって変わります。
同時実行制御のコードサンプル
C++
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C++ の設定手順を実施してください。詳細については、Pub/Sub C++ API リファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API リファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API リファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API リファレンス ドキュメントをご覧ください。
次のステップ
サブスクリプションに構成できる他の配信オプションについて確認します。