Можно ли запустить большое количество сопрограмм параллельно с тяжелой работой?
Да, можно. Coroutines
действительно легкие. Фактически, многие примеры сопрограмм показывают, что вы можете запускать тысячи сопрограмм одновременно.
Могу ли я сделать For l oop и запустить сопрограмму для каждого объекта за один раз?
Да, вы можете. Хотя я не знаю, насколько это было бы эффективно.
Как Coroutine может обрабатывать большое количество параллельных заданий?
Подпрограммы имеют понятие Dispatchers
, которое разрешить настройку потоков.
Если памяти слишком мало, Coroutine будет ждать перед запуском другой Coroutine?
Скорины ведут себя как легковесные Threads
, поэтому управление памятью вам решать. Я не знаю о встроенном механизме, который препятствовал бы запуску сопрограммы, если системе не хватает памяти. Опять же, сопрограммы легкие, поэтому, если вы не можете запустить сопрограмму, возможно, что-то происходит не так.
Лучше ограничить сопрограммы, например, с помощью newFixedThreadPoolContext?
Используя newFixedThreadPoolContext
, вы не ограничиваете количество сопрограмм, которые вы можете запустить. Вы просто вводите ограничение на ThreadPool
, которое будет создано для запуска сопрограммы. Также из newFixedThreadPoolContext
документов обратите внимание, что он будет заменен в будущем.