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

Скажите пж, правильно ли я понимаю механизм работы async/await? В асинхронной

функции всегда выполняется какая-то io-bound операция, не требующая процессорного времени. Когда мы await-им эту операцию, то поток, в котором наша функция выполнялась, отдаётся thread pool-у, чтобы тот применил его для чего-то более полезного. Потом та операция завершается, происходит прерывание, говорящее thread pool-у вернуть этот поток нашей асинхронной функции, после чего её выполнение продолжается.
Слова async await не создают дополнительных потоков, а просто рационально используют текущий.
И с cpu-bound операциями асинхронность не имеет смысла. Всё верно?

26 ответов

14 просмотров

Выполнение продолжится на любом потоке из пула, не обязательно на том, на котором стартовало

Неправильно

Я люблю котиков- Автор вопроса

В целом направление мысли +- верное. Но есть много нюансов.

Я люблю котиков
В этом единственная ошибка?

нет, в принципе построение неверное

Не в этом дело. Проблема в том, что CPU/IO-Bound и прочие тяжёлые или тормозные операции вызывают блокировку основого потока, и программа перестаёт быть отзывчивой. Чтобы это избежать и не блокировать основной поток, были придуманы асинхронные методы/функции, когда основной поток освобождается под другие нужды, а под тормозную операцию выделяется (не всегда) поток из ThreadPool'а. До оператора await код идёт синхронно, если что, а async, по сути, просто аттрибут для комилятора, чтобы дать методу поддержку асинхронных операций.

Я люблю котиков- Автор вопроса
Кирилл 😏
Не в этом дело. Проблема в том, что CPU/IO-Bound и...

То есть CLR сам может определить, требует ли операция процессорного времени, и при необходимости выделить под неё поток?

Поток не обязательно идет в пул. Будет ли выполнено на том же потоке или нет, зависит от контекста синхронизации. Там не только IO bound может быть, сам по себе Task, абстракция над задачей, а задача, может быть какой угодно

Я люблю котиков
То есть CLR сам может определить, требует ли опера...

Да. Если таска простоит больше времени, чем ей выделилось, то для неё выделится поток из ThreadPool'а. Пусть помидоры поправят ньансы.

Я люблю котиков- Автор вопроса
Phantom
Нет, CLR ничего не определяет

Тогда это делает компилятор?

Я люблю котиков
То есть CLR сам может определить, требует ли опера...

Все зависит от реализации метода, который ты вызываешь

Phantom
Поправляю, ты не прав

Конкретно. Механизм очередей и времени на исполнение тасок точно есть. Тогда что не так? 🤔

Кирилл 😏
Конкретно. Механизм очередей и времени на исполнен...

Ну ты сказал неправильные вещи, я и поправил🤷‍♂

Кирилл 😏
Конкретно. Механизм очередей и времени на исполнен...

Расскажи тогда пожалуйста, как тредпул менеджит время на исполнение таски, пожалуйста. Вот отправил ты свой делегат (таску) в очередь на тредпул. И что дальше?

Anton 『被遗忘的社会』
Расскажи тогда пожалуйста, как тредпул менеджит вр...

Тебе я точно ничего не расскажу. У тебя ToArray - это динамический масив. На этом всё 🤔

Anton 『被遗忘的社会』
ToArray это метод

Метод, который в твоём мирке, материализуется в динамический , а не статический, чья длина фиксирована 🤔. Может ничего не писать. С тобой ясно всё.

Кирилл 😏
Метод, который в твоём мирке, материализуется в ди...

Чел, иди посмотри что такое динамический и статический массив

Кирилл 😏
Метод, который в твоём мирке, материализуется в ди...

Длина статического массива должна быть известна во время компиляции

Phantom
Длина статического массива должна быть известна во...

Подожди var n = readint() var arr= new int[n]; Это динамический массив?

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

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

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
Есть сайт. Там была древняя версия эво. Стоял плагин, который каждый коммент в Jot делал отдельной страницей. После обновления все слетело, теперь старница открывается отдельн...
Artem
1
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
Добрый день. А shovel'ы можно как-то сконфигурировать в definitions.json? Пробовал что-то вроде: { "users": [ { "name": "agent", "password_hash": "RBCbTzQd...
Aleksey
1
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Карта сайта