У меня был список, и я хочу выполнить 1 тяжелую задачу со всеми элементами с минимальным временем выполнения. Мое решение - создать ряд сопрограмм, которые равны элементам в списке с диспетчером по умолчанию.
Пример:
list.map {
async {
// do heavy task
}
}.awaitAll()
Предположим, что у меня есть карта с 500 элементами, и на моем устройстве есть максимум 4 потока, которые могут параллельно выполнять максимум 4 тяжелых задачи. Насколько я понимаю, 4 потока будут выполнять 4 задачи параллельно, когда один поток будет выполнен, одна задача будет выделена этому потоку и запущена. Другое решение — создать 4 сопрограммы для 4 потоков и последовательно выполнить 125 задач на поток. Каждый поток запускается последовательно, поэтому он ограничивает несколько раз, чтобы распределить задачу по потокам. Поэтому это быстрее, чем мое решение. Это правильно? Если нет, то какое лучшее решение?