...
Нити, т. е. параллельно выполняемые части одной программы, в стандартной библиотеке поддержки многонитевых программ Linux реализованы просто как процессы, порожденные с указанием флага CLONE_VM, и с точки зрения ядра системы ничем не отличаются от любых других процессов. Однако в некоторых альтернативных реализациях многонитевых библиотек дело обстоит иначе.
Помимо процессов описанного выше вида бывают еще «ущербные», порождаемые с помощью функции kernel_thread для внутренних системных нужд. У них нет параметров командной строки, как правило, они не имеют открытых файлов и т. д. Поскольку, несмотря на свою ущербность, эти процессы все равно фигурируют в списке задач, в литературе иногда различают полноценные процессы, порожденные из «пространства пользователя» (userspace), и задачи, т. е. все процессы, включая внутренние процессы ядра.
...
> Ты б решил, что ты действительно хочешь узнать. как устроен механизм нитей на уровне ядра (и какая философия их использования)
> > В частности "нити как в Windows" - это чего такое? По каким > параметрам ты их сравнивать решил? В моем понимани "нити как в Windows" это означает: есть процесс...сам по себе пустой и ничего не значащий...в каждом процессе должна быть хотя бы одна нить которая по сути есть код и стек. Все логично.
Вообщем на мой взгляд такой механизм нитей есть очень мощный инструмент для программирования (даже если не брать их реальную реализацию в ОС от MS). Т.е. понятно как и главное зачем (целесообразность) их использовать.
Хочется понять тоже самое относительно системы Юникс.
Надеюсь теперь я понятно объяснился.
Чтобы постичь целесообразность надо знать их внутренний механизм.
В том же самом Робачевском этому вопросу не уделяется внимания.
Но все еще есть надежда, что юниксовские нити для чего нибудь, а все же могут быть полезны.
> > Если просто для самообразования (без глупых попыток > сравнения), то тебе уж посоветовали. Курить для начала > posix threads и man clone.
в принципе Urix привел довольно много инфы и линков . так что если это серьезно посмотреть, то наверное действительно станет все на свои места...но пока мне ужасно влом :)
конечно есть :)21.04.03 08:55 Автор: PS <PS> Статус: Elderman
> Если ты переводишь thread как "нить" (правилный перевод - > "поток"), то есть. Если ты имеешь в виду fibers, то не знаю > ;) > > Внутреняя реализация потоков нас не интересует. Так ? > А use case можно увидеть: > man pthread_create > man pthread_join > man pthread_exit > > Все ф-ии определяются в <pthread.h> > При линковке указываешь -lpthread
большое спасибо за наводку!
Внутренняя реализация как раз очень интересует ( являются ли они частью ядра ). Ведь в принципе их можно и самому абстрагировать на основе процессов. только толку то...
Вопрос ставлю так: есть ли в чистой системе юникс понятие нитей?
а ты не мог бы чтонить будь рассказать о fibers (что это такое)
> большое спасибо за наводку! > > Внутренняя реализация как раз очень интересует ( являются > ли они частью ядра ). Ведь в принципе их можно и самому > абстрагировать на основе процессов. только толку то... > > Вопрос ставлю так: есть ли в чистой системе юникс понятие > нитей?
Тут грамотней говорить о стандартах.
Существует понятие "POSIX threads".
Стандарт posix (если его считать "чистым" unix :) описывает так называемые posix threads (pthreads), о них, собственно, и говорилось.23.04.03 11:11 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> Внутренняя реализация как раз очень интересует ( являются > ли они частью ядра ). Ведь в принципе их можно и самому > абстрагировать на основе процессов. только толку то... Вообще конечно, зависит от реализации :) Но насколько я понимаю, поскольку POSIX - это набор требований, а не конкретная реализация, то достаточно иметь интерфейс на уровне системных вызовов или вызовов соответствующей библиотеки, чтобы сказать, что нити в данной операционке можно сделать POSIX-нитями. Я просто к тому, что в Linux "POSIX-нити" и "не-POSIX-нити" с точки зрения системного вызова, реально порождающего нить, по-моему, не отличаются. Если я неправ, поправьте.
еще 1 реализация21.04.03 11:42 Автор: Eugene Статус: Незарегистрированный пользователь
> Внутреняя реализация потоков нас не интересует. Так ? > А use case можно увидеть: > man pthread_create > man pthread_join > man pthread_exit > > Все ф-ии определяются в <pthread.h> > При линковке указываешь -lpthread
...
Нити, т. е. параллельно выполняемые части одной программы, в стандартной библиотеке поддержки многонитевых программ Linux реализованы просто как процессы, порожденные с указанием флага CLONE_VM, и с точки зрения ядра системы ничем не отличаются от любых других процессов. Однако в некоторых альтернативных реализациях многонитевых библиотек дело обстоит иначе.
Помимо процессов описанного выше вида бывают еще «ущербные», порождаемые с помощью функции kernel_thread для внутренних системных нужд. У них нет параметров командной строки, как правило, они не имеют открытых файлов и т. д. Поскольку, несмотря на свою ущербность, эти процессы все равно фигурируют в списке задач, в литературе иногда различают полноценные процессы, порожденные из «пространства пользователя» (userspace), и задачи, т. е. все процессы, включая внутренние процессы ядра.
...
другими словами, нитей, которые есть в Win, в юниксе нет :)...19.04.03 07:02 Автор: vh <Дмитрий> Статус: Member Отредактировано 19.04.03 07:02 Количество правок: 1
На самом деле функциональность нитей Windows есть и в Linux, просто все устроено немного по другому - в Windows код выполняется в рамках нити, а процесс является всего лишь контейнером нитей, а в Linux код выполняется в рамках процесса.