fork()
6 отговора
322 прегледа
fork()
В Linux употребяват ли се thread-ове или всеки task представлява отделен процес? В какви ситуации е нужно един процес да се размножи, т.е. от parent процес да се създаде child?
Мерси боку!
Мерси боку!
Re: fork()
Всеки task е отделен процес. В ядро 2.6 процесите са разделени на две нива, така че да изглежда, че съществуват отелни понятия за thread и process.
По този повод по едно време ставаха (а може и сега да стават, не съм пробвал скоро) едни много забавни неща -- ако основния "thread" на програмата умре, ps не показва, че останалите threads все още си работят. Гледаш, че всички процеси в top са idle, cpu utilization-a e 99% :)
Ако искаш да пишеш multithread програми, може да използваш pthread, или директно да си напишеш своя библиотека използвайки системното извикване clone (май имаше някакви числа след името, но ме мързи да проверявам)
По този повод по едно време ставаха (а може и сега да стават, не съм пробвал скоро) едни много забавни неща -- ако основния "thread" на програмата умре, ps не показва, че останалите threads все още си работят. Гледаш, че всички процеси в top са idle, cpu utilization-a e 99% :)
Ако искаш да пишеш multithread програми, може да използваш pthread, или директно да си напишеш своя библиотека използвайки системното извикване clone (май имаше някакви числа след името, но ме мързи да проверявам)
Re: fork()
Появата на thread-ове в Linux няма ли да намали стабилността на приложенията? В един процес всички thread-oве споделят едно и също адресно пространство, което разбира се улеснява имплементирането на комуникацията между тях. Също context switching-а при thread-oвете е по-бърз, отколкото при процесите, но цената, която трябва да се заплати се нарича стабилност. Не знам, появата на "нишки" в Линукса нещо не ме кефи. Дали защото GUI-то ги налага...
Re: fork()
Някой те е излъгал, че context switching-а в Linux е по-бърз при нишките. Няма _никаква_ разлика м/у context-switching на различни процеси и нишки.
Който не може да пише стабилни многонишкови приложения, да пише без нишки, или да ходи да пасе овцете...
П.П. Не съм чул GUI да налага многонишковост, но аз не пиша GUI приложения и ще се опитам да ти повярвам :)
П.П.2 Линукс има нишки от _мноооого_ време (забравих вече колко, но поне 6-7 години)
Който не може да пише стабилни многонишкови приложения, да пише без нишки, или да ходи да пасе овцете...
П.П. Не съм чул GUI да налага многонишковост, но аз не пиша GUI приложения и ще се опитам да ти повярвам :)
П.П.2 Линукс има нишки от _мноооого_ време (забравих вече колко, но поне 6-7 години)
Re: fork()
Мне бе като не ти харесват си форк-вай процеси и действай по утвърдените методи за IPC...стабилност...деазнам mysqld примерно си работи с нишки и не съм забелязал да е особено нестабилен. Въпрос на гледна точка май...