Этот вопрос кажется заброшенным, так как он больше не обновлялся, но я все равно попробую:
Я видел довольно много где происходили чрезмерные прерывания, замедляющие работу машины. Это можно проверить с помощью grep. -r / sys / firmware / acpi / interrupts /
.
По теме: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/887793 https://bugzilla.kernel.org/show_bug.cgi ? id = 53071 https://forum.ubuntuusers.de/topic/kworker-cpu-load/ (немецкий)
Чтение каталога делает на самом деле не бывает в виде файла. Это происходит с системным вызовом readdr
. См. man 2 readdir
для старой реализации как чистого системного вызова и man 3 readdir
для оболочки (пожалуйста, не используйте старую реализацию).
Однако netrw
Vim ничего подобного не выполняет. Он просто вызывает ls
или выполняет подстановку (прочтите ниже, чтобы понять, когда он выполняет одно, а когда другое) и анализирует вывод этого.
При настройке netrw
у вас есть параметры для вызова ls
в удаленных системах . Вы можете установить команду листинга в вашем vimrc
для SSH и FTP-соединений следующим образом (это значения по умолчанию):
let g:netrw_list_cmd = 'ssh HOSTNAME ls -Fa'
let g:netrw_ftp_list_cmd = 'ls -lF'
(Вы даже можете установить это значение, отличное от ls
для FTP-системы, в которых нет ls
, да, есть некоторые, редкие, у которых его нет.)
Для локальных списков netrw
выполняет подстановку, а затем вызывает getftype ()
для украшения файла ( /
для каталогов, @
для ссылок и т. д.). В autoload / netrw.vim
в процедуре s: LocalListing ()
выполняется следующее:
let dirname = b:netrw_curdir
let dirnamelen = strlen(b:netrw_curdir)
let filelist = s:NetrwGlob(dirname,"*",0) " here is the globbing of `*`
let filelist = filelist + s:NetrwGlob(dirname,".*",0) " and here `.*`
И затем getftype ()
вызывается для каждого файла в filelist
.
В общем, netrw
полагается на тот факт, что Vim имеет функцию glob ()
, а Vim, в свою очередь, выполняет вызов glob
( человек 3 шара
).