Oberon space

General Category => Общий раздел => Тема начата: vlad от Май 31, 2012, 05:49:54 am

Название: fork()
Отправлено: vlad от Май 31, 2012, 05:49:54 am
Есть ли какое-то оправдание существования сабжа, кроме "дешево и сердито"?

Т.е., с точки зрения разработчика ОС: полноценные потоки делать долго и нудно. С точки зрения разработчика приложения для ОС: устраивать полноценное межпроцессное общение (IPC) - тоже уныло. Поэтому сделали fork() - просто реализовать и упрощает IPC (передачу нужного контекста в другой процесс).

Или у fork() есть какие-то неочевидные особенности (не покрываемые потоками и полноценным IPC)?
Название: Re: fork()
Отправлено: Губанов Сергей Юрьевич от Май 31, 2012, 09:02:23 am
Думаю оправдания нет.
Название: Re: fork()
Отправлено: valexey от Май 31, 2012, 11:54:03 am
А чем плох fork?

По моему, кривым костылем является как раз многопоточность.
Название: Re: fork()
Отправлено: vlad от Май 31, 2012, 01:45:26 pm
А чем плох fork?

По моему, кривым костылем является как раз многопоточность.

Хотя бы тем, что стартует одна программа, а умирает две (или сколько там раз fork() вызвался). Это из общих соображений.
Сюда еще можно подшить нарушение "структурного подхода" с одной точкой входа и одним выходом. В случае fork() выхода не будет, скорее всего будет вызов exit().
Все это оставляет впечатление от fork() как от шортката размером с хак :)
Название: Re: fork()
Отправлено: Valery Solovey от Май 31, 2012, 09:42:37 pm
Есть ли какое-то оправдание существования сабжа, кроме "дешево и сердито"?
Наверно, стоит поискать в архивах. Юникс делался в те времена, когда такие вещи было принято аргументировать. Зачастую, письменно. Возможно, Томпсон где-нибудь это описывал.