Программа C++ работает намного медленнее в Windows, чем в Linux при выполнении файловых операций?
Я использую проект с открытым исходным кодом под названием ChatScript для разработки приложений обработки естественного языка.
Когда вы выполняете операцию сборки с помощью ChatScript, он сканирует все файлы скриптов, которые составляют ваш чат-бот. В моем случае это сотни файлов. Этот процесс занимает в Windows 8.1 почти в 30 раз больше времени, чем в Ubuntu 16.04. Поэтому я использую Linux для большей части своей работы, но есть часть моей работы, которую я должен выполнять в Windows из-за определенных связанных инструментов, поэтому я хотел бы изменить базу кода так, чтобы компиляция Windows ChatScript выполнялась так быстро, как в линуксе
Может кто-нибудь придумать причину, по которой код будет работать намного медленнее в Windows и Linux? Существуют ли какие-либо коды операций с файлами C++ (чтение / запись / и т. Д.), Которые, как известно, намного медленнее в Windows по сравнению с Linux из-за различий в библиотеках времени выполнения C++, работающих на каждой платформе?
1 ответ
"Код работает медленно" в вашем последнем абзаце, я предполагаю из контекста, что вы ссылаетесь на компилятор???
В течение многих лет я часто и последовательно сталкивался с существенным существенным различием в производительности между Linux и Windows при дисковых операциях ввода-вывода. NTFS (файловая система Windows) и файловые системы linux по-разному справляются с ситуацией с множеством файлов, и linux всегда быстрее в тех обстоятельствах, в которых я находился.
Вы можете воспользоваться некоторыми из указателей в ответах на такие вопросы, как Как заставить Windows работать так же быстро, как Linux для компиляции C++? как дефрагментация вашего Windows-диска и проверка настройки оптимизации компилятора; некоторые из них могут замедлять работу компилятора (хотя агрессивная настройка оптимизации компилятора может замедлить работу компилятора, в конце вы создаете более быстрый исполняемый файл, но это может быть то, к чему вы переключаетесь после завершения большей части разработки).
Но выполнение всего этого для меня никогда не приводило к тому, чтобы компиляция Windows выполнялась быстрее, чем на Linux, используя эквивалентное дисковое оборудование, ни разу. Если ваш код находится на одном диске и поставляется для обоих компиляторов, любое улучшение, которое вы увидите в сборке Windows (например, потому что код помещен в SSD), вероятно, будет реплицировано и в улучшении сборки linux.
Просто чтобы подтвердить, я нашел то же самое. Запускал те же скрипты Chatscript на среднем Mac и на быстрой XPS 15. Mac компилировал код в 30-50 раз быстрее, чем Windows. Что странно, так это то, что ChatScript изначально был разработан для Windows. Я также не выяснил, почему такая гигантская задержка, несмотря на то, что аппаратное обеспечение ПК с Windows намного мощнее, чем Mac, на котором выполняется сценарий.
Итак, я натолкнулся на объяснение и (частичное) решение. В Windows есть две области отставания по сравнению с Linux:
Сетевое поведение. По словам создателя ChatScript Брюса Уилкокса, код сервера Windows хуже, и он также хуже реализован в ChatScript для Windows по сравнению с ChatScript для Linux. Однако отставание здесь незначительное.
Время сборки. Именно здесь сборка бота в Linux занимает 10-20 секунд, а в Windows - 4-5 минут. Оказывается, причина в антивирусе:
"Любопытно огромное расхождение, один из наших аппаратных инженеров
сделал некоторые профилирование и обнаружил, что реальным виновником является антивирус
программного обеспечения. Отключение функции антивирусной защиты в режиме реального времени
Защитник Windows принес 4 минуты до 14 секунд! Четное
сохранение Защитника Windows активным, но исключая
Папка ChatScript-master решает большую часть проблемы замедления,
в результате около 20 с: сборка 0 завершена. "( https://www.chatbots.org/ai_zone/viewthread/3575/)
Так что для OP, если вы исключите CS из Защитника Windows или выключите его, разница в сборке в значительной степени исчезнет.