Имеется папка с иконками весом 110 МиБ (16 754 файла) которую требуется скопировать в /usr/share/icons. Если копировать ее используя Dolphin - процесс занимает порядка 20-30 секунд, но если в том же самом Долфине вызвать консоль (F4) и прописать sudo cp -R нужнаяпапка /usr/share/icons, то копирование происходит практически мгновенно (2-3 секунды). Буду очень признателен если кто-нибудь объяснит, откуда берется такая огромная разница. Файлы и корневая папка находятся на одном жестком диске.
Скорее всего потому, что опция -R не сохраняет оригинальные права доступа к файлам а значит и время копирования значительно меньше.
-R, -r, --recursive
copy directories recursively
ни слова о правах.
поглядел, права как-будто те же самые, только владелец поменялся.
Потому, что Дельфин работает на Qt и kdelibs, а cp - c системными вызовами ядра =)
Спасибо. Теперь понятно =)
ИМХО. 20-30 секунд уходит на графическое отображение процесса копирования. А cp не напрягает графику, она только копирует файлы.
Нет, даже в 3D игрушках, при операциях с миллионами вершин, кадр отрисовывается за 0.0166(6) секунды, что говорить про маленький виджет. Да и отрисовка виджета идет как бы параллельно процессу обработки данных о файлах.
А вся работа с файлами в кедах (если брать kde приложения, такие как Dolhin или Krusader) идет через KIO (входит в kdelibs). При таком стремлении к унификации - объекты тяжелые, содержат кучу информации (других типов kdelibs и Qt) и проверок (например, достаточно ли места на получателе для копирования файла). Но опять же, KIO не работает напрямую с ядром, он использует Qt, который сам по себе тоже является довольно тяжелым тулкитом (были недавно дискуссии о медленном запуске Dolphin по причине медленной инициализации объектов на Qt, которые лежат в основе первого) и только уже функции Qt используют системные вызовы ядра (те самые, которые cp использует напрямую). Разработчики KDE при этом не нарушают уровни абстракции (не пытаются давать команды напрямую файловой системе через ядро, что делает их код зависимым от Qt, но независимым от платформы), что также позволяет держать код в порядке, простоте и читабельности. Но на производительности сказывается. С одной стороны, KIO умеет много всего, с другой - на простой операции проигрывает в скорости.
Да и сам алгоритм копирования - линейный, обработка не распараллеливается. Еще возможно, что плохо оптимизирован, а возможно - это просто результат дополнительных накладных расходов.
Отправить комментарий