Odpowiedzi:
To nie jest dpkg
specyficzny problem (jak sugeruje tytuł mojej edycji). Raczej jest to coś, co robi każdy menedżer pakietów (o czym wiem); i nie bez powodu. Rozumiem jednak, dlaczego może to być mylące.
Menedżerowie pakietów polegają na bazach danych w celu śledzenia informacji o zainstalowanych pakietach. Jeśli wielu użytkowników próbuje jednocześnie zapisywać dane w bazie danych, ma dużą szansę na uszkodzenie danych (co naprawdę doprowadziłoby do awarii systemu).
W rezultacie wielu (wszystkich?) Menedżerów pakietów polega na pliku blokującym, aby zasygnalizować, że baza danych jest zapisywana, więc inny klient nie powinien mieć takiej możliwości.
Należy pamiętać, że inteligentni menedżerowie pakietów mogą być w stanie określić, kiedy żądanie jest tylko do odczytu i może nie wymagać blokowania bazy danych. W rezultacie; możliwe jest, że niektóre działania będą mogły być uruchamiane jednocześnie tam, gdzie inne nie będą.
Plik blokady służy do zapobiegania równoległememu wykonywaniu wielu instancji.
Dlaczego jest to ważne dla menedżerów pakietów?
Menedżer pakietów - z wysokiego poziomu - to program, który wprowadza złożone zmiany na dysku twardym.
Zmian nie można dokonać w jednym kroku („atomowym”), więc istnieje wiele kroków; wiele kroków zależy od wyniku wcześniejszych kroków.
Dlatego menedżer pakietów musi albo przeanalizować dysk twardy przed wykonaniem każdego kroku, albo po prostu przeanalizować go raz i śledzić zmiany, które sam stosuje. Pierwsza opcja jest bardzo wolna. Drugi wymaga, aby żadna inna instancja nie wprowadzała zmian.
Istnieje wiele innych problemów, które mogą się pojawić.
Nie jest niemożliwe wdrożenie menedżera pakietów, który może działać równolegle, ale jest to zbyt skomplikowane, aby było tego warte . Na razie nie możesz sobie wyobrazić, jak skomplikowane. Naprawdę.
dkpg
(i rpm
większość innych tradycyjnych menedżerów pakietów) działa poprzez instalowanie pakietów w przestrzeni globalnej, co oznacza, że pakiety mogą ze sobą kolidować (np. A
i B
nie mogą być instalowane w tym samym czasie, ponieważ oba instalują /usr/lib/libfoo.so
). Menedżerowie pakietów muszą wykrywać takie konflikty i odrzucać takie żądania instalacji, aby utrzymać system w spójnym stanie. Posiadanie wielu instancji menedżera pakietów działających w tym samym czasie byłoby bardzo skomplikowane i podatne na błędy.
Bezkonfliktowi menedżerowie pakietów (np. Http://0install.net ) mogą i pozwalają na równoległe instalowanie wielu pakietów¹ i nie potrzebują plików blokujących ( A/libfoo.so
i B/libfoo.so
będą przechodzić do różnych katalogów).
1 Równolegle zarówno pod względem obecności i dostępności w systemie w tym samym czasie, jak i jednoczesnego pobierania i dodawania do systemu.