Ich bin auf einen Beitrag gestoßen, in dem die Geschwindigkeit des Gabelns in Cygwin erörtert wurde und in Windows XP eine erwartete Verzweigungsrate von etwa 30-50 pro Sekunde angegeben wurde ( Link ).
Ich habe ein Core 2-Duo (1,79 GHz), mit dem ich vergleichbare Ergebnisse erwarten würde, aber es schafft nur etwa 8 Gabeln pro Sekunde (und manchmal viel weniger):
$ 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
Können Sie mir irgendetwas vorschlagen, was ich möglicherweise tun kann, um die Dinge zu beschleunigen? Diese Maschine wirkt viel langsamer in Cygwin als andere , die ich verwendet habe , bevor die eigentlich waren viel langsamer.
Aktualisieren
Lassen Sie mich meine Frage begründen: Ich glaube nicht, dass eine schnellere Gabel mein Leben auf magische Weise verbessern wird, aber ich glaube, dass dieser Benchmark ein guter Indikator für die Leistungsprobleme ist, die ich aufgrund der normalen Verwendung externer ausführbarer Dateien in Bash sehe Werte berechnen. Ich stelle fest, dass ich Cygwin spürbar beschleunige, indem ich meine Shell-Startskripte und die Bash-Vervollständigung durcharbeite und versuche, externe Befehle durch interne zu ersetzen. Unter Linux ist dies kein Problem. Häufig ist dies jedoch nicht möglich, und mein PC benötigt derzeit ca. 14 Sekunden, um eine Shell mit einem warmen Cache und ohne Last zu starten.
Antworten:
Das hat nichts damit zu tun, dass die Gabel langsam ist.
Ich habe gesehen, wie Cygwin Hund langsam ausgeführt hat, als sich das Windows-Ausgangsverzeichnis auf einem Netzlaufwerk befand. Jeder einzelne Befehl würde dort nach Binaries suchen, die die Dinge enorm verlangsamen.
sehen ob
ist schneller, wenn ja, ist das wohl dein problem
Andernfalls versuchen Sie, bash über strace / ltrace auszuführen (wenn sie sogar auf cygwin arbeiten) und sehen, was es tut, wenn es 1 Sekunde dauert, um das Datum auszuführen.
quelle
Ich fürchte, Sie können nicht viel dagegen tun.
Windows hat keinen
fork()
systemeigenen Systemaufruf, daher muss Cygwin diesen emulieren. Die Implementierung dieser Emulation ist jedoch sehr ineffizient. (Siehe Cygwin FAQ )MSYS2, das häufig in Anwendungen verwendet wird, in denen eine Linux-ähnliche Befehlszeilenumgebung mit möglicherweise vollem Funktionsumfang unter Windows gewünscht wird, basiert auf Cygwin, weshalb es auch davon betroffen ist.
Eigentlich ist es so schlimm, dass a
fork()
unter Windows mindestens eine Größenordnung langsamer ist als unter LinuxDas obige Beispiel zeigt den Unterschied zwischen einer i5-2500k @ 4GHz, 32GiB RAM Windows 10 Pro Box und einer schwachen 1GiB RAM VPS mit einem Kern
quelle
Sie sehen keine Gabeln; Sie sehen Fork, Exec, Systemaufruf zum Lesen der Uhrzeit, Formatieren und Konvertieren der Ausgabe. Ganz zu schweigen von der parallelen Zeitteilung.
Auf welcher Grundlage sagen Sie die anderen Maschinen „eigentlich waren langsamer“? Es gibt viele Faktoren, die zur tatsächlichen Geschwindigkeit eines Computers und zur Wahrnehmung der Computergeschwindigkeit durch den Benutzer beitragen. Was machst du da, wo Gabeln / Sek. Ein gutes Maß für die Leistung sind? Was ist die Speichergeschwindigkeit, Architektur und Menge? Disk I / O Geschwindigkeit und Pufferung?
Was wird Ihrer Meinung nach mehr Gabeln / Sek. Bewirken? Ein Core i7 mit Vista mit 512 MB RAM oder ein Celeron mit einem minimalen Linux mit 2 GB?
quelle