4.05. Процессы и потоки
Процессы и потоки
Ранее мы рассмотрели, что такое процессы и потоки. Сейчас немного углубимся в их управление. Это важно!
★ Процесс – это экземпляр запущенной программы. У каждого процесса есть собственное адресное пространство (память), файловые дескрипторы и системные ресурсы.
★ Поток – это единица выполнения внутри процесса. Все потоки одного процесса разделяют общее адресное пространство.
Программа, работающая в одном потоке, выполняется последовательно, без параллелизма. То есть, программа выполняет одно действие за другим. Представим, что у нас есть задача обработать большой массив данных: прочитать данные, преобразовать их, выполнить вычисления, снова преобразовать и вывести результат. Однопоточная программа выполнит это так:
Единый поток:
Прочитать - преобразовать - вычислить - преобразовать - вывести на экран.
Многопоточные же программы могут выполнять несколько задач одновременно:
Поток 1 : Читает данные из файла.
Поток 2 : Преобразует данные, которые уже прочитаны Потоком 1.
Поток 3 : Выполняет вычисления на основе преобразованных данных.
Поток 4 : Преобразует результаты вычислений в конечный формат.
Поток 5 : Выводит результаты на экран или записывает их в файл.
Потоки работают одновременно, но координируют свои действия через общую память. Например, Поток 2 начинает преобразование только после того, как Поток 1 завершил чтение очередной порции данных. Если один поток ждёт (например, Поток 1 ждёт чтения данных с диска), другие потоки продолжают работу.
Многопроцессорные программы создают несколько процессов, каждый из которых работает независимо. Они не разделяют память, что делает их более безопасными, но усложняет обмен данными. Здесь каждый процесс выполняется независимо.
Та же задача - обработка большого массива данных, но теперь каждый процесс выполняет свою часть работы независимо:
Процесс 1 : Читает данные из файла и передает их в очередь или файл.
Процесс 2 : Преобразует данные, полученные от Процесса 1, и сохраняет результат в другую очередь или файл.
Процесс 3 : Выполняет вычисления на основе преобразованных данных.
Процесс 4 : Преобразует результаты вычислений в конечный формат.
Процесс 5 : Выводит результаты на экран или записывает их в файл.
Каждый процесс работает независимо и не разделяет память с другими процессами. Для обмена данными между процессами используются механизмы, такие как очереди, файлы или сокеты. Например, Процесс 1 записывает данные в файл, а Процесс 2 читает их оттуда.

Разница между процессом и потоком:
| Аспект | Процесс | Поток |
|---|---|---|
| Адресное пространство | У каждого процесса свое адресное пространство (память). | Все потоки одного процесса разделяют общее адресное пространство. |
| Обмен данными | Обмен данными между процессами сложнее (через файлы, сокеты, очереди). | Обмен данными между потоками проще (через общую память). |
| Безопасность | Более безопасны, так как процессы изолированы друг от друга. | Менее безопасны, так как общая память может привести к гонкам данных. |
| Создание/уничтожение | Создание и уничтожение процессов дороже (затраты на ресурсы). | Создание и уничтожение потоков дешевле. |
| Параллелизм | Может выполняться на разных процессорах (истинный параллелизм). | Может выполняться параллельно на одном процессоре (через переключение). |
Потоки – это легковесные единицы выполнения внутри процесса. Они разделяют общую память, что позволяет им быстро обмениваться данными. Операционная система управляет потоками, переключая их между задачами (контекстное переключение).