Sistem Bazel diimplementasikan sebagai proses server yang berjalan lama. Hal ini memungkinkannya melakukan banyak pengoptimalan yang tidak mungkin dilakukan dengan implementasi berorientasi batch, seperti melakukan caching file BUILD, grafik dependensi, dan metadata lainnya dari satu build ke build berikutnya. Hal ini meningkatkan kecepatan build inkremental, dan memungkinkan
perintah yang berbeda, seperti build
dan query
untuk berbagi cache yang sama dari
paket yang dimuat, sehingga membuat kueri sangat cepat. Setiap server dapat menangani paling banyak satu
pemanggilan dalam satu waktu; pemanggilan serentak lebih lanjut akan diblokir atau
gagal cepat (lihat --block_for_lock
).
Saat menjalankan bazel
, Anda menjalankan klien. Klien menemukan server
berdasarkan output dasar, yang secara default
ditentukan oleh jalur direktori ruang kerja dasar dan ID pengguna Anda. Jadi, jika
Anda membangun di beberapa ruang kerja, Anda akan memiliki beberapa output dasar dan dengan demikian
beberapa proses server Bazel. Beberapa pengguna di workstation yang sama dapat membangun secara bersamaan di ruang kerja yang sama karena basis output mereka akan berbeda (ID pengguna yang berbeda).
Jika klien tidak dapat menemukan instance server yang sedang berjalan, klien akan memulai instance baru. Hal ini dilakukan dengan memeriksa apakah basis output sudah ada, yang berarti arsip Blaze sudah diekstrak. Jika tidak, jika dasar output tidak ada,
klien akan mengekstrak file arsip dan menyetel mtime
-nya ke tanggal 9 tahun
ke depan. Setelah diinstal, klien mengonfirmasi bahwa mtime
dari file yang di-unzip sama dengan tanggal yang jauh untuk memastikan tidak ada gangguan penginstalan.
Proses server akan berhenti setelah tidak aktif selama jangka waktu tertentu (3 jam, secara default,
yang dapat diubah menggunakan opsi startup --max_idle_secs
). Sebagian besar, fakta bahwa ada server yang berjalan tidak terlihat oleh pengguna, tetapi
terkadang hal ini perlu diingat. Misalnya, jika Anda menjalankan skrip
yang melakukan banyak build otomatis di direktori yang berbeda, penting untuk
memastikan Anda tidak mengakumulasi banyak server yang tidak aktif; Anda dapat melakukannya dengan
mematikannya secara eksplisit setelah selesai menggunakannya, atau dengan menentukan
periode waktu tunggu yang singkat.
Nama proses server Bazel muncul di output ps x
atau ps -e f
sebagai bazel(dirname)
, dengan dirname adalah nama dasar
direktori yang menyertakan root direktori ruang kerja Anda. Contoh:
ps -e f
16143 ? Sl 3:00 bazel(src-johndoe2) -server -Djava.library.path=...
Hal ini memudahkan untuk mengetahui proses server mana yang termasuk dalam ruang kerja tertentu. (Perhatikan bahwa dengan opsi lain tertentu untuk ps
, proses server Bazel mungkin hanya diberi nama java
.) Server Bazel dapat dihentikan menggunakan perintah
shutdown.
Saat menjalankan bazel
, klien akan memeriksa terlebih dahulu apakah server memiliki
versi yang sesuai; jika tidak, server akan dihentikan dan server baru akan dimulai. Hal ini memastikan bahwa penggunaan proses server yang berjalan lama tidak mengganggu pembuatan versi yang tepat.