Bu sayfada Multiplex çalışanları, Multiplex uyumlu yazma ile ilgili bilgiler açıklanmaktadır kuralları ve belirli sınırlamalara yönelik geçici çözümleri inceleyin.
Multiplex çalışanları, Bazel'in tek bir çalışanla birden fazla isteği ele almasına olanak tanır. bahsedeceğim. Bazel, çok iş parçacıklı çalışanlarda aşağıdakileri yapmak için daha az kaynak kullanabilir: elde edebiliyorlar. Örneğin, ekip arkadaşlarınızdan çalışan başına düştüğünü varsayalım. Bazel'in aynı anda birden çok çalışanla daha sonra istekleri paralel olarak ele alabilecek. Örneğin, bu da JVM ısınma süresinden ve JIT derlemesinden tasarruf sağlar. ve genel olarak aynı alanın tüm çalışanları arasında paylaşılan tek bir önbellek kullanılmasına aynı türdedir.
Genel Bakış
Bazel sunucusu ve çalışan işlemi arasında iki katman vardır. Belirli
işlemleri paralel olarak yürütebilen anımsatıcılar, Bazel’ın WorkerProxy
havuzda yer alır. WorkerProxy
, istekleri çalışan işlemine yönlendirir
çalışan süreç, isteği request_id
ile birlikte sırayla işler.
ve yanıtları WorkerMultiplexer
adlı kullanıcıya gönderir. WorkerMultiplexer
bir yanıt aldığında request_id
öğesini ayrıştırır ve ardından yanıtları iletir.
WorkerProxy
konumuna döndürmeniz gerekir. Multiplex özelliği olmayan çalışanlarda olduğu gibi,
standart giriş/çıkış yoluyla yapılır, ancak araç yalnızca
Kullanıcının görebildiği çıkış için stderr
(aşağıya bakın).
Her çalışanın bir anahtarı vardır. Bazel, anahtarın karma kodunu (
değişkenleri, yürütme kökü ve anımsatıcı) kullanarak hangi
Kullanmak için WorkerMultiplexer
. WorkerProxy
'ler aynı
Aynı karma koduna sahiplerse WorkerMultiplexer
. Dolayısıyla,
ortam değişkenleri ve yürütme kökü tek bir Bazel'de aynıdır
her benzersiz anımsatıcı, yalnızca bir WorkerMultiplexer
ve bir
çalışma sürecidir. Normal çalışanlar ve düzenli çalışanlar dahil olmak üzere toplam çalışan sayısı
WorkerProxy
, hâlâ --worker_max_instances
ile sınırlı.
Multiplex ile uyumlu kurallar yazma
Kuralın çalışan işlemi,
multiplex çalışanları. Protobuf, bir kural kümesinin tek bir isteği
Ancak akışta birikmiş birden fazla istek olabilir. Her
çalışan işlemi, isteği akıştan ayrıştırır. İsteği şurada işlemesi gerekir:
açın. Çünkü farklı ileti dizileri tamamlanabilir ve şu adresteki akışa yazılabilir:
aynı zamanda, çalışan süreci, yanıtların yazıldığından
otomatik olarak (mesajlar çakışmaz). Yanıtlar şunu içermelidir:
İşledikleri isteğin request_id
kadarı.
Multiplex çıkışını işleme
Multiplex çalışanlarının, çıktılarını nasıl kullandıkları konusunda
tek yönlü çalışanları olarak. stderr
alanına gönderilen her şey tek bir günlük dosyasına kaydedilir
aynı türdeki tüm WorkerProxy
'lar arasında paylaşıldı
yapılan en iyi uygulamaları paylaşacağız. stdout
yönlendirirken
stderr
eklemek iyi bir fikirdir, bu çıktıyı output
alanını WorkResponse
içine alın.
Aracınız stdout
veya stderr
iş ortaklarına yalnızca kullanıcı odaklı çıktılar gönderiyorsa
Multiplex çalışanları etkinleştirmeden önce bu davranışı değiştirmeniz gerekir.
Multiplex çalışanlarını etkinleştirme
Multiplex çalışanları varsayılan olarak etkin değildir. Bir kural grubu Multiplex'i etkinleştirebilir
supports-multiplex-workers
etiketini kullanarak
İşlemin execution_requirements
kadarı (supports-workers
etiketinde olduğu gibi)
normal çalışanları etkinleştirir. Normal çalışanlarda olduğu gibi
strateji, kural grubu düzeyinde (örneğin,
--strategy=[some_mnemonic]=worker
) veya genel olarak strateji düzeyinde (
örnek, --dynamic_local_strategy=worker,standalone
.) Ek işaret yok
gerekli ve supports-multiplex-workers
önceliklidir
Her ikisi de ayarlanmışsa supports-workers
. Multiplex çalışanlarını devre dışı bırakabilirsiniz
dünya genelinde --noworker_multiplex
geçti.
Belleği azaltmak için mümkünse bir kural kümesinin Multiplex çalışanları kullanması önerilir ve performansı artıracaktır. Ancak Multiplex çalışanları şu anda dinamik yürütme ile uyumlu olmadığı sürece Multiplex korumalı alanı uygulanır. Korumalı alanda olmayan Multiplex çalıştırılmaya çalışılıyor dinamik yürütmeye sahip çalışanlar korumalı alana alınan uygulamaları sessizce kullanır. tek yönlü çalışanları olmalıdır.
Multiplex korumalı alanı
Multiplex çalışanları, üzerine konuşalım. Tek yönlü çalışan korumalı alan oluşturma işlemi her çalışan işlemi kendi korumalı alanında çalıştırırken, Multiplex çalışanları, çalışma dizinini oluşturabilirsiniz. İzin vermek için Multiplex çalışanlarının korumalı alana alınması için çalışan, yerine her istekte belirtilen bir alt dizine yazmak yerine doğrudan dizine ekleyeceksiniz.
Çalışanın, Multiplex korumalı alan kullanımını desteklemek için sandbox_dir
alanını kullanması gerekir
kodunu WorkRequest
ekleyin ve bunu tüm dosya okuma ve yazma işlemleri için önek olarak kullanın.
arguments
ve inputs
alanları, korumalı alana alınmadan değişmeden kalır.
isteğinde bulunduğunda, gerçek girişler sandbox_dir
değerine göre belirlenir. Çalışan,
Bundan okumak için arguments
ve inputs
içinde bulunan dosya yollarını çevirin
ve sandbox_dir
ile göreli tüm çıkışları yazmalıdır.
"." gibi yolların yanı sıra belirtilen dosyalarda bulunan yollar da buna dahildir
bağımsız değişkenlerde ("argfile" bağımsız değişkenleri gibi) yer almalıdır.
Bir çalışan, Multiplex korumalı alan kullanımını desteklediğinde kural grubu bunu bildirebilir
supports-multiplex-sandboxing
öğesini
Bir işlemin execution_requirements
. Ardından Bazel, Multiplex korumalı alanı kullanacaktır
--experimental_worker_multiplex_sandboxing
işareti geçilirse veya
dinamik yürütme ile kullanılır.
Korumalı alana sahip bir Multiplex çalışanının çalışan dosyaları hâlâ
çalışma dizinini oluşturur. Dolayısıyla, bir dosya
hem çalışanın çalıştırılması için hem de giriş olarak kullanılıyorsa bu değer, hem çalışan hem de giriş olarak belirtilmelidir.
işaret dosyası bağımsız değişkeninde, tools
, executable
veya
runfiles
.