クライアントとサーバーの実装

Bazel システムは長時間サーバー プロセスとして実装されています。これにより、ビルド単位のキャッシュ、依存関係グラフ、その他のメタデータのビルドなど、バッチ指向の実装では不可能な多くの最適化が可能になります。これにより、増分ビルドの速度が向上し、読み込まれたパッケージの同じキャッシュを buildquery などのコマンド間で共有できるため、クエリが非常に高速になります。

bazel を実行すると、クライアントが実行されます。クライアントは出力ベースに基づいてサーバーを探します。この出力ベースは、デフォルトでは基本ワークスペース ディレクトリのパスとユーザー ID によって決定されるため、複数のワークスペースを構築する場合、複数のワークスペースを作成できます。したがって、複数の Bazel サーバー プロセスが作成されることがあります。 出力ベースが異なる(異なる userid)ため、同じワークステーション上の複数のユーザーが同じワークスペースで同時にビルドできます。実行中のサーバー インスタンスが見つからない場合は、新しいインスタンスを起動します。非アクティブな状態が一定期間続くと、サーバー プロセスが停止します(デフォルトでは 3 時間。起動オプション --max_idle_secs を使用して変更できます)。

ほとんどの場合、実行中のサーバーについてはユーザーが確認できませんが、念頭に置いておくことをおすすめします。たとえば、さまざまなディレクトリで多数の自動ビルドを実行するスクリプトを実行する場合は、アイドル状態のサーバーの多くを蓄積しないようにすることが重要です。これを行うには、作業が終了したらそれらを明示的にシャットダウンするか、短いタイムアウト期間を指定します。

Bazel サーバー プロセスの名前は、ps x または ps -e f の出力で bazel(dirname) として表示されます。ここで、dirname はディレクトリを囲むディレクトリのベース名です。ワークスペース ディレクトリのルート。例:

ps -e f
16143 ?        Sl     3:00 bazel(src-johndoe2) -server -Djava.library.path=...

これにより、特定のワークスペースに属するサーバー プロセスを簡単に把握できます。(ps の他のオプションを使用すると、Bazel サーバー プロセスは java という名前のみになります)。Bazel サーバーを停止するには、shutdown コマンドを使用します。

bazel を実行する場合、クライアントはまず、サーバーが適切なバージョンであることを確認します。そうでない場合、サーバーは停止され、新しいサーバーが起動されます。これにより、長時間実行されるサーバー プロセスを使用しても、適切なバージョニングが妨げられることはありません。