Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про C#: cpu, bound io, async, await

В чём разница между многопоточностью (CPU-bound) и асинхронностью (IO-bound) в .NET и как работают async/await?

Проверяет понимание моделей параллельности и неблокирующего ввода-вывода.

Короткий ответ

CPU-bound задачи используют потоки и Parallel/Tasks для распределения вычислений между ядрами и могут потребовать lock/SemaphoreSlim. IO-bound операции (await httpClient.GetAsync) не блокируют поток — метод возвращает Task, освобождая поток для других задач, а по завершении I/O продолжает выполнение в пуле. async/await трансформирует метод в state machine, которая при встрече await регистрирует продолжение и возвращает Task без блокировки текущего потока.

Длинный ответ

CPU-bound:

  • Интенсивные вычисления, используют Parallel.For, Task.Run, многопоточность.

  • Требуют синхронизации для разделяемых данных (lock, Monitor, SemaphoreSlim).

IO-bound:

  • Сеть, файлы, БД — async операции возвращают Task и не держат поток занятым.

  • Поток используется для других задач пока ждёт I/O.

Как async/await работает:

  • Компилятор генерирует машину состояний: при await метод сохраняет контекст и выходит, возвращая Task.

  • По завершении awaited Task продолжение помещается в пул потоков или в SynchronizationContext.

Вывод:

IO-bound лучше писать асинхронно, CPU-bound — параллельно на несколько потоков.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • C#

    C#

Ключевые слова

#cpu

#bound io

#async

#await

Подпишись на C# Developer в телеграм