Я наткнулся на статью, в которой обсуждается скорость разветвления в Cygwin, и в Windows XP ожидаемая «скорость разветвления» составляет около 30-50 в секунду ( ссылка ).
У меня есть Core 2 Duo (1,79 ГГц), который я ожидаю получить сравнимые результаты, но он управляет только 8 разветвлениями в секунду (а иногда и намного меньше):
$ 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
Можете ли вы предложить что-нибудь, что я мог бы сделать, чтобы ускорить процесс? Эта машина работает намного медленнее в Cygwin, чем другие, которые я использовал ранее, которые на самом деле были намного медленнее.
Обновить
Позвольте мне обосновать мой вопрос: я не верю, что более быстрый форк волшебным образом улучшит мою жизнь, но я считаю, что этот тест является хорошим прокси для проблем производительности, которые я вижу в bash из-за нормального использования внешних исполняемых файлов рассчитать значения. Я обнаружил, что заметно ускоряю работу Cygwin, просматривая сценарии запуска оболочки и bash-завершение и пытаясь заменить внешние команды внутренними; в Linux это не проблема. Однако часто это невозможно, и в настоящее время моему ПК требуется ~ 14 секунд, чтобы запустить оболочку с теплым кэшем и без нагрузки.
Ответы:
Это не имеет ничего общего с медленной развилкой.
Я видел, как cygwin медленно запускал собаку, когда каталог «home» на Windows находился на сетевом диске. Каждая команда будет искать там двоичные файлы, которые сильно замедляют работу.
видишь ли, если
быстрее, если так, то это, вероятно, ваша проблема
в противном случае попробуйте запустить bash через strace / ltrace (если они даже работают на cygwin) и посмотрите, что он делает, если для выполнения даты требуется 1 секунда.
источник
Боюсь, с этим ничего не поделаешь.
Windows не имеет
fork()
системного вызова, поэтому Cygwin должен подражать этому. Однако реализация этой эмуляции очень неэффективна. (См. Cygwin FAQ )MSYS2, который часто используется в приложениях, где требуется, возможно, полнофункциональная Linux-подобная среда командной строки в Windows, основан на Cygwin, поэтому на него это тоже влияет.
Это на самом деле так плохо, что в
fork()
Windows по крайней мере на порядок медленнее, чем в LinuxПриведенный выше пример показывает разницу между i5-2500k @ 4 ГГц, 32 ГБ ОЗУ Windows 10 Pro box и слабым одноядерным, 1 ГБ ОЗУ VPS
источник
Вы не видите вилки; вы видите fork, exec, системный вызов для чтения времени суток, форматирования и преобразования выходных данных. Не говоря уже о параллельном распределении времени.
На каком основании вы говорите, что другие машины "на самом деле были медленнее"? Есть много вещей, которые влияют на фактическую скорость компьютера и восприятие пользователем скорости компьютера. Что вы делаете, когда скорость в секунду / сек является хорошим показателем производительности? Какова скорость памяти, архитектура и объем? Скорость дискового ввода-вывода и буферизация?
Как вы думаете, что будет делать больше форкс / сек: Core i7 под управлением Vista с 512 МБ ОЗУ или Celeron под минимальным Linux с 2 ГБ?
источник