А зачем потоки в mono плодят процессы в htop?
От: VladCore  
Дата: 15.10.15 14:24
Оценка:
даже не знаю что гуглить на эту тему в образовательных целях.

насколько я понял есть два способа управлять потоками: __thread и pthread. ещё есть fork

посоветуйте ссылки почитать просто из любопытства, а так же в исторических аспектах как оно и откуда всё всплыло.

P.S. Блин-Черт-Мать-их-эти-линуксы. __thread — это всего лишь TLS в gcc, а pthread — это часть linux kernel (типа фреймворка?).

но ведь можно же как-то не плодить процессы для потоков?
Отредактировано 15.10.2015 14:59 VladCore . Предыдущая версия . Еще …
Отредактировано 15.10.2015 14:57 VladCore . Предыдущая версия .
Отредактировано 15.10.2015 14:54 VladCore . Предыдущая версия .
Отредактировано 15.10.2015 14:31 VladCore . Предыдущая версия .
Отредактировано 15.10.2015 14:30 VladCore . Предыдущая версия .
Re: А зачем потоки в mono плодят процессы в htop?
От: vsb Казахстан  
Дата: 15.10.15 15:32
Оценка:
pthread это потоки. fork это создать новый процесс (копия текущего).
Re: А зачем потоки в mono плодят процессы в htop?
От: vsb Казахстан  
Дата: 15.10.15 15:34
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>но ведь можно же как-то не плодить процессы для потоков?


Чего именно ты хочешь добиться? htop видимо показывает все потоки наряду с процессами. Это его поведение. Что тебя смущает? Принципиальных отличий потоков в Linux и Windows нет.
Отредактировано 15.10.2015 15:34 vsb . Предыдущая версия .
Re[2]: А зачем потоки в mono плодят процессы в htop?
От: VladCore  
Дата: 15.10.15 16:02
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, VladCore, Вы писали:


VC>>но ведь можно же как-то не плодить процессы для потоков?


vsb>Чего именно ты хочешь добиться? htop видимо показывает все потоки наряду с процессами. Это его поведение. Что тебя смущает?


меня смущает разные pid напротив каждого "потока". разые pid — разные процессы. притом память же, точнее объекты, доступна между разными pid. вот что первое непонятно.

vsb>Принципиальных отличий потоков в Linux и Windows нет.


есть.
mysql вроде не плодит пидов если его десятками клиентов нагрузить, а постгрес плодит новые пиды. но я тут не уверен на 100. пишу по памяти. подтвердите или опровергните плиз.
Отредактировано 15.10.2015 16:08 VladCore . Предыдущая версия .
Re: А зачем потоки в mono плодят процессы в htop?
От: wildwind Россия  
Дата: 15.10.15 21:40
Оценка:
Здравствуйте, VladCore, Вы писали:

VC> посоветуйте ссылки почитать просто из любопытства, а так же в исторических аспектах как оно и откуда всё всплыло.


man pthreads, раздел "Linux implementations of POSIX threads"
Я привык, что в интернете можно найти ответ на любой вопрос. Я не люблю думать. Зачем думать, если всё уже придумано до меня? © Zenden@RSDN ::: avalon/1.0.442
Re[3]: А зачем потоки в mono плодят процессы в htop?
От: watchmaker  
Дата: 15.10.15 22:30
Оценка: +1
Здравствуйте, VladCore, Вы писали:

vsb>>Чего именно ты хочешь добиться? htop видимо показывает все потоки наряду с процессами. Это его поведение. Что тебя смущает?


VC>меня смущает разные pid напротив каждого "потока".


Почти наверное ты неправильно интерпретируешь вывод htop. Эта утилита по умолчанию показывает и процессы, и потоки. Скрыть пользовательские потоки, оставив только процессы, можно выставив опцию "Hide userland threads". Или, если хочется видеть и процессы, и потоки, но более явно разделить их, то достаточно полезной оказывается опция "Display threads in a different color". Попробуй и ту, и другую.




vsb>>Принципиальных отличий потоков в Linux и Windows нет.


VC>есть.


Принципиальных — нет.
Re[2]: А зачем потоки в mono плодят процессы в htop?
От: VladCore  
Дата: 17.10.15 13:57
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>pthread это потоки. fork это создать новый процесс (копия текущего).


как то вы поверхностно напечатали.

я вот что нарыл. давным давно в линаксе что-то можно было распараралелить только форкнув себя. фактически создавался новый процесс с той же точкой старта что и возврат из функции fork, main не стартовал в дочернем процессе.

Это технологично но абсолютно неудобно. Но тогда ещё джавы даже не было, так что никто не парился и все продолжали как ежики есть кактусы форкать.

Потом, непонятно когда, появился революционный pthread, но не тот что сейчас. Назывался LinuxThreads. у каждого потока был свой пид.

Потом в ядре 2.6 появился обязатеьный и ещё более революционный pthread, как всегда не совместимый с предыдущим. Назывался Native Posix Thread Lib. У потоков могут быть одинаковые, а могут и разные pid. Зачем так сложно? И почему нельзя было сделать как у всех? что бы pid у всех потоков в одном процессе был один.

Потом в boost что-то добавили для распараллеливания, но я пока не знаю он на линуксе на голых форках работает или по другому?

сорри за ламерские вопросы.
Отредактировано 17.10.2015 14:03 VladCore . Предыдущая версия .
Re[3]: А зачем потоки в mono плодят процессы в htop?
От: smeeld  
Дата: 17.10.15 14:45
Оценка:
Здравствуйте, VladCore, Вы писали:


VC>я вот что нарыл. давным давно в линаксе что-то можно было распараралелить только форкнув себя.


Не только, во всех юниксах был clone.

VC>Потом, непонятно когда, появился революционный pthread, но не тот что сейчас.


Он бородатый, какой он революционный? И NPTL, и предыдущие Linux Threads используют clone, отличия
только в плане управления потоками, для чего в kernel были добавлены дополнительные сисколы.

>Назывался LinuxThreads. у каждого потока был свой пид.


Тут немного фишки из ядра линукс: треды в линуксе ничем не отличаются от процессов, в смысле, каждый тред в линуксе
есть процесс, то есть в ядре представлен всем набором структур, описывающем сущность процесс, но некоторые подструктуры
нескольких потоков, объединённых в процесс, одинаковы для всех, то есть указатели в их task_struct, указывают на одни и те
же структуры. В Solaris уже не так, там есть только треды ядра, а пользовательский процесс и пользовательский поток есть чисто
абстрактные сущности, которые обслуживаются разными потоками ядра.
Re[4]: А зачем потоки в mono плодят процессы в htop?
От: VladCore  
Дата: 24.10.15 21:06
Оценка:
Здравствуйте, 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-й!!! Ни хрена себе торвальдс терпеливый.
Отредактировано 24.10.2015 21:11 VladCore . Предыдущая версия . Еще …
Отредактировано 24.10.2015 21:06 VladCore . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.