Re[44]: Java vs C# vs C++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.10.15 16:02
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>Если точнее, ты отрицал и продолжаешь отрицать наличие проблем из за внедрения короутин.


EP>Ты отрицал что пример заработает, даже смотря на рабочий код, а потом что-то щёлкнуло и "ой".


Ты ври да не завирайся. Разговор был про две основных вещи
1 нереэнтерабельный код
2 эвентлуп

В _частном_ случае может работать и это всё что ты показал. То есть,
1 ты прибил логику гвоздями к эвентлупу, тот самый ресайз и тд и тд
2 в твоем коде не было нереэнтерабельного кода
Потому и работает

В общем случае ты вводишь в софтину ничем не ограниченую реэнтерабельность из за кооперативной многозадачности.
Объясняю в очередной раз
void нереэнтерабельнаяФункция() {
    var xOld = x;
    x = newX();
    ...
    stream.read(); // здесь будет переключение из за короутины 
                       // и где нибудь еще возможен повторый вызов нереэнтерабельнаяФункция()
    ...
    x = xOld();
}


Ну и про эвентлуп всё в силе — должен быть или явный вызов или возврат, в противном случае короутина может спокойно перекидывать управление туда-сюда минуя эвентлуп. Это же элементарно — вариант вида "бесконечный ping-pong" ровно ничем не отличается от "while(true){}". Всегда должен быть явный вызов продолжения основной нитки. Если бы ты не прибил гвоздями код к эвентлупу, увидел бы это самостоятельно.

I>>Отложеные — значит результат вернется не сейчас а в удобное время в будущем. То есть на ровном месте — задержка. Опаньки !

I>>По частям — значит мы не считаём всё, а берем небольшую порцию которой минимально хватат для продолжения. Опаньки !
I>>То есть, отсюда следует, что мы сознательно увеличиваем время выполнения цепочки на порядки.

EP>Ты думаешь о каком-то частном случае, и пытаешься распространить его свойства на другие.


Это и есть общий случай.

EP>Про время выполнения например это не верно например в случае бесконечных списков


Ровно наоборот, обрабатывать бесконечный список ленивым кодом элементарно.

EP>>>Например данные в обычном массиве — то есть Random Access. После применения фильтра-предиката можно получить bidirectional

I>> Это синтетика.
EP>Random Access это синтетика?

Ленивая работа с массивами это синтетика.

EP>>>Это дешёвая демагогия. Мол ты гриб, если хочешь оспорить — то докажи истинность ложного высказывания.

I>>Демагогия это когда ты хочешь ленивость на массиве делать. А вообще ленивость предназначена к использованию там, где
I>>1 нет возможности хранить всё в памяти, это основной случай- примерно 99% случаев — бд, фс, ос, сеть и тд и тд
I>>2 слишком долго считать весь объем, но данные легко влезают в память, — остальные 1% случаев, включая твою любимую синтетику

EP>В обоих случаях производительность важна, и это не вторичный показатель. Молодец, сам себе опроверг.


Алё — производительность вычисления одного кусочка не меняется. Производительность вычисления всей цепочки — дерградирует на порядки. Ради того и оптимизуется. Издержки ленивого кода в пересчете на одну порцию ничтожны. Пару виртуальных вызовов что бы получить следующую порцию данных.

А вот на синтетике вида "посчитаем сумму элементов массива ленивым способом" будет разница может и в 100 раз. Это ни о чем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.