Здравствуйте, vdimas, Вы писали:
I>> Это не плюс, это собственно "по определению".
V>Это просто инструмент, которым можно вот этот конкретный сценарий, совпадающий с путем распространения ошибки "по-умолчанию", решить задешево. Но в реальной жизни приходится пути распространения ошибок корректировать.
Это одно и то же.
I>>Выполнение асинхронного кода идет кусочками, соответсвенно связь между цепочками это основной поток(flow) вычисления + поток(flow) ошибок. Т.е. ровно то же, что и унутре каждой цепочки.
V>Это можно сказать и про синхронный код, про каждый вызов АПИ ОС. Не в этом дело.
Именно в этом. Синхронный код поддерживается синтаксисом ЯП. Вот для асинхронного кода ничего такого нет в мейнстриме.
I>>Собственно отсюда и растут проблемы с глобальным состоянием.
V>Если честно, я плохо понимаю, откуда ты постоянно берешь своё "глобальное состояние".
Уже просто любая глобальная переменная уже показывает все проблемы.
I>>Вот, например
I>>I>>var x = readFile('path')
I>>var i = readGlobalState(x);
I>>var y = ajaxPost(x);
I>>writeGlobalState(i);
I>>return toJson(y);
I>>
V>Тебе уже сотни раз рекомендовалось поинтересоваться, что есть "гонки". Ты называешь этим термином нечто, что уже 3-й год весь форум не в состоянии идентифицировать.
"Недетерминированный порядок исполнения двух задач"
Если непонятно — можешь рассматривать код выше как небольшой фрагмент применения зеленых потоков. Разницы абсолютно никакой. Все проблемы абсолютно одинаковы.
V>Например, даже любимый твой Майкрософт в доках пишет, что кооперативная многозадачность позволяется избегать лишних гонок и лишних же блокировок. Но у тебя как был затык в понимании "гонок", так и не рассосался до сих пор. И ведь не страшно же тебе на весь интернет так подставляться, не? )) С работы не уволят, случаем? ))
Микрософт говорит совсем про другое. См пример выше. Этот код задачи, таких в джаваскрипте можно запустить хоть тысячу за раз. Все они будут работать в одном потоке по правилам кооперативной многозадачности. Собтсвенно, ровно ничем не отличается от зеленых потоков.
Отсюда получаем тот самый "недетерминированый порядок"
I>>Агенты строятся исключительно за счет изолирования состояния.
V>Потеки сознания.
V>А инкапсуляция состояния в обычных объектах — без изолирования? ))
Именно. Если твой объект используется из разных задач, что будет ? Если класс инкапсулирует всего лишь указатель на разделяемый ресурс ?
Инкапсуляция — во весь рост, изоляции — ноль.
I>>then это всего лишь связывание цепочек
V>Наоборот — для разрывания последовательных операций
V>Берем некий изначально "непрерывный" алгоритм, режем этот алгоритм на куски с помощью then (в дотнете Task.ContinueWith, которое генерит компилятор на месте await).
Это не разрезание, а связывание. Задача состоит из кусков, которые, возможно, выполняются в разных потоках, или, например, задача прибита к эвентлупу.
V>И все это с единственной целью — уйти от вытесняющей ядерной многозадачности в сторону кооперативной юзверской.
У тебя должен быть хороший ответ — как 1000 зеленых потоков смогут корректно работать с глобальным состоянием.