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