Привет, есть цикл, в теле которого выполняется сложное математическое вычисление. Чтобы не занимать главный поток, использую корутины, чтобы обеспечить работу в фоне. В зависимости от условий, цикл заканчивает свою работу за разное время от 0,5 до 30 секунд. Возможно ли, с помощью многопоточности, ускорить выполнение данного цикла? Или все будет упираться в производительность железа?
Очевидно, если задача параллелится, то её можно распараллелить на количество ядер, которые есть в наличии (Runtime.getRuntime().availableProcessors()
). Корутины вам тут помогут с тем, что вы запланируете разбиение, сложите в канал порции исходных данных, а после запустите нужное количество корутин на Dispatchers.Default, из которых заберёте порции и рассчитаете их. После чего с помощью async+awaitAll, к примеру, можно будет забрать результат.