Однопоточность (или синглтрединг) — это модель выполнения программы, при которой в каждый момент времени выполняется только один поток инструкций.
Основные характеристики:
- Последовательное выполнение: Код исполняется строка за строкой.
- Один стек вызовов: Функции вызываются и возвращают значения в рамках одного стека.
- Отсутствие параллелизма на уровне потоков: Нельзя одновременно выполнять разные части кода в разных потоках CPU в рамках одного процесса с одним GIL (Global Interpreter Lock) в CPython.
Преимущества:
- Простота: Легче писать и отлаживать однопоточный код, так как нет проблем синхронизации данных между потоками.
- Отсутствие состояния гонки: Поскольку доступ к общим ресурсам происходит из одного потока, нет риска одновременного изменения данных разными потоками.
Недостатки:
- Блокирующие операции: Длительные операции (например, ввод-вывод, сетевые запросы) блокируют выполнение всей программы до их завершения.
- Неэффективное использование многоядерных процессоров: Программа использует только одно ядро процессора.
- GUI-приложения могут зависать: Длительная операция в основном потоке заморозит пользовательский интерфейс.
Пример:
python
В данном примере task2 начнет выполняться только после того, как task1 полностью завершится, несмотря на то, что task1 "спит" 2 секунды.