Не вытесняющие Pthreads? - PullRequest
3 голосов
/ 23 сентября 2011

Есть ли способ использовать pthreads без планировщика, поэтому переключение контекста происходит только в том случае, если поток явно уступает или блокируется в мьютексе / cond? Если нет, есть ли способ минимизировать затраты на планирование, чтобы принудительное переключение контекста происходило как можно реже?

Этот вопрос относится к реализации Linux-gcc / g ++ потоков POSIX.

Ответы [ 2 ]

4 голосов
/ 23 сентября 2011

Вы можете использовать Pth (a.k.a. GNU Portable Threads ), библиотеку потоков без вытеснения. Конфигурирование с помощью --enable-pthread создаст замену плагина для pthreads. Я только что собрал и протестировал это на своем Mac, и он отлично работает для простой программы pthreads.

От README:

Pth - очень портативная библиотека на основе POSIX / ANSI-C для платформ Unix который обеспечивает не вытесняющее планирование на основе приоритетов для нескольких потоки выполнения (или многопоточность) внутри событий Приложения. Все потоки работают в одном и том же адресном пространстве сервера приложение, но каждый поток имеет свой собственный программный счетчик, стек времени выполнения, маска сигнала и переменная errno.

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

Кроме того, Pth предоставляет дополнительный API эмуляции для POSIX.1c. потоки (`Pthreads '), которые можно использовать для обратной совместимости с существующие многопоточные приложения.

0 голосов
/ 23 сентября 2011

Если у вас есть процесс, работающий в обычном пользовательском режиме, переключение контекста будет происходить естественным образом как часть работы системы - всегда есть другой процесс, который требует времени ЦП. Интеллектуальные переключатели контекста между вашими потоками уже достаточно хорошо оптимизированы операционной системой и иногда могут быть необходимы.

Если у вас действительно возникают проблемы с чрезмерным переключением контекста, лучше всего сначала настроить планировщик Linux, что здесь не по теме. pthread_setschedprio и pthread_setschedparam могут устанавливать некоторые подсказки, но они ограничены установкой приоритетов, и интерпретация этих приоритетов определяется реализацией, т.е. вплоть до планировщика Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...