Sistem Bazel diimplementasikan sebagai proses server berumur panjang. Hal ini memungkinkan
untuk melakukan banyak pengoptimalan yang tidak mungkin dilakukan dengan implementasi berorientasi batch,
seperti menyimpan file BUILD dalam cache, 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 paket yang sama
yang dimuat, sehingga membuat kueri menjadi sangat cepat. Setiap server dapat menangani maksimal satu pemanggilan dalam satu waktu. Pemanggilan serentak selanjutnya akan memblokir atau gagal dengan cepat (lihat --block_for_lock
).
Saat menjalankan bazel
, Anda menjalankan klien. Klien menemukan server
berdasarkan output base, yang secara default ditentukan
oleh jalur direktori ruang kerja dasar dan userid Anda. Jadi, jika
Anda membuat di beberapa ruang kerja, Anda akan memiliki beberapa basis output, sehingga
beberapa proses server Bazel akan tersedia. Beberapa pengguna di workstation yang sama dapat
membangun secara bersamaan di ruang kerja yang sama karena basis output-nya akan berbeda
(userid yang berbeda).
Jika klien tidak dapat menemukan instance server yang sedang berjalan, instance baru akan dimulai. Hal ini
dilakukan dengan memeriksa apakah basis output sudah ada, yang menyiratkan bahwa arsip
blaze telah dibuka. Atau, jika basis output tidak ada,
klien akan mengekstrak file arsip dan menetapkan mtime
-nya ke tanggal 9 tahun
ke depan. Setelah diinstal, klien akan mengonfirmasi bahwa mtime
file yang diekstrak
sama dengan tanggal yang jauh untuk memastikan tidak terjadi modifikasi pada penginstalan.
Proses server akan berhenti setelah tidak aktif selama periode tertentu (secara default, 3 jam, yang dapat dimodifikasi menggunakan opsi startup --max_idle_secs
). Pada umumnya, fakta bahwa ada server yang berjalan tidak terlihat oleh pengguna, tetapi
terkadang membantu untuk mengingat hal ini. Misalnya, jika Anda menjalankan skrip yang melakukan banyak build otomatis di direktori berbeda, sebaiknya pastikan Anda tidak mengakumulasi banyak server nonaktif. Anda dapat melakukannya dengan menonaktifkannya secara eksplisit setelah selesai menggunakannya, atau dengan menentukan periode waktu tunggu yang singkat.
Nama proses server Bazel akan muncul dalam 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 dimiliki ruang kerja
tertentu. (Berhati-hatilah dengan opsi tertentu lainnya untuk ps
, proses server Bazel
dapat diberi nama hanya java
.) Server Bazel dapat dihentikan menggunakan
perintah shutdown.
Saat menjalankan bazel
, klien akan memeriksa terlebih dahulu apakah server tersebut adalah 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.