Перейти к содержимому
На этой странице

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

Все темы 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).

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

Пример:

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

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

Собеседования: C++

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: C++-разработчик, Разработчик системного ПО. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.