Процессы и потоки
Что вам известно о многопоточности?
Многопоточность — это возможность выполнения нескольких потоков одновременно в одном процессе, позволяющая более эффективно использовать ресурсы процессора и улучшить производительность приложений.
Основные понятия:
-
Поток (Thread): Лёгкий процесс внутри программы, который может выполняться параллельно с другими потоками.
-
Создание потоков:
- В C++ можно использовать библиотеку
<thread>.
#include <thread> void func() { /* ... */ } int main() { std::thread t(func); t.join(); // Ожидание завершения потока } - В C++ можно использовать библиотеку
-
Синхронизация:
-
Необходима для корректного доступа к общим данным.
-
Используются механизмы синхронизации, такие как мьютексы (
std::mutex), условные переменные (std::condition_variable), атомарные операции (std::atomic).
#include <mutex> std::mutex mtx; void threadFunc() { std::lock_guard<std::mutex> lock(mtx); // Защищённый доступ к данным } -
-
Гонки данных:
- Возникают при конфликтующих обращениях к одной области памяти без нужного happens-before, когда хотя бы одно обращение неатомарно и хотя бы одно изменяет данные. Гонка данных в C++ приводит к неопределённому поведению. Одновременные чтения сами по себе не являются гонкой.
-
Параллелизм и конкурентность:
-
Параллелизм: Одновременное выполнение потоков на разных ядрах процессора.
-
Конкурентность: Продвижение нескольких задач в перекрывающиеся промежутки времени. Задачи могут чередоваться на одном ядре или выполняться параллельно на нескольких.
-
Применение:
-
Улучшение производительности за счёт параллельного выполнения задач.
-
Реализация асинхронных операций и обработка ввода-вывода.
-
Обработка данных в реальном времени.
Что общего и отличного в процессах и потоках?
Между процессами и потоками есть сходства и отличия:
Общее:
-
Выполнение: Оба являются единицами выполнения кода.
-
Параллелизм: Оба могут выполняться параллельно для повышения производительности.
Отличия:
-
Изоляция:
-
Процессы: Изолированы друг от друга, имеют собственную память.
-
Потоки: Разделяют память и ресурсы одного процесса.
-
-
Создание:
-
Процессы: Создание нового процесса требует значительных системных ресурсов.
-
Потоки: Создание потоков менее затратное и быстрее.
-
-
Контекст переключения:
-
Процессы: Переключение контекста между процессами более дорогое.
-
Потоки: Переключение контекста между потоками быстрее и менее затратное.
-
-
Взаимодействие:
-
Процессы: Используют межпроцессное взаимодействие (IPC) для обмена данными (сокеты, очереди сообщений, shared memory).
-
Потоки: Могут общаться напрямую через общую память, что требует синхронизации.
-
Пример:
-
Процесс: Программа, запущенная на компьютере (например, веб-браузер).
-
Поток: Легковесные задачи внутри процесса (например, рендеринг страницы, обработка ввода пользователя).