Ответ
Иллюзия многопоточности — это модель, при которой однопоточное приложение создаёт видимость параллельного выполнения нескольких задач. Это достигается за счёт кооперативной многозадачности: задача добровольно отдаёт управление (например, после обработки порции работы), позволяя планировщику переключиться на другую задачу в том же потоке.
Классический пример в C++ — цикл обработки событий (event loop):
// Упрощенная модель, используемая в UI-фреймворках (например, Qt) или сетевых циклах.
void eventLoop() {
while (isRunning) {
// 1. Обработать все накопившиеся события UI (клики, нажатия клавиш).
processPendingUIEvents();
// 2. Выполнить кусок длительной фоновой задачи (рендеринг, вычисления).
if (!backgroundTask.isFinished()) {
backgroundTask.doChunkOfWork();
}
// 3. Небольшая пауза или ожидание новых событий.
std::this_thread::sleep_for(std::chrono::milliseconds(10));
// Пользователь видит "одновременную" отзывчивость UI и прогресс фоновой задачи.
}
}
Ключевые ограничения и современные альтернативы:
- Нет реального параллелизма: Долгая операция в
doChunkOfWork()заблокирует весь цикл, и интерфейс «зависнет». - Современный подход — асинхронность: Использование асинхронных операций ввода-вывода с коллбеками (например, Boost.Asio) или сопрограмм (
std::async,std::future, корутины C++20). Это позволяет потоку не блокироваться на ожидании I/O, продолжая обрабатывать другие задачи. - Истинная многопоточность: Для реального использования нескольких ядер CPU необходимо создавать потоки (
std::thread) или использовать пулы потоков.