Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Процессы и потоки

Все темы C++ Developer

Что вам известно о многопоточности?

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

Основные понятия:

  1. Поток (Thread): Лёгкий процесс внутри программы, который может выполняться параллельно с другими потоками.

  2. Создание потоков:

    • В C++ можно использовать библиотеку <thread>.
    #include <thread>
    void func() { /* ... */ }
    int main() {
        std::thread t(func);
        t.join();  // Ожидание завершения потока
    }
  3. Синхронизация:

    • Необходима для корректного доступа к общим данным.

    • Используются механизмы синхронизации, такие как мьютексы (std::mutex), условные переменные (std::condition_variable), атомарные операции (std::atomic).

    #include <mutex>
    std::mutex mtx;
    void threadFunc() {
        std::lock_guard<std::mutex> lock(mtx);
        // Защищённый доступ к данным
    }
  4. Гонки данных:

    • Возникают при конфликтующих обращениях к одной области памяти без нужного happens-before, когда хотя бы одно обращение неатомарно и хотя бы одно изменяет данные. Гонка данных в C++ приводит к неопределённому поведению. Одновременные чтения сами по себе не являются гонкой.
  5. Параллелизм и конкурентность:

    • Параллелизм: Одновременное выполнение потоков на разных ядрах процессора.

    • Конкурентность: Продвижение нескольких задач в перекрывающиеся промежутки времени. Задачи могут чередоваться на одном ядре или выполняться параллельно на нескольких.

Применение:

  • Улучшение производительности за счёт параллельного выполнения задач.

  • Реализация асинхронных операций и обработка ввода-вывода.

  • Обработка данных в реальном времени.


Что общего и отличного в процессах и потоках?

Между процессами и потоками есть сходства и отличия:

Общее:

  1. Выполнение: Оба являются единицами выполнения кода.

  2. Параллелизм: Оба могут выполняться параллельно для повышения производительности.

Отличия:

  1. Изоляция:

    • Процессы: Изолированы друг от друга, имеют собственную память.

    • Потоки: Разделяют память и ресурсы одного процесса.

  2. Создание:

    • Процессы: Создание нового процесса требует значительных системных ресурсов.

    • Потоки: Создание потоков менее затратное и быстрее.

  3. Контекст переключения:

    • Процессы: Переключение контекста между процессами более дорогое.

    • Потоки: Переключение контекста между потоками быстрее и менее затратное.

  4. Взаимодействие:

    • Процессы: Используют межпроцессное взаимодействие (IPC) для обмена данными (сокеты, очереди сообщений, shared memory).

    • Потоки: Могут общаться напрямую через общую память, что требует синхронизации.

Пример:

  • Процесс: Программа, запущенная на компьютере (например, веб-браузер).

  • Поток: Легковесные задачи внутри процесса (например, рендеринг страницы, обработка ввода пользователя).

Эта страница была полезной?