Re[13]: Почему Эрланг
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.06.15 08:04
Оценка:
Здравствуйте, 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 зеленых потоков смогут корректно работать с глобальным состоянием.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.