Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
В чём разница между многопоточностью (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 без блокировки текущего потока.
Какой класс в asyncio используется для CPU-bound задач?
Для CPU-bound задач используйте loop.run_in_executor() с ThreadPoolExecutor или ProcessPoolExecutor. Сам asyncio не подходит для тяжёлых вычислений.
Приведи пример: как решить 10 CPU-bound и 10 IO-bound задач на Python?
Для CPU-bound задач используйте многопроцессность (модуль multiprocessing), чтобы обойти GIL и задействовать несколько ядер. Для IO-bound задач используйте многопоточность (модуль threading) или асинхронное программирование (модуль asyncio), чтобы эффективно ждать завершения операций ввода-вывода.
Что будет, если смешать асинхронный код с CPU-bound задачей?
Если смешать асинхронный код с CPU-bound задачей, это заблокирует event loop, потому что CPU-bound задача не отпускает управление и не дает event loop переключаться между задачами. Это приведет к снижению производительности и отзывчивости асинхронного приложения
Какие задачи относятся к I/O-bound и CPU-bound
I/O-bound задачи ограничены скоростью ввода-вывода: сеть, диск, база данных. CPU-bound задачи упираются в вычисления и загрузку процессора. Для I/O-bound задач хорошо подходит асинхронность и многопоточность, а для CPU-bound — распараллеливание по процессам. Неправильный выбор подхода приводит к потере производительности.
Почему многопоточность в Python обычно не ускоряет CPU-bound задачи?
Что произойдёт, если в event loop выполнить блокирующую CPU-bound операцию?
Почему CPU-bound задачи неэффективно распараллеливать потоками в Python?
Какие альтернативы существуют для выполнения CPU-bound задач?
Рейтинг:
5
Сложность:
6
Многопоточность в Python ограничена Global Interpreter Lock (GIL), который позволяет выполнять байткод только одному потоку одновременно. Поэтому CPU-bound задачи не получают реального параллелизма. Потоки полезны для IO-bound задач, где поток ожидает ввода-вывода. Для CPU-bound задач чаще используют multiprocessing.
Рейтинг:
5
Сложность:
6
Если в event loop выполнить блокирующую CPU-bound операцию, весь цикл событий остановится до её завершения. В это время другие корутины не будут выполняться, а запросы не будут обрабатываться. Это приводит к задержкам и падению производительности. Поэтому CPU-bound задачи выносят в отдельные процессы или executors.
Рейтинг:
5
Сложность:
7
CPU-bound — это задачи, где время уходит на вычисления, а не на ожидание ввода-вывода. В CPython есть GIL, который позволяет исполнять Python-код только одному потоку одновременно в пределах процесса. Поэтому несколько потоков чаще дают накладные расходы, но не прирост скорости. Потоки хорошо подходят для I/O-bound задач, где много ожидания сети или диска.
Рейтинг:
5
Сложность:
6
Для CPU-bound задач чаще всего используют несколько процессов вместо потоков. Также применяют нативные библиотеки, которые выполняют вычисления вне Python и освобождают GIL. В некоторых случаях задачи выносят в отдельные сервисы или очереди фоновых задач. Выбор зависит от объёма вычислений и архитектуры системы.
Рейтинг:
2
Сложность:
5
Рейтинг:
1
Сложность:
4
Рейтинг:
2
Сложность:
7
Рейтинг:
2
Сложность:
7
Рейтинг:
5
Сложность:
4