Потеря времени execv () и fork ()
В настоящее время я узнаю оfork()
а такжеexecv()
и у меня возник вопрос относительно эффективности комбинации.
Мне показали следующий стандартный код:
pid = fork();
if(pid < 0){
//handle fork error
}
else if (pid == 0){
execv("son_prog", argv_son);
//do father code
я знаю этоfork()
клонирует весь процесс (копирование всей кучи и т. д.) и чтоexecv()
заменяет текущее адресное пространство на пространство новой программы. Имея это в виду, не делает ли это очень неэффективным использование этой комбинации? Мы копируем все адресное пространство процесса и затем немедленно перезаписываем его.
Итак, мой вопрос:
Какое преимущество достигается за счет использования этого комбо (вместо какого-либо другого решения), которое заставляет людей все еще использовать это, даже если у нас есть отходы?