2010-02-13 15 views
14

Gdy używam MSYS do kompilacji, etap ./configure może trwać dłużej niż make. Jednak ten sam proces w Linuksie ma szybką konfigurację i powolny make. Czy to po prostu jakieś ustawienie w MSYS, które pogrąża mój system? Czy ktoś ma rozwiązanie?Dlaczego konfiguracja jest tak powolna w MSYS?

Odpowiedz

21

Typowe configure skrypty zrobić dużo rozpoczynania małych podprocesów. W systemach operacyjnych typu Unix odbywa się to za pomocą wywołań funkcji fork() i exec(), które mają bardzo szczególną semantykę, która musi zostać zachowana (na przykład, pamięć współużytkowana do zapisu po zapisie). W systemie Windows podprocesy są tworzone przy pomocy CreateProcess(), która ma bardzo różną semantykę (np. Całkowicie oddzielne miejsce w pamięci od obiektu nadrzędnego). Aby poprawnie wykonywać skrypty i programy typu Unix, MSYS musi wykonać wiele prac emulacyjnych, aby tworzenie nowych procesów w systemie Windows działało jak na Unixie pod numerem fork()/exec(). To kończy się wolniej niż system operacyjny, który oferuje te funkcje natywnie.

+2

To naprawdę nie jest tak źle dla 'CreateProcess' w systemie Windows. Myślę, że cygwin próbuje naśladować widelec w oknach, co sprawia, że ​​jest niesamowicie wolny. Jeśli bash nie używa fork (przypuszczam, że używa fork, ale nie sprawdziłem), aby uruchomić procesy, to konfiguracja będzie działać równie szybko. W moim pudełku i7, kiedy próbowałem naprawić ten "problem", okazało się, że cygwin może rozwidniać się tylko kilka razy na sekundę. Sposób testowania prędkości fork: while (true); do daty; zrobione | uniq -c – Pavel

+1

+1 Pavel .. uclinux miał taki sam problem, że mógł działać bez MMU i wszystko z rozwidleniem używane bardzo powolny pełny egzemplarz – user1496062

0

Możesz również wyłączyć wszystkie skanery antywirusowe. Będą ponownie skanować plik wykonywalny za każdym razem, gdy zostanie załadowany, co całkowicie zabija działanie skryptu.

Nawet jeśli nie masz uruchomionego antywirusa, nie zapomnij o programie Windows Defender. (Możesz także wyłączyć Kontrolę konta użytkownika, ale nie wiem, jaki wpływ miało to na czas ładowania programu.)

0

Wymagany jest duży dostęp do dysku, co powoduje znaczne spowolnienie pracy IMHO. Na przykład configure tworzy tymczasowy kod źródłowy, który ma zostać skompilowany w ramach testów, które wykonuje. Spowoduje to utworzenie pliku obiektu, który musi zostać usunięty ponownie. Co zrobić, aby przyspieszyć konfigurację, to wypakuj źródło, które chcę zbudować na dysku RAM, i skonfiguruj i skompiluj je tam. Polecam korzystanie z ImDisk (http://www.ltr-data.se/opencode.html/#ImDisk), które jest bezpłatne.

Powiązane problemy