LINUX.ORG.RU

очень много нитей


0

0

Есть программка, которая написана без излишних размышлений, и которой для нормальной работы нужно очень много (десятки тысяч) нитей.

Написана она на C++. Есть некий класс (пусть будет Thread) c методом execute, в котором все и происходит. Задача состоит в том, чтобы количество классов, одновременно обрабатывающих свои execute, было больше того количества нитей, которые разумно создавать в системе.

Одним из возможных решений, как мне кажется, является библиотека m*n, т.е. порождающая user level threads. Существуют ли такие для современных линуксов? Что еще можно предпринять кроме самого очевидного - изменения логики приложения?

anonymous

Был MxN NGPT, но в борьбе с NPTL не выжил.

NPTL держит десятки тысяч. Правда придётся выносить стеки в отдельную память, иначе не влезает.

execve
()

Наверное, проще будет переколбасить.

Kpoxman ★★
()

В принципе, для линукса можно сделать (или найти готовый) аналог виндовых fibers - т.е. "недотредов" с ручным переключением без перехода в ядро. Но под них переписывать кое-что придется (ну например, говорить yield в нужных местах и не успользовать блоирующие системные вызовы).

man getcontext и далее по ссылкам.

Но в принципе, десяток-другой тысяч спящих тредов современный линукс обрабатывает довольно успешно. Только надо стек им поурезать, и все будет хорошо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.