Специализация
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 в телеграм
Worker threads - профиты. Что происходит при передачи данных в worker thread. Хорошо ли ведут себя на I/O операциях
Worker Threads позволяют выполнять CPU-интенсивные задачи без блокировки основного потока. Данные передаются через копирование или SharedArrayBuffer. Для I/O операций лучше использовать асинхронные методы, так как Worker Threads оптимизированы для вычислений.
Какие задачи относятся к I/O-bound и CPU-bound
I/O-bound задачи ограничены скоростью ввода-вывода: сеть, диск, база данных. CPU-bound задачи упираются в вычисления и загрузку процессора. Для I/O-bound задач хорошо подходит асинхронность и многопоточность, а для CPU-bound — распараллеливание по процессам. Неправильный выбор подхода приводит к потере производительности.
Что происходит с goroutine при блокирующих операциях (каналы, mutex, I/O)?
Когда goroutine выполняет блокирующую операцию, она не блокирует поток целиком. Runtime переводит goroutine в состояние ожидания и может запустить другую goroutine на том же потоке. Когда операция завершается, goroutine возвращается в очередь выполнения. Это позволяет эффективно использовать ресурсы.
В каких случаях backend-сервису требуется асинхронная обработка запросов при большом количестве I/O-операций?
Асинхронность нужна, когда сервис много времени ждёт: сеть, диск, база, очереди, сторонние API. В синхронной модели поток часто простаивает, потому что блокируется на I/O. В асинхронной модели во время ожидания можно обслуживать другие запросы в том же потоке. Это особенно полезно при большом количестве одновременных соединений и короткой CPU-работе. Если же основная нагрузка — вычисления, асинхронность почти не помогает.
Что происходит при выполнении I/O-операций в многопоточном приложении?
При выполнении I/O-операции поток обычно блокируется и освобождает GIL. В это время другой поток может выполняться. Когда операция завершается, поток снова пытается захватить GIL и продолжить работу. Это позволяет потокам перекрывать ожидание I/O.
Рейтинг:
2
Сложность:
6
Рейтинг:
5
Сложность:
4
Рейтинг:
5
Сложность:
5
Рейтинг:
5
Сложность:
6
Рейтинг:
4
Сложность:
6