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 ответов

30 просмотров

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта