предисловие
Процесс (process) и поток (thread) — основные понятия операционной системы, но они относительно абстрактны и непросты для понимания.
Недавно я прочитал материал и обнаружил, что есть хорошая аналогия, чтобы объяснить их ясно и легко.
1.
Сердцем компьютера является центральный процессор, который выполняет все вычислительные задачи. Это как фабрика, работающая все время.
2.
Предположим, что фабрика имеет ограниченную мощность и может одновременно использоваться только одной мастерской. То есть, когда начинается один семинар, все остальные должны останавливаться. Подразумевается, что один ЦП может одновременно выполнять только одну задачу.
3.
Процесс подобен заводскому цеху, он представляет собой единственную задачу, с которой может справиться ЦП. В любой момент ЦП всегда работает один процесс, а другие процессы находятся в неработающем состоянии.
4.
В мастерской может быть много рабочих. Они работают вместе, чтобы выполнить задание.
5.
Потоки похожи на рабочих в мастерской. Процесс может содержать несколько потоков.
6.
Пространство мастерской совместно используется рабочими, например, многие помещения доступны каждому рабочему. Это означает, что пространство памяти процесса является общим, и каждый поток может использовать эту общую память.
7.
Однако размер каждой комнаты разный, и в некоторых комнатах может разместиться не более одного человека, например, в туалетах. Когда внутри есть люди, никто другой не может войти. Это означает, что когда поток использует часть общей памяти, другие потоки должны дождаться его завершения, прежде чем использовать этот участок памяти.
8.
Простой способ предотвратить проникновение посторонних — установить на дверь замок. Человек, который приходит первым, запирает дверь, а человек, который приходит позже, видит, что она заперта, и выстраивается в очередь у двери, ожидая, пока замок откроется, прежде чем войти. Это называется «взаимное исключение» (Mutual exclusion, сокращенно Mutex), которое предотвращает одновременное чтение и запись области памяти несколькими потоками.
9.
Также есть комнаты, в которых могут одновременно разместиться n человек, например, кухня. То есть, если количество людей больше n, лишние люди могут ждать только снаружи. Это как некоторая область памяти, которая может использоваться только фиксированным числом потоков.
10.
Решение на данный момент — повесить n ключей у двери. Те, кто входит, берут ключ, а когда выходят, то вешают ключ обратно на то же место. Те, кто пришел позже, обнаружили, что ключ пуст, и знали, что им придется ждать в очереди у двери. Эта практика называется «семафор» (Semaphore) и используется для обеспечения того, чтобы несколько потоков не конфликтовали друг с другом.
Нетрудно заметить, что мьютекс — это частный случай семафора (при n=1). Другими словами, первое может быть полностью заменено вторым. Однако, поскольку мьютекс относительно прост и эффективен, эта схема все же применяется, когда необходимо гарантировать эксклюзивный ресурс.
11.
Таким образом, дизайн операционной системы можно свести к трем пунктам:
(1) В форме многопроцессорности несколько задач могут выполняться одновременно;
(2) В форме многопоточности одну задачу можно разделить на разные части для выполнения;
(3) Обеспечить механизм координации для предотвращения конфликтов между процессами и потоками, с одной стороны, и разрешить совместное использование ресурсов между процессами и потоками, с другой стороны.
Наконец
Прошу всех обратить внимание на мой паблик [Программист в погоне за ветром], в нем будут обновляться статьи, а также размещаться отсортированная информация.