Здравствуйте, VladCore, Вы писали:
VC>но ведь можно же как-то не плодить процессы для потоков?
Чего именно ты хочешь добиться? htop видимо показывает все потоки наряду с процессами. Это его поведение. Что тебя смущает? Принципиальных отличий потоков в Linux и Windows нет.
Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, VladCore, Вы писали:
VC>>но ведь можно же как-то не плодить процессы для потоков?
vsb>Чего именно ты хочешь добиться? htop видимо показывает все потоки наряду с процессами. Это его поведение. Что тебя смущает?
меня смущает разные pid напротив каждого "потока". разые pid — разные процессы. притом память же, точнее объекты, доступна между разными pid. вот что первое непонятно.
vsb>Принципиальных отличий потоков в Linux и Windows нет.
есть.
mysql вроде не плодит пидов если его десятками клиентов нагрузить, а постгрес плодит новые пиды. но я тут не уверен на 100. пишу по памяти. подтвердите или опровергните плиз.
Здравствуйте, VladCore, Вы писали:
VC> посоветуйте ссылки почитать просто из любопытства, а так же в исторических аспектах как оно и откуда всё всплыло.
man pthreads, раздел "Linux implementations of POSIX threads"
Здравствуйте, VladCore, Вы писали:
vsb>>Чего именно ты хочешь добиться? htop видимо показывает все потоки наряду с процессами. Это его поведение. Что тебя смущает?
VC>меня смущает разные pid напротив каждого "потока".
Почти наверное ты неправильно интерпретируешь вывод htop. Эта утилита по умолчанию показывает и процессы, и потоки. Скрыть пользовательские потоки, оставив только процессы, можно выставив опцию "Hide userland threads". Или, если хочется видеть и процессы, и потоки, но более явно разделить их, то достаточно полезной оказывается опция "Display threads in a different color". Попробуй и ту, и другую.
vsb>>Принципиальных отличий потоков в Linux и Windows нет.
VC>есть.
Принципиальных — нет.
Re[2]: А зачем потоки в mono плодят процессы в htop?
Здравствуйте, vsb, Вы писали:
vsb>pthread это потоки. fork это создать новый процесс (копия текущего).
как то вы поверхностно напечатали.
я вот что нарыл. давным давно в линаксе что-то можно было распараралелить только форкнув себя. фактически создавался новый процесс с той же точкой старта что и возврат из функции fork, main не стартовал в дочернем процессе.
Это технологично но абсолютно неудобно. Но тогда ещё джавы даже не было, так что никто не парился и все продолжали как ежики есть кактусы форкать.
Потом, непонятно когда, появился революционный pthread, но не тот что сейчас. Назывался LinuxThreads. у каждого потока был свой пид.
Потом в ядре 2.6 появился обязатеьный и ещё более революционный pthread, как всегда не совместимый с предыдущим. Назывался Native Posix Thread Lib. У потоков могут быть одинаковые, а могут и разные pid. Зачем так сложно? И почему нельзя было сделать как у всех? что бы pid у всех потоков в одном процессе был один.
Потом в boost что-то добавили для распараллеливания, но я пока не знаю он на линуксе на голых форках работает или по другому?
VC>я вот что нарыл. давным давно в линаксе что-то можно было распараралелить только форкнув себя.
Не только, во всех юниксах был clone.
VC>Потом, непонятно когда, появился революционный pthread, но не тот что сейчас.
Он бородатый, какой он революционный? И NPTL, и предыдущие Linux Threads используют clone, отличия
только в плане управления потоками, для чего в kernel были добавлены дополнительные сисколы.
>Назывался LinuxThreads. у каждого потока был свой пид.
Тут немного фишки из ядра линукс: треды в линуксе ничем не отличаются от процессов, в смысле, каждый тред в линуксе
есть процесс, то есть в ядре представлен всем набором структур, описывающем сущность процесс, но некоторые подструктуры
нескольких потоков, объединённых в процесс, одинаковы для всех, то есть указатели в их task_struct, указывают на одни и те
же структуры. В Solaris уже не так, там есть только треды ядра, а пользовательский процесс и пользовательский поток есть чисто
абстрактные сущности, которые обслуживаются разными потоками ядра.
Re[4]: А зачем потоки в mono плодят процессы в htop?
Здравствуйте, smeeld, Вы писали:
VC>>я вот что нарыл. давным давно в линаксе что-то можно было распараралелить только форкнув себя.
S>Не только, во всех юниксах был clone.
VC>>Потом, непонятно когда, появился революционный pthread, но не тот что сейчас.
S>Он бородатый, какой он революционный? И NPTL, и предыдущие Linux Threads используют clone, отличия S>только в плане управления потоками, для чего в kernel были добавлены дополнительные сисколы.
>>Назывался LinuxThreads. у каждого потока был свой пид.
S>Тут немного фишки из ядра линукс: треды в линуксе ничем не отличаются от процессов, в смысле, каждый тред в линуксе S>есть процесс, то есть в ядре представлен всем набором структур, описывающем сущность процесс, но некоторые подструктуры S>нескольких потоков, объединённых в процесс, одинаковы для всех, то есть указатели в их task_struct, указывают на одни и те S>же структуры. В Solaris уже не так, там есть только треды ядра, а пользовательский процесс и пользовательский поток есть чисто S>абстрактные сущности, которые обслуживаются разными потоками ядра.
Напишите еще.
Например, зачем придумали группы потоков с общим пидом в одной группе и разными пидами в разных группах потоков? Сейчас же все потоки по прежнему имеют разные пиды в свежих релизах 2015-го года. я про ffmpeg и mono. Похоже группы потоков не прижились чего-то.
не нашол в каких годах все это появилось? я про LinuxThreads и NPTL. Kernel 2.6 к примеру пилили аж целых 9 лет, с 2004-го по 2013-й!!! Ни хрена себе торвальдс терпеливый.