Re[30]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 08:41
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>бОльшая часть мелочевки пишется на php, который почему то общепризнанно тормозной. если тормозной скрипт, то странно, почему это живет в вебе, ибо здесь казалось бы место для С++. А если тормозят модули, снова странно — мудули на С++ и тормозят


Тормозной если на нём считать — это я сам тестировал. Но в вебе мало считают, так что там производительность обычно вообще в базы данных упирается.

Но при определённых нагрузках уже и это перебор — смотри Facebook. )))
Re[29]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 09:20
Оценка: :)))
Здравствуйте, Ikemefula, Вы писали:

_>>Да, но несмотря на все эти красивости я бы всё равно не стал писать так — мне не нравится подобный стиль реализации многопоточности.

I>Правильно, потому что отстой, о чем я и говорю.

Да, да, согласен, весь этот await/async стиль — это отстой. )))

I>Ну тогда тебе не составит труда показать, чего же нельзя подстроить в C# и желательно что бы это было привязано к актуальной задача, а не выглядело навроде "а в конце метода я хочу что бы был код, который реально вызовется в начале"


А легко. Например мы можем сделать в одном обработчике несколько отдельных асинхронных вызовов. Или вообще в цикле погонять этот блок... Типа такого:

void handler(object& sender, TaskArgs& args)
{
    for(int i=0; i<5; i++){
        BEGIN_ASYNC
        HttpClient client;
        auto response=await_async(client.Get(args.Url+sufix[i], args.Cancellation));
        response.EnsureSuccessStatusCode();
        textBox[i].Text+=await_async(response.Content.ReadAsString());
        END_ASYNC
    }
}


Понятно что похожий код можно и в C# намутить, но это надо уже вставлять асинхронные лямбды и вызывать их... В общем код будет уже заметно пострашнее чем C++ выглядеть.

P.S. Но вообще мне нравится куда уже ушла наша дискуссия. Я вижу попытки доказать мне что реализация await/asynx в C# не хуже чем в C++. Это правильный подход... А то начали то с диких лозунгов что в C++ это вообще невозможно.
Re[29]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 09:24
Оценка: -1
Здравствуйте, Ikemefula, Вы писали:

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


Забавно. ))) Похоже у нас тут у кое-кого раздвоение личности... Например здесь http://www.rsdn.ru/forum/philosophy/5208835
Автор: Ikemefula
Дата: 23.06.13
некий Ikemefula как раз рассказывает нам об ужасах маршалинга. )))
Re[17]: Что посоветуете как аналог С++
От: vdimas Россия  
Дата: 25.06.13 09:28
Оценка:
Здравствуйте, IT, Вы писали:

IT>Это не тот ли самый случай из-за чего старый VB тормозил на операциях с памяться раз так в 200?


Нет, не тот. VB тормозил из-за передачи строк и Safe Array по значению при маршаллинге.
Re[30]: Что посоветуете как аналог С++
От: Sinix  
Дата: 25.06.13 10:17
Оценка:
Здравствуйте, alex_public, Вы писали:

_>А легко. Например мы можем сделать в одном обработчике несколько отдельных асинхронных вызовов. Или вообще в цикле погонять этот блок... Типа такого:


void handler(object& sender, TaskArgs& args)
{
    for(int i=0; i<5; i++){
        BEGIN_ASYNC
        HttpClient client;
        auto response=await_async(client.Get(args.Url+sufix[i], args.Cancellation));
        response.EnsureSuccessStatusCode();
        textBox[i].Text+=await_async(response.Content.ReadAsString());
        END_ASYNC
    }
}


_>Понятно что похожий код можно и в C# намутить, но это надо уже вставлять асинхронные лямбды и вызывать их... В общем код будет уже заметно пострашнее чем C++ выглядеть.


Да ладно

Первое что пришло в голову:
string[] urls = ...

var tasks = urls.ToList(url => httpClient.GetStringAsync(url));

while (tasks.Count > 0)
{
   var firstCompleted = await Task.WhenAny(tasks);
   tasks.Remove(firstCompleted);
   result.Text += firstCompleted.Result;
}


Хотя на rx/task.ContinueWith код поизящней будет.
Re[31]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 10:27
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Да ладно


S>Первое что пришло в голову:

S>
S>string[] urls = ...

S>var tasks = urls.ToList(url => httpClient.GetStringAsync(url));

S>while (tasks.Count > 0)
S>{
S>   var firstCompleted = await Task.WhenAny(tasks);
S>   tasks.Remove(firstCompleted);
S>   result.Text += firstCompleted.Result;
S>}
S>


S>Хотя на rx/task.ContinueWith код поизящней будет.


1. Там по два асинхронных вызова в каждом блоке с кодом в ui потоке между ними.
2. textbox результирующий свой для каждого блока.
Re[30]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 10:50
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>В винде любая такая софтина может нормально работать только как сервис. nginx на винде пока что ничем не блещет, потому что умеет только синхронные сокеты. И кстати говоря в планах асунуть его в сервис. Интересно, зачем, если и так всё шоколадно ?


_>А причём тут вообще винда и IIS? Вообще то подавляющее большинство веба живёт под разновидностями unix'a. Так что не надо кривых отмазок.

_>Ну и даже если говорить про винду (например в качестве машины разрабочика), то и nginx и apache тоже нормально работают без всяких сервисов.

Как бэ nginx на винде ничем не блещет , даже io cp не умеет.
Re[31]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 10:51
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Тормозной если на нём считать — это я сам тестировал. Но в вебе мало считают, так что там производительность обычно вообще в базы данных упирается.


То есть, ты хочешь сказать, что производительность не всегда упирается в процессор ?
Re[30]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 10:54
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Да, да, согласен, весь этот await/async стиль — это отстой. )))


У тебя только эмуляции, что и есть отстой

_>А легко. Например мы можем сделать в одном обработчике несколько отдельных асинхронных вызовов. Или вообще в цикле погонять этот блок... Типа такого:


_>
_>void handler(object& sender, TaskArgs& args)
_>{
_>    for(int i=0; i<5; i++){
_>        BEGIN_ASYNC
_>        HttpClient client;
_>        auto response=await_async(client.Get(args.Url+sufix[i], args.Cancellation));
_>        response.EnsureSuccessStatusCode();
_>        textBox[i].Text+=await_async(response.Content.ReadAsString());
_>        END_ASYNC
_>    }
_>}
_>


_>Понятно что похожий код можно и в C# намутить, но это надо уже вставлять асинхронные лямбды и вызывать их... В общем код будет уже заметно пострашнее чем C++ выглядеть.


И давно в C# запретили вставлять циклы в код ? Для твоего случая вообще ничего мутить не надо, работает искаропки Пробуй еще раз.

_>P.S. Но вообще мне нравится куда уже ушла наша дискуссия. Я вижу попытки доказать мне что реализация await/asynx в C# не хуже чем в C++. Это правильный подход... А то начали то с диких лозунгов что в C++ это вообще невозможно.


Ты пока что ничего не показал, если не считать "я бы всё равно не стал писать так".
Re[30]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 11:03
Оценка:
Здравствуйте, alex_public, Вы писали:

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


_>Забавно. ))) Похоже у нас тут у кое-кого раздвоение личности... Например здесь http://www.rsdn.ru/forum/philosophy/5208835
Автор: Ikemefula
Дата: 23.06.13
некий Ikemefula как раз рассказывает нам об ужасах маршалинга. )))


В обоих случаях сказано примерно одно и то же

"Если делать как ты предложил, придется маршалить весь контекст" == маршалинг, именно в твоей реализации
"не надо продумывать что там куда может маршалиться или не може" == маршалинг, именно в твоей реализации

То есть, в обоих случаях я хочу сказать, что маршалинг есть только благодаря твоему подходу, а раз так, то это отстой, потому что процесс у нас один и тот же. Благодаря поддержке компилера нет необходимости маршалить, нужно всего то подождать возврата управления.
Re[32]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 11:15
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>То есть, ты хочешь сказать, что производительность не всегда упирается в процессор ?


По разному бывает, в зависимости от задачи. Но если например переписать mysql на php то тогда точно без шансов будет упираться только в процессор.
Re[32]: Что посоветуете как аналог С++
От: Sinix  
Дата: 25.06.13 11:18
Оценка:
Здравствуйте, alex_public, Вы писали:

_>1. Там по два асинхронных вызова в каждом блоке с кодом в ui потоке между ними.

_>2. textbox результирующий свой для каждого блока.

А, тогда .ContinueWith()/Rx. Async в том виде как есть заточен под описание последовательности инструкций в continuation-passing-стиле. Сахара для распараллеливания сейчас практически нет.
Re[31]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 11:20
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>У тебя только эмуляции, что и есть отстой


Покажи разницу с C#.

I>И давно в C# запретили вставлять циклы в код ? Для твоего случая вообще ничего мутить не надо, работает искаропки Пробуй еще раз.


Покажи код. Если просто вставить в тот C# код цикл, больше ничего не меняя, то получится последовательный, а не параллельный запуск скачиваний.

I>Ты пока что ничего не показал, если не считать "я бы всё равно не стал писать так".


Я как раз показал все примеры кода, а от тебя пока вижу только болтовню и ни одной строчки кода. То что мне не нравится подобный стиль (что в C#, что в C++) — это только мой личный вкус. И он не мешает мне продемонстрировать реализацию этой схемы в C++, даже если я сам и не собираюсь её применять.
Re[32]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 11:24
Оценка:
Здравствуйте, alex_public, Вы писали:

S>>Хотя на rx/task.ContinueWith код поизящней будет.


_>1. Там по два асинхронных вызова в каждом блоке с кодом в ui потоке между ними.

_>2. textbox результирующий свой для каждого блока.

Это ничего не меняет, у тебя просто запускается 5 паралельных асинхронных тасков. Все, больше у тебя ничего нет, то есть, вообще. Куда и как ты складываешь результаты, сколько асинхронных вызовов, без разницы — все равно будет 5 параллельных асинхронных тасков.

Вот вещь поинтереснее твоего барахла:

var tasks = urls.Select(x => GetContentByUrlAsync(x)).AsTask().ToList();

while (tasks.Count > 0)
{
    var first = await Task.WhenAny(tasks);
    var result = await first;                    
    tasks.Remove(first);
    resultContainer += result; 
}
Re[33]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 11:25
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>То есть, ты хочешь сказать, что производительность не всегда упирается в процессор ?


_>По разному бывает, в зависимости от задачи. Но если например переписать mysql на php то тогда точно без шансов будет упираться только в процессор.


Как речь про дотнет, так все тормозное и только С++ может победить. А как про пхп — "По разному бывает, в зависимости от задачи"
Re[33]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 11:30
Оценка:
Здравствуйте, Sinix, Вы писали:

S>А, тогда .ContinueWith()/Rx. Async в том виде как есть заточен под описание последовательности инструкций в continuation-passing-стиле. Сахара для распараллеливания сейчас практически нет.


Вот весь сахар для распараллеливания

ProcessAsync();
ProcessAsync();
ProcessAsync();
ProcessAsync();


Вуаля — 4 таска стартовали параллельно
Re[32]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 25.06.13 11:31
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>У тебя только эмуляции, что и есть отстой


_>Покажи разницу с C#.


В прошлый раз я все что нужно показал, в твоем новом примере только строчек больше.

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


http://www.rsdn.ru/forum/philosophy/5211036.1
Автор: Ikemefula
Дата: 25.06.13


I>>Ты пока что ничего не показал, если не считать "я бы всё равно не стал писать так".


_>Я как раз показал все примеры кода, а от тебя пока вижу только болтовню и ни одной строчки кода.


Ля-ля-ля

> То что мне не нравится подобный стиль (что в C#, что в C++) — это только мой личный вкус. И он не мешает мне продемонстрировать реализацию этой схемы в C++, даже если я сам и не собираюсь её применять.


Ты лучше покажи ту схему, которую собираешься применять.
Re[34]: Что посоветуете как аналог С++
От: Sinix  
Дата: 25.06.13 11:50
Оценка:
Здравствуйте, Ikemefula, Вы писали:

ProcessAsync();
ProcessAsync();
ProcessAsync();
ProcessAsync();


I>Вуаля — 4 таска стартовали параллельно


Ещё неплохо бы дождаться завершения и скинуть результаты каждого из методов в свою переменную по мере завершения, как в примере с BEGIN_ASYNC и тогда сравнивать читаемость кода. Напомню, alex_public просил без явных лямбд/отдельных методов.
Re[33]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 11:57
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

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


Ты нигде ничего не показал, а только уворачиваешься от ответа всеми возможными способами. И меня это уже если честно утомило. Или ответь один раз точно на конкретные вопросы или будем считать что ты слил по всем пунктам.

1. Покажи чем принципиально этот http://www.rsdn.ru/forum/philosophy/5208679
Автор: gandjustas
Дата: 23.06.13
код отличается от этого http://www.rsdn.ru/forum/philosophy/5210481
Автор: alex_public
Дата: 25.06.13
. Это же ведь ты утверждал они чем-то принципиально отличаются (как там, эмуляция кажется?)...

2. Покажи точный аналог на C# этого http://www.rsdn.ru/forum/philosophy/5210899
Автор: alex_public
Дата: 25.06.13
кода. И поясни почему он на твой взгляд выглядит не хуже C++ варианта (ты же это утверждал, не так ли?).
Re[33]: Что посоветуете как аналог С++
От: alex_public  
Дата: 25.06.13 12:04
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Это ничего не меняет, у тебя просто запускается 5 паралельных асинхронных тасков. Все, больше у тебя ничего нет, то есть, вообще. Куда и как ты складываешь результаты, сколько асинхронных вызовов, без разницы — все равно будет 5 параллельных асинхронных тасков.


Ну да, так и есть. Только вот ты почему-то упорно не хочешь показать код...

I>Вот вещь поинтереснее твоего барахла:


I>
I>var tasks = urls.Select(x => GetContentByUrlAsync(x)).AsTask().ToList();

I>while (tasks.Count > 0)
I>{
I>    var first = await Task.WhenAny(tasks);
I>    var result = await first;                    
I>    tasks.Remove(first);
I>    resultContainer += result; 
I>}
I>



И что тут интересного? ) Это мы типа так длинно записали следующий код?
for(auto url: urls)
BEGIN_ASYNC
    resultContainer+=await_async(GetContentByUrl(url));
END_ASYNC


Забавно, забавно....
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.