Как посмотреть потоки процесса в Linux
Потоки это популярная программная абстракция для параллельного выполнения в современных операционных системах. Когда программа делиться на потоки для многопоточного выполнения, ресурсы такие как адресное пространство оперативной памяти и открытые файлы делятся между потоками чтобы минимизировать накладные расходы и более эффективно использовать процессорное время. Эти возможности делают потоки эффективным механизмом много поточного выполнения.
Для планировщика ядра потоки ничем не отличаются от обычных процессов которые имеют общие ресурсы. Поэтому для просмотра потоков можно использовать такие классические инструменты командной строки как ps и top. В этой статье мы поговорим о том как посмотреть потоки процесса Linux.
Потоки процессов в Linux
Сразу необходимо разобраться в том что же такое процессы и потоки в linux и чем они отличаются от друг от друга. В Linux есть два способа наладить многопоточное выполнение какого-либо действия. Первый, когда процесс создает свои копии с помощью механизма fork и затем эти процессы взаимодействуют через сокеты или IPC. Тогда мы получаем отдельные процессы, каждый процесс имеет свои ресурсы и занимает память. Второй же способ подразумевает выделение потоков в рамках одного процесса. Все протоки одного процесса будут иметь один идентификатор группы потоков, а также уникальный идентификатор потока. Они будут иметь доступ ко всем ресурсам родительского процесса и занимать меньше памяти.
1. Утилита ps
В утилите ps показ потоков процесса включается опцией -T. Например вот такой командой можно посмотреть все потоки процесса с PID, например, для Chromium:
В колонке SPID отображается идентификатор потока, а в CMD его имя.
2. Утилита top
Команда top позволяет просматривать потоки в реальном времени. Для включения отображения потоков запустите top с опцией -H. Также можно включить или отключить показ потоков во время выполнения с помощью клавиши H:
Если вы хотите посмотреть только потоки нужного процесса выполните:
3. Утилита htop
Ну и как всегда под конец самое интересное. Самой удобной утилитой для просмотра потоков процесса я считаю команду htop. Это основный на ncurces интерактивный просмотрщик процессов. С помощью этой утилиты вы можете наблюдать за потоками в реальном времени в виде дерева.
Для того чтобы включить просмотр потоков в htop откройте программу, войдите в меню нажав клавишу F2, затем выберите Display Options, в разделе Setup. Теперь отметьте Three view и Show custom thread names. Все, можно нажимать F10 для сохранения настроек:
Теперь вы можете просматривать потоки в виде дерева отдельно для каждого процесса. Здесь снова отображаются потоки для браузера Chromium:
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Процесс и потоков в Linux
Изучение
Программисты должны быть знакомы с такими терминами, как процесс и потоки, но даже те, кто не знаком с ними, также могут извлечь выгоду из их понимания. Linux может помочь вам определить, какие приложения создают трудности на вашем компьютере и нужно ли вам добавлять дополнительную оперативную память для повышения производительности, управляя процессами и потоками. Давайте погрузимся в сферу компьютерных систем и разберемся, что означают эти термины. Некоторые концепции будут упрощены и обобщены, но общие принципы, которые мы обсуждаем, должны помочь проиллюстрировать различия между этими терминами.
Как этот процесс работает в Linux
Недостаточно предоставить компьютеру двоичный код, который сообщает ему, что выполнять программу. Для запуска программы требуется много памяти и других ресурсов операционной системы. Итак, » Процесс » — это программа, загруженная в память со всеми необходимыми ресурсами. Управление ресурсами вашей программы — это работа операционной системы.
Счетчик программ, регистры и стек — все это критически важные ресурсы для каждого процесса. ЦП содержит набор регистров для хранения данных. Регистры могут содержать информацию, необходимую процессу, такую как инструкции или адреса хранения. Компьютеры отслеживают, где они находятся в своих программах, используя «счетчик программ», также известный как «указатель команд». Стеки данных используются в компьютерных программах как временное пространство, поскольку они содержат информацию об активных подпрограммах. Динамически выделяемая память отличается от «кучи» — процесса, который является автономным и неограниченным.
Отдельная программа может выполняться более чем в одном экземпляре, и каждый из них называется » Процессом «. Адресное пространство памяти для каждого процесса является отдельным, поэтому он может работать независимо и быть изолированным от других процессов. Приложение не может напрямую обращаться к данным, которые используются другими процессами. При переключении одного процесса на другой сохраняются и загружаются регистры, карты памяти и другие ресурсы, загрузка которых займет некоторое время.
Операционные системы пытаются разделить процессы по отдельности, чтобы отказ одного процесса не повлиял на другие процессы. Например, вы, вероятно, столкнулись с ситуацией, когда одно из ваших компьютерных приложений зависает или дает сбой, и все же вы смогли остановить его, не затрагивая другие приложения. Каждый процесс имеет собственное адресное пространство, поэтому у каждого свой набор данных.
Как поток работает в Linux
» Поток » — это набор инструкций, выполняемых в процессе, который может варьироваться от одного потока до нескольких. Процесс — это процесс, который выделяет память и ресурсы, которые позже используются потоком. Иногда это называют легковесным процессом, потому что они могут получить доступ к общим данным, имея собственный стек. Поскольку оно работает параллельно, производительность приложения также будет улучшена. Наличие одного и того же адресного пространства потоков и процессов означает, что обмен данными между потоками не требует больших затрат. Недостатком является то, что отказ одного потока определенно повлияет на другие потоки и сделает процесс менее жизнеспособным. В графическом представлении ниже вы можете увидеть, как работает процесс и потоки.
Разница между процессом и потоками Linux
Заметные различия отмечены на следующем изображении:
Заключение
Термины «процесс» и «поток» могут сбивать с толку новичков. Итак, эта статья написана с учетом этого момента, и вы должны иметь основную идею после прочтения статьи. После этого он объяснил основные различия между ними. Поток — это часть процесса, которая распределяет свои ресурсы по другим потокам. Это улучшит производительность приложения, поскольку теперь ресурсы разделены.