Доброго времени суток, товарищи. Изучая операционные системы задал себе вопрос: зачем в POSIX-подобных системах при создании процесса избран путь полного копирования родительского в дочерний и толтко после этого с помощью сис.вызова execue перезаписывается полезным содержимым. В чем смысл передавать весь образ памяти, строки config и т.д., когда, к примеру, в Windows создаётся, ну очень грубо говоря, "пустое ничего" и уже ему задаются аргументы, выполняющаяся программа и ещё 7-8 стандартных параметров. У меня нет цели захейтить один из путей, мне хочется разобраться, какие плюсы и минусы у обоих способов. Ведь не просто так 'fork'у не нашли замены в течении нескольких десятилетий, так ведь? Спасибо тем, кто постарается простым (а можно и не простым) языком описать суть на столько разных подходов. Принимаются любые ссылки с описанием. )
Это просто два разных подхода.
Сравнивать fork и CreateThread не совсем правильно, ибо это похожие, но разные сущности.
а ответ на ваш вопрос - изолированность общих переменных.
Просто создайте общую переменную и измените ее в триде и в форке, потом прочтите ее из другой ветки - все поймёте.
Выходит, когда я создаю процессы с помощью fork(), то мои глобальные переменные копируются, и для каждого процесса появляется своя собственная копия переменных и каждый процесс работает со своей, никак не влияя на остальные, но когда процесс завершает свою работу все его данные пропадают, так?
anikavoi, Олег Филимоненко, a я вот слышал другое(не буду претендовать на истинность). Никакого копирования сразу не происходит, происходит постраничный copy-on-write.
В общем, в иностранных ресурсах информации оказалось больше, в частности в комментариях к этому посту человек даёт более-менее ясное разъяснение причины: (https://unix.stackexchange.com/questions/136637/wh... не нужен сильный английский, чтобы вникнуть в суть.