Поток — это планируемая внутри процесса последовательность выполнения. У каждого работающего процесса есть хотя бы один поток, а у многопоточного процесса — несколько последовательностей, способных продвигаться параллельно.
Использование процессов · Урок 3
Потоки процессов
Узнайте, как потоки Linux совместно используют ресурсы процесса и как проверять их с помощью ps.
Процессы и потоки
Потоки одного процесса совместно используют такие ресурсы, как виртуальное адресное пространство и открытые файловые дескрипторы. При этом у каждого потока есть собственное состояние выполнения, включая регистры и стек. Совместное использование делает обмен эффективным, но также означает, что несинхронизированное изменение одного потока может повлиять на остальные.
У отдельных процессов обычно разные адресные пространства, и они обмениваются через явные межпроцессные механизмы. Ни один подход не является автоматически быстрее или безопаснее; компромисс определяется нагрузкой и реализацией.
Какой ресурс обычно совместно используется потоками одного процесса?
Идентификаторы потоков
Linux представляет каждый поток как планируемую задачу с собственным идентификатором потока. Идентификатор лидера группы потоков обычно показывается как идентификатор процесса, а все участники имеют общий идентификатор группы потоков. Инструменты используют метки PID, TID, LWP и SPID; проверяйте определения полей конкретного инструмента, а не считайте все метки равнозначными.
Что каждый поток хранит независимо?
Перечисление потоков через ps
Используйте явные поля вывода, чтобы избежать неоднозначных стандартных представлений:
$ ps -eLo pid,tid,psr,stat,comm
В ps из procps параметр -L показывает потоки, а -e выбирает все процессы. pid обозначает группу потоков, tid — отдельный поток, psr показывает CPU, на котором поток выполнялся последним, а stat сообщает состояние. Чтобы проверить один процесс:
$ ps -L -p 1234 -o pid,tid,stat,pcpu,comm
Списки потоков являются снимками. Сразу после вывода поток может завершиться или изменить состояние.
Какая команда перечисляет потоки PID 1234 с явными полями?
Интерпретация активности потоков
Высокое использование CPU одним потоком может скрываться за средним значением всего процесса. Сопоставляйте образцы CPU потоков с журналами приложения, трассировками стеков и профилировщиками. Не подключайте отладчики и не отправляйте сигналы производственным задачам, не разобравшись с остановками, правами и влиянием на службу.
Почему список потоков ps нельзя считать постоянным состоянием?
Урок завершён
Вы завершили Потоки процессов
Теперь вы можете отличать ресурсы процесса от состояния выполнения отдельного потока.
Помните, что у каждого процесса есть хотя бы один поток.
Определяйте ресурсы, совместно используемые потоками одного процесса.
Перечисляйте явные идентификаторы процессов и потоков через
ps -L.Считайте вывод потоков снимком и сопоставляйте его с другими свидетельствами.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт