169 похожих чатов

Здравствуйте. Есть большой вопрос. Снова дошли руки попытаться запустить много корутин

одновременно, но, кажется, что-то пошло не так.
urls - просто массив из 10 url'ов на разные страницы Википедии.
Код такой:
fun main() = runBlocking {
println("Пробуем Channel'ы")
var date = Date().time
val tryCahannel = Channel<String>()
launch {
println("Какое-то действие")
val ktd = Date().time
for (i in urls) tryCahannel.send(i)
println("Время какого-то действия ${Date().time - ktd}ms")
}

println("Удивительно, но этот код выполнился")

repeat(urls.size) {
val resp = client.get<String>(tryCahannel.receive())
println(if (resp.contains("<!DOCTYPE html>")) "HTML-страничка пошла!" else "Это не HTML-страничка")
}

println("Общее время: ${Date().time - date}ms")
println("Вот и Channel'ам конец\n\n")

println("А теперь простая последовательная отправка запросов")
date = Date().time
commonRequests()
println("Общее время: ${Date().time - date}ms")
}

Результат дает такой:
Пробуем Channel'ы
Удивительно, но этот код выполнился
Какое-то действие
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
Время какого-то действия 5826ms
HTML-страничка пошла!
Общее время: 7344ms
Вот и Channel'ам конец


А теперь простая последовательная отправка запросов
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
HTML-страничка пошла!
Общее время: 7264ms

Process finished with exit code 0

Собственно, не могу понять почему время исполнения увеличилось. Ради его сокращение все и писалось.
Это я что-то сделал не так и запустил запросы все же последовательно? Или в принципе такое взаимодействие не может быть быстрее?

1 ответов

13 просмотров

Тут одна корутина - launch. А вам нужно просто загрузить страницу ? val scope = ... urls.map { url -> scope.async { load(url) }.awaitAll()

Похожие вопросы

Обсуждают сегодня

тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
читать файл максимально быстро? странный вопрос))
zamtmn
53
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
значить например он учился в СДУ то получается он особенный?)
Asets Serikov
11
А кто такой мужчина в твоем понимании Азиз?
who?です 🐈
11
Карта сайта