Natknąłem się na post omawiający szybkość rozwidlania w Cygwin, dający oczekiwaną „szybkość rozwidlenia” w Windows XP około 30-50 na sekundę ( link )
Mam duet Core 2 (1,79 GHz), który spodziewałbym się uzyskać porównywalne wyniki, ale zarządza on jedynie około 8 widelcami na sekundę (a czasem o wiele mniej):
$ while (true); do date --utc; done | uniq -c
5 Wed Apr 21 12:38:10 UTC 2010
6 Wed Apr 21 12:38:11 UTC 2010
1 Wed Apr 21 12:38:12 UTC 2010
1 Wed Apr 21 12:38:13 UTC 2010
8 Wed Apr 21 12:38:14 UTC 2010
8 Wed Apr 21 12:38:15 UTC 2010
6 Wed Apr 21 12:38:16 UTC 2010
1 Wed Apr 21 12:38:18 UTC 2010
9 Wed Apr 21 12:38:19 UTC 2010
Czy możesz zasugerować coś, co mogę zrobić, aby przyspieszyć? Ta maszyna działa o wiele wolniej w Cygwin niż inne, z których wcześniej korzystałem, a które były znacznie wolniejsze.
Aktualizacja
Pozwólcie, że uzasadnię moje pytanie: nie wierzę, że szybszy rozwidlenie magicznie poprawi moje życie, ale wierzę, że ten test porównawczy jest dobrym wskaźnikiem problemów z wydajnością, które widzę w bashu z powodu normalnego korzystania z zewnętrznych plików wykonywalnych obliczyć wartości. Zauważyłem, że zauważam przyspieszenie w Cygwin, przechodząc przez moje skrypty uruchamiające powłokę i kończąc bash i próbując zastąpić polecenia zewnętrzne wewnętrznymi; w Linuksie to nie jest problem. Często jednak nie jest to możliwe, a mój komputer obecnie zajmuje ~ 14 sekund, aby uruchomić powłokę z ciepłą pamięcią podręczną i bez obciążenia.
Odpowiedzi:
Nie ma to nic wspólnego z powolnym rozwidleniem.
Widziałem, jak cygwin biegał powoli, gdy katalog „home” systemu Windows znajdował się na dysku sieciowym. Każde polecenie szukałoby tam plików binarnych, które znacznie spowalniałyby działanie.
zobacz czy
jest szybszy, jeśli tak, to prawdopodobnie twój problem
w przeciwnym razie spróbuj uruchomić bash przez strace / ltrace (jeśli nawet działają na cygwin) i zobacz, co robi, gdy wykonanie daty zajmuje 1 sekundę.
źródło
Obawiam się, że nic nie możesz na to poradzić.
Windows nie ma natywnego
fork()
wywołania systemowego, więc Cygwin musi to naśladować. Implementacja tej emulacji jest jednak bardzo nieefektywna. (Zobacz Cygwin FAQ )MSYS2, często używany w aplikacjach, w których chce się mieć w pełni funkcjonalne środowisko wiersza poleceń podobne do Linuksa w systemie Windows, jest oparte na Cygwin, dlatego też ma to wpływ.
Jest tak źle, że
fork()
w systemie Windows jest o co najmniej jeden rząd wielkości wolniejszy niż w systemie LinuxPowyższy przykład pokazuje różnicę między i5-2500k @ 4GHz, 32GiB RAM Windows 10 Pro a słabym jednordzeniowym, 1GiB RAM VPS
źródło
Nie widzisz widelców; widzisz fork, exec, wywołanie systemowe, aby odczytać zegar czasu dziennego, sformatować i przekonwertować dane wyjściowe. Nie wspominając już o tym, czym jest równoległe dzielenie czasu.
Na jakiej podstawie twierdzisz, że inne maszyny „faktycznie były wolniejsze”? Istnieje wiele rzeczy, które wpływają na rzeczywistą prędkość komputera i postrzeganie prędkości komputera przez użytkownika. Co robisz, gdy wydajność wideł na sekundę jest dobrym miernikiem wydajności? Jaka jest szybkość pamięci, architektura i ilość? Prędkość we / wy dysku i buforowanie?
Jak myślisz, co zrobi więcej widelców na sekundę: Core i7 z Vista z 512 MB pamięci RAM lub Celeron z minimalnym Linuksem z 2 GB?
źródło