Opened 2 hours ago

#814 new улучшение

Заменить fork()+execl() и popen() на posix_spawn()

Reported by: alx Owned by: alx
Priority: средний Milestone: 2 очередь
Component: sw Keywords:
Cc:

Description

В настоящее время для запуска внешних процессов swd выполняет fork(), затем закрывает все файловые дескрипторы (кроме нужных для коммуникации) и затем выполняет execl().

Выполнение fork() - тяжелая операция, так как создается копия "тяжелого" процесса swd. Предлагается выполнять внешние процессы с помощью вызова posix_spawn(), который не дублирует память процесса, а блокирует родительский процесс до момента старта образа процесса-потомка. Экспериментально подтверждено, что в условиях значительного объема памяти, используемой родительским процессом, вызов posix_spawn() ведет себя лучше (работает даже когда fork() завершается с ошибкой). Вместо закрытия дескрипторов предлагается устанавливать им флаг CLOEXEC.

Аналогичным образом следует заменить вызовы popen(), также использующей fork().

Change History (0)

Note: See TracTickets for help on using tickets.