Pthread.h - Является ли добровольная передача ЦП единственным триггером для планирования другого потока пользовательского уровня?

Является ли добровольная передача ЦП единственным способом, с помощью которого потоки в библиотеке Linux pthread могут включить планирование другого потока в рамках того же процесса? (Потому что pthread - это реализация потока на уровне пользователя?)

Кажется, что pthread_yield () и мьютексы (предоставляемые библиотекой pthread) - единственный способ вызвать планировщик для запуска выполнения другого потока. Это правда ?

Вы описываете поведение co-operative multitasking. Такое поведение можно наблюдать в очень древних операционных системах без встроенной поддержки многопоточности, где библиотеки потоков реализованы только на уровне пользователя (такие реализации иногда называют «зелеными потоками»). Однако почти все современные ОС используют preemptive multitasking, что означает, что ядро ​​поддерживает потоки и может перемещать потоки в ЦП и выходить из него в любое время, когда захочет. В современных ОС функция pthread_yield () является излишней, поскольку потоки будут «автоматически выдаваться» всякий раз, когда ОС сочтет это целесообразным.

Jeremy Friesner 09.09.2018 19:59

В Linux каждый поток уровня пользователя реализуется через соответствующий поток уровня ядра, поэтому pthreads.h обеспечивает полную вытесняющую многозадачность.

Jeremy Friesner 09.09.2018 20:24

Re: «... Поскольку pthread - это реализация потока на уровне пользователя ...» библиотека pthreads была такой, может быть, лет двадцать назад. В наши дни это стандартный API, который практически всегда реализуется с помощью системных вызовов, которые создают настоящие потоки ОС.

besmirched 10.09.2018 16:36

Спасибо Джереми и запятнал ваши ответы (данные в комментариях).

Jayanth 16.10.2019 07:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет, любой вызов, который также блокирует текущий поток, будет планировать другой шаг. Сюда входят вызовы библиотек, такие как sleep (), read (), select (), pthread_mutex_lock () и многие другие.

Обратите внимание, что pthread не является чистой реализацией потока пользовательского уровня в Linux, он отображает 1 поток пользовательского режима в 1 задачу ядра.

Под read () вы имеете в виду системный вызов, который перехватывает ядро, верно? Однако вы упомянули, что поток сопоставлен с задачей ядра. Есть ли веб-страница, объясняющая эту реализацию?

Jayanth 09.09.2018 20:11

Да, именно это и делает вызов read (). См. Документацию man7.org/linux/man-pages/man7/pthreads.7.html и проектную документацию akkadia.org/drepper/nptl-design.pdf

nos 09.09.2018 20:50

Другие вопросы по теме