並行控制是 Pub/Sub 高階用戶端程式庫提供的功能。使用低階程式庫時,您也可以實作專屬的並行控制機制。
並行控制的支援功能取決於用戶端程式庫的程式設計語言。對於支援平行執行緒的語言實作 (例如 C++、Go 和 Java),用戶端程式庫會為執行緒數量做出預設選擇。
這項選擇可能不適合您的應用程式。舉例來說,如果訂閱者應用程式無法追上傳入訊息的數量,且並非受 CPU 限制,就必須增加執行緒數。對於 CPU 密集的訊息處理作業,減少執行緒數可能會比較適合。
本頁面說明並發控管的概念,以及如何為訂閱者用戶端設定這項功能。如要設定發布者用戶端以便控管並行作業,請參閱「並行作業控管」。
並行控制設定
並行控制變數的預設值和變數名稱可能因用戶端程式庫而異。詳情請參閱 API 參考說明文件。舉例來說,在 Java 用戶端程式庫中,用來設定並行控制的程式是 setParallelPullCount()
、setExecutorProvider()
、setSystemExecutorProvider()
和 setChannelProvider()
。
setParallelPullCount() 可讓您決定要開啟多少個串流。如果訂閱者用戶端可處理的資料量大於單一串流傳送的資料量 (10 MBps),您可以開啟更多串流。
setExecutorProvider() 可讓您自訂用於處理訊息的執行緒供應器。舉例來說,您可以將執行緒供應器變更為在多個訂閱者用戶端傳回單一共用執行緒的供應器,並限制執行緒數量。這項設定有助於限制建立的執行緒數量。用於並行控制的執行緒總數取決於在用戶端程式庫中傳遞的執行緒供應器和並行拉取數量。
setSystemExecutorProvider() 可讓您自訂用於租用權管理的執行工具提供者。通常,除非您想在
setExecutorProvider
和setSystemExecutorProvider
中使用相同的執行器提供者,否則不需要設定這個值。舉例來說,如果您有許多低吞吐量的訂閱項目,可以使用相同的執行緒提供者。使用相同值可限制用戶端中的執行緒數量。setChannelProvider() 可讓您自訂用於開啟 Pub/Sub 連線的管道提供者。除非您想在多個訂閱者用戶端中使用相同的管道,否則通常不會設定這個值。在太多用戶端中重複使用管道,可能會導致
GOAWAY
或ENHANCE_YOUR_CALM
錯誤。如果您在應用程式記錄或 Cloud Logs 中看到這些錯誤,請建立更多管道。
並行控制的程式碼範例
C++
在嘗試這個範例之前,請先按照 快速入門:使用用戶端程式庫中的操作說明設定 C++ 環境。詳情請參閱 Pub/Sub C++ API 參考說明文件。
Go
在試用這個範例之前,請先按照 快速入門:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 Pub/Sub Go API 參考說明文件。
Java
在嘗試這個範例之前,請先按照 快速入門:使用用戶端程式庫中的操作說明設定 Java 環境。詳情請參閱 Pub/Sub Java API 參考說明文件。
Ruby
在嘗試這個範例之前,請先按照 快速入門:使用用戶端程式庫中的操作說明設定 Ruby 環境。詳情請參閱 Pub/Sub Ruby API 參考說明文件。
後續步驟
瞭解可為訂閱項目設定的其他放送選項: