TGViewer
Евгений Козлов пишет про IT Евгений Козлов пишет про IT @careerunderhood · 2.84K subscribers
Post #312 2.7K
Евгений Козлов пишет про IT CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 5. Потоки. Начало. Продолжаем разговор о конкурентности. Сегодня разбираемся с потоками. Начнем с основ и базовых определений. Пото́к выполне́ния (тред; от англ. thread — нить)…
CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 6. Потоки в Linux.

Продолжаем разговор о конкурентности. В прошлом посте были базовые определения связанные с потоками. Сегодня погружаемся во внутренности на примере ядра Linux.

Несколько предварительных фактов о ядре Linux:
Ядро Linux оперирует задачами (tasks). Задача - "что-то", что можно запустить и заменеджить. До появления многопоточности процесс и задача в Linux были синонимами.
- Каждый процесс в системе имеет два идентификатора - Process ID ( PID ) и Thread Group ID ( TGID )
- В "обычном" последовательном процессе PID == TGID.
- В "многопоточном" процессе TGID общий на группу процессов.
- Процессы с общим TGID имеют общие ресурсы.
- Если «многопоточный» процесс имеет PID == TGID, то мы имеем дело с «основным потоком» процесса

Если погружаться в системные вызовы то:
- Вызов getpid() из любого процесса вернет его TGID (= PID "главного потока")
- Вызов gettid() из любого процесса вернет его PID
- Любой тип процесса (раздельные ресурсы, общие) может быть создан с помощью clone(2) системного вызова
- Что будет совместно использоваться процессами, решается путем передачи определенных флагов в вызов функции clone(2)

Директория `/proc`:
- имена папок в директории /proc - это Thread Group ID идентификаторы.
- имена папок в директории /proc/{SOME_TGID}/task - это PIDы потоков.

Вывод
С точки зрения ядра существуют только процессы, каждый из которых имеет свой собственный уникальный PID, а так называемый поток — это просто другой вид процесса (разделяющий, по крайней мере, одно и то же пространство памяти и обработчики сигналов с одним или несколькими другими).

Примечание: getpid() возвращает `TGID` вместо `PID` не просто так. Это сделано для совместимости c POSIX стандартом (потоки должны шарить между собой общий `PID`).
  • 🔥 23
  • 👍 4
  • ❤ 1
More from @careerunderhood
  1. Oct 14, 2026Приглашение на Platform Engineering Night Ребята привет! Я как человек делающий платформы…
  2. Oct 2, 2026Пока от темы Concurrency далеко не ушли. В последнем цикле я если и упоминал вопросы произ…
  3. Sep 30, 2026Результаты опроса меня впечатлили. Большинству интересны истории из работы. Поехали, начне…
  4. Sep 25, 2026Post #470
  5. Sep 21, 2026Concurrency, Synchronization and Consistency. Non-blocking. Оглавление Введение - Блокирую…
  6. Sep 21, 2026Concurrency and Consistency. Non-blocking, lock-free and async. Пост №12. Заключение. Когд…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →