В таблицах ядра создается только копия записей процесса родителя, больше ничего не делается. Это требует очень небольших затрат. Память физически не выделяется, процесс-наследник работает с той же памятью (если он только читает). И только если процесс потомок хочет что-тозаписать в память, ему для записи выделяется страница памяти, куда он и пишет. Называется copy-on-write.Tropik wrote:OMG. Как вы себе представляете эти нулевые затраты ресурсов при клонировании процесса? Процессором это не поддержтивается, нет там такой команды как копирование процесса, поэтому на самом деле происходит большое кол-во операций при копировании процесса.f_evgeny wrote:Ничего волшебного, просто форк создает клон текущего процесса практически с нулевыми затратами ресурсов и очень быстро.
Билл Гейтс, нобелевка и битвы на кухне
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Дальше, все будет только хуже. Оптимист.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Архитектуру нужно выбирать, исходя из специфики задачи. Иногда лучше треды, иногда форки, иногда форки плюс треды.Tropik wrote:Надежность - может быть. Но это имеет значение только, если в потоке (thread) имеются баги и подразумевается, что этот поток может крешнуться. Чего в нормальных программах происходить не должно (а если и происходит, то поток должен сам уметь обработать ошибку). В правильной программе обмен данными между потоками НАМНОГО быстрее, чем между процессами (и намного менее ресурсоемко).f_evgeny wrote:У процессов чуть больше оверхэд на переключение контекста, зато программы написанные на форках позволяют добиться большей надежности при меньшей трудоемкости.
Думаете, что в POSIX просто так для красоты ввели pthread ?
Просто в ЮНИКСах эффективность потоком и процессов (по крайней мере при создании) - приблизительно одинакова. К сожалению при оценке этого совершенно не принимают во внимание, что общение между потоками быстрее, чем между процессами.
Кстати, многие программы стали использовать треды для переносимости на Win32.
А насчет ПРАВИЛЬНЫХ программ это Вы хорошо заметили, только вот к сожалению мир несовершенен и в 99.3% программ присутствуют различной тяжести баги. Программы написанные на процессах избавляют еще и от утечек, кстати.
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Спасибо за обьяснениеf_evgeny wrote:Называется copy-on-write.
Все-равно, потоки намного более удобны и быстрее для обмена данными, чем процессы. Такова правда жизни. Даже несмотря на то, что в юниксах создание процесса довольно быстро (быстрее чем CreateProcess). Но постепенно и в Юниках придут к потокам Как всегда с отставанием в 5-6 лет (ну типа как юниксовские офисы отстают от Майкрософтских на 5-6 лет), но все равно в результате к этому придут.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Ну так это всего-лишь попытка замаскировать плохую имплементацию. Типа не хочется разбираться где утечка, сделаем отдельным потоком, пусть потом крешнется. Напоминает мне Java код который я получал от моих индусских друзей. Вот такой:f_evgeny wrote:Программы написанные на процессах избавляют еще и от утечек, кстати.
try {
... код ...
}
catch(NullPointerException ex) {
}
почему там иногда генерится исключение - им влом разбираться. Лучше его замаскировать пустым обработчиком.
Так что избавляться от утечек созданием процессов - такая же ерунда. Просто попытка замаскировать незнание как пофиксить проблему и переложить отвественность на операционную систему, которая крешнет процесс, когда он сильно нагло себя ведет.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Смотря какими данными обмениваться и как. Например сетевые запросы обрабатывать проще и работать будет надежнее, если написать на процессах.Tropik wrote:Спасибо за обьяснениеf_evgeny wrote:Называется copy-on-write.
Все-равно, потоки намного более удобны и быстрее для обмена данными, чем процессы. Такова правда жизни. Даже несмотря на то, что в юниксах создание процесса довольно быстро (быстрее чем CreateProcess). Но постепенно и в Юниках придут к потокам Как всегда с отставанием в 5-6 лет (ну типа как юниксовские офисы отстают от Майкрософтских на 5-6 лет), но все равно в результате к этому придут.
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Почему? Обьясните с точки зрения написания программы, если вам не сложно. Что такого особенного в использовании процессе при обработке сетевых соединений по сравнению с потоком?f_evgeny wrote:Смотря какими данными обмениваться и как. Например сетевые запросы обрабатывать проще и работать будет надежнее, если написать на процессах.
Disclaimer: Я писал сетевые модули и для Windows и для *nix. Даже в Апачи есть кой-какой код, а написании которого я принимал участие.
Last edited by Tropik on 27 Oct 2009 09:07, edited 1 time in total.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Вы просто не совсем наверное поняли: что имеется в виду. Например нужно сделать сокет сервер. Делаем форк на соединение, после обработки соединения из процесса выходим. И система сама заботится о памяти.Tropik wrote:Так что избавляться от утечек созданием процессов - такая же ерунда. Просто попытка замаскировать незнание как пофиксить проблему и переложить отвественность на операционную систему, которая крешнет процесс, когда он сильно нагло себя ведет.
Дальше, все будет только хуже. Оптимист.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Да ничего особенного. На особенность не претендуем. Просто легко написать неубиваемый сервер. Apache 1.3Tropik wrote:Почему? Обьясните с точки зрения написания программы, если вам не сложно. Что такого особенного в использовании процессе при обработке сетевых соединений по сравнению с потоком?f_evgeny wrote:Смотря какими данными обмениваться и как. Например сетевые запросы обрабатывать проще и работать будет надежнее, если написать на процессах.
Disclaimer: Я писал сетевые модули и для Windows и для *nix. Даже в Апачи есть кой-какой код, а написании которого я принимал участие.
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Здрасте Дайте в гугле поиск apache 1.3 crashf_evgeny wrote:Да ничего особенного. На особенность не претендуем. Просто легко написать неубиваемый сервер. Apache 1.3
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Ну дал, в основном модули падают. И что? Похоже, что Вы притворяетесь, что не понимаете о чем речь.Tropik wrote:Здрасте Дайте в гугле поиск apache 1.3 crashf_evgeny wrote:Да ничего особенного. На особенность не претендуем. Просто легко написать неубиваемый сервер. Apache 1.3
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
А как вы себе представляете Апачи без модулей? Это все-равно что Windows без программ и сервисов написанных другими разработчиками. Тоже падать не будет.f_evgeny wrote:Ну дал, в основном модули падают. И что? Похоже, что Вы притворяетесь, что не понимаете о чем речь.Tropik wrote:Здрасте Дайте в гугле поиск apache 1.3 crashf_evgeny wrote:Да ничего особенного. На особенность не претендуем. Просто легко написать неубиваемый сервер. Apache 1.3
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Так падает дочерний процесс. Сервер остается работать.Tropik wrote:А как вы себе представляете Апачи без модулей? Это все-равно что Windows без программ и сервисов написанных другими разработчиками. Тоже падать не будет.
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
А толку от сервера, если модуль навернулся? Представьте, что у вас сайт написан на PHP, при этом сервер крутится под Апачи, а PHP модуль навернулся. Много толку от вашего сайта теперь будет?f_evgeny wrote:Так падает дочерний процесс. Сервер остается работать.Tropik wrote:А как вы себе представляете Апачи без модулей? Это все-равно что Windows без программ и сервисов написанных другими разработчиками. Тоже падать не будет.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Блин, Вы это серьезно пишете? Не могу поверить.Tropik wrote:А толку от сервера, если модуль навернулся? Представьте, что у вас сайт написан на PHP, при этом сервер крутится под Апачи, а PHP модуль навернулся. Много толку от вашего сайта теперь будет?
Навернулся модуль при обслуживании одной страницы в процессе-потомке. Этот процесс завершается. Упал один процесс-ребенок. Все остальное работает. Сам процесс-родитель и остальные детки. В том числе и с таким же модулем на других страницах.
Альтернатива на тредах. Падает все.
Или я неправ и что-то не так понимаю?
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Да не падает всё Вы в каком веке живете?f_evgeny wrote:Альтернатива на тредах. Падает все.
Или я неправ и что-то не так понимаю?
Вот вам пример, что даже Апачи начинает использовать гибрид threads и processes. Apache MPM (это то, где есть и часть моей работы). Все хорошо в меру. И когда кто-то (как вы) начинает утверждать, что потоки - это плохо, а процессы - хорошо, то сразу видно человека, который не занимался программированием действительно scalable software.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Клевета! Вы, собственно читали, то что я писал? Я именно писал, что нужно исходя из требований к приложению выбирать архитектуру. И лучше иметь форк, чем его не иметь. Да Вы и сами признавали, что надежность на форках выше.Tropik wrote:Да не падает всё Вы в каком веке живете?f_evgeny wrote:Альтернатива на тредах. Падает все.
Или я неправ и что-то не так понимаю?
Вот вам пример, что даже Апачи начинает использовать гибрид threads и processes. Apache MPM (это то, где есть и часть моей работы). Все хорошо в меру. И когда кто-то (как вы) начинает утверждать, что потоки - это плохо, а процессы - хорошо, то сразу видно человека, который не занимался программированием действительно scalable software.
А вот если Вы способны неангажированно обсуждать тему (пока на это не похоже) и имеете отношение к Apache, то было бы интересно, если бы Вы сообщили Ваше мнение, из-за чего Апач стал использовать треды. Для обеспечения переносимости на Win32, или по другим соображениям?
Дальше, все будет только хуже. Оптимист.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Может я действительно отстал от жизни, но мне показалось, что Вы утверждаете, что приложение написанное на тредах не может полностью упасть из-за краха в одном треде? Проясните пожалуйста Вашу точку.Tropik wrote:Да не падает всё Вы в каком веке живете?
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Создание нового процесса имеет смысл только в том случае, если "хозяин" признает, что имеет баги и не может их найти (т.е. фактически программисты признают, что не могут пофиксить проблемы), или как в случае с браузерами, если браузеру приходится иметь дело с 3rd party plugins. Т.е. когда в том же Internet Explorer приходится грузить всякие Флеш и т.п. плагины, за которые браузер отвечать не может, т.к. это делается другой группой программистов. Т.е. все упирается в то, что приходится осознавать, что в твоем контейнере всякие плохие прогаммисты будут грузить плохо оттестированный софт.f_evgeny wrote:Клевета! Вы, собственно читали, то что я писал? Я именно писал, что нужно исходя из требований к приложению выбирать архитектуру. И лучше иметь форк, чем его не иметь. Да Вы и сами признавали, что надежность на форках выше.
По другим соображениям. А именно, что используя MPM технологию - Апачи работает быстрее и потребляет меньше ресурсов.f_evgeny wrote:А вот если Вы способны неангажированно обсуждать тему (пока на это не похоже) и имеете отношение к Apache, то было бы интересно, если бы Вы сообщили Ваше мнение, из-за чего Апач стал использовать треды. Для обеспечения переносимости на Win32, или по другим соображениям?
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Да не говорил я такого. Мало того - если тред упадет - это очень даже хорошо (с нормальным логингом). Обычно это обозначает проблему с логикой и обработкой ошибок и должно быть пофиксено разработчиком (оставим в стороне то, что поток возможно исполняет плагин от другого производителя). Т.е. раз что-то упало, то мы должны выяснить почему, а не просто молча убить нарушителя. Нужно фиксить причину крэша, а не замалчивать ее убивая процесс.f_evgeny wrote:Может я действительно отстал от жизни, но мне показалось, что Вы утверждаете, что приложение написанное на тредах не может полностью упасть из-за краха в одном треде? Проясните пожалуйста Вашу точку.Tropik wrote:Да не падает всё Вы в каком веке живете?
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
К сожалению приходится констатировать, что разработчики выбирают более простой путь. Это относится как к Майкрософту, так и к Гуглу и к другим производителям. А именно - стало модно запихивать различные задачи в отдельные процессы. Ес-но - ведь проще убить процесс, чем разбираться, почему собственно это привело к ошибке.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Ага! Вот в чем коренная причина наших разногласий! Вы значит считаете, что есть некий "хорошо оттестированный софт"?Tropik wrote:...плохо оттестированный софт...
По этому вопросу мое мнение такое. Софт, а особенно написанный в объектном стиле, более того многозадачный, имеет столько степеней свободы, что даже надеятся на то, что можно все степени свободы протестировать, по меньшей мере наивно.
Дальше, все будет только хуже. Оптимист.
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Это потому, что нужно обеспечить надежную работу реального софта, который как правило имеет баги. Запихнув в отдельные процессы мы можем повысить:Tropik wrote:К сожалению приходится констатировать, что разработчики выбирают более простой путь. Это относится как к Майкрософту, так и к Гуглу и к другим производителям. А именно - стало модно запихивать различные задачи в отдельные процессы. Ес-но - ведь проще убить процесс, чем разбираться, почему собственно это привело к ошибке.
а) надежность
б) безопасность (иногда)
Дальше, все будет только хуже. Оптимист.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Ну в принципе я с вами согласен. Но нужно стремиться ошибки исправлять. Особенно в коммерческом платном софте (в free open-source софте тоже, если они конкурируют с коммерческим). Поэтому использовать процессы просто как средство скрыть ошибки - считаю недопустимым.f_evgeny wrote:Ага! Вот в чем коренная причина наших разногласий! Вы значит считаете, что есть некий "хорошо оттестированный софт"?Tropik wrote:...плохо оттестированный софт...
По этому вопросу мое мнение такое. Софт, а особенно написанный в объектном стиле, более того многозадачный, имеет столько степеней свободы, что даже надеятся на то, что можно все степени свободы протестировать, по меньшей мере наивно.
-
- Ник удалён за многократные регистрации
- Posts: 938
- Joined: 13 Aug 2009 23:21
Re: Билл Гейтс, нобелевка и битвы на кухне
Да то-же самое можно и с потоками сделать. Особенно в высокоуровневых языках (типа Java). Спокойно можно все исключения отлавливать на уровне потока. И ес-но в C/С++ тоже можноf_evgeny wrote:Это потому, что нужно обеспечить надежную работу реального софта, который как правило имеет баги. Запихнув в отдельные процессы мы можем повысить:Tropik wrote:К сожалению приходится констатировать, что разработчики выбирают более простой путь. Это относится как к Майкрософту, так и к Гуглу и к другим производителям. А именно - стало модно запихивать различные задачи в отдельные процессы. Ес-но - ведь проще убить процесс, чем разбираться, почему собственно это привело к ошибке.
а) надежность
б) безопасность (иногда)
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
Re: Билл Гейтс, нобелевка и битвы на кухне
Можно-то можно. Это теоретически. Однако же, если спуститься на грешную землю, остается несколько контрольных точек:Tropik wrote:Да то-же самое можно и с потоками сделать. Особенно в высокоуровневых языках (типа Java). Спокойно можно все исключения отлавливать на уровне потока. И ес-но в C/С++ тоже можно
1) необходимый уровень надежности
2) минимальные трудозатраты
3) приемлемую производительность
Вот исходя из этих пунктов и нужно исходить, ИМХО, конечно. процессы легче обеспечивают 1) и 2), треды - 3) и 2). 2) в обоих случаях потому, что на тредах проще IPC, но нужно больше тестирования и тщательнее относиться к багам для обеспечения той же надежности, а это трудозатраты и деньги.
Дальше, все будет только хуже. Оптимист.