Здравствуйте, Ikemefula, Вы писали:
I>бОльшая часть мелочевки пишется на php, который почему то общепризнанно тормозной. если тормозной скрипт, то странно, почему это живет в вебе, ибо здесь казалось бы место для С++. А если тормозят модули, снова странно — мудули на С++ и тормозят
Тормозной если на нём считать — это я сам тестировал. Но в вебе мало считают, так что там производительность обычно вообще в базы данных упирается.
Но при определённых нагрузках уже и это перебор — смотри Facebook. )))
Здравствуйте, Ikemefula, Вы писали:
_>>Да, но несмотря на все эти красивости я бы всё равно не стал писать так — мне не нравится подобный стиль реализации многопоточности. I>Правильно, потому что отстой, о чем я и говорю.
Да, да, согласен, весь этот await/async стиль — это отстой. )))
I>Ну тогда тебе не составит труда показать, чего же нельзя подстроить в C# и желательно что бы это было привязано к актуальной задача, а не выглядело навроде "а в конце метода я хочу что бы был код, который реально вызовется в начале"
А легко. Например мы можем сделать в одном обработчике несколько отдельных асинхронных вызовов. Или вообще в цикле погонять этот блок... Типа такого:
Понятно что похожий код можно и в C# намутить, но это надо уже вставлять асинхронные лямбды и вызывать их... В общем код будет уже заметно пострашнее чем C++ выглядеть.
P.S. Но вообще мне нравится куда уже ушла наша дискуссия. Я вижу попытки доказать мне что реализация await/asynx в C# не хуже чем в C++. Это правильный подход... А то начали то с диких лозунгов что в C++ это вообще невозможно.
Здравствуйте, Ikemefula, Вы писали:
I>У тебя всего лишь ручное разделение кода и данных. Проблемы с расширением возникают как раз из за ручного разделения, а не из за маршалинга. Странно что тебе пришла в голову мысль, что может быть необходимость маршалить чего то в рамках одного процесса
Здравствуйте, alex_public, Вы писали:
_>А легко. Например мы можем сделать в одном обработчике несколько отдельных асинхронных вызовов. Или вообще в цикле погонять этот блок... Типа такого:
_>Понятно что похожий код можно и в 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;
}
Здравствуйте, alex_public, Вы писали:
I>>В винде любая такая софтина может нормально работать только как сервис. nginx на винде пока что ничем не блещет, потому что умеет только синхронные сокеты. И кстати говоря в планах асунуть его в сервис. Интересно, зачем, если и так всё шоколадно ?
_>А причём тут вообще винда и IIS? Вообще то подавляющее большинство веба живёт под разновидностями unix'a. Так что не надо кривых отмазок. _>Ну и даже если говорить про винду (например в качестве машины разрабочика), то и nginx и apache тоже нормально работают без всяких сервисов.
Как бэ nginx на винде ничем не блещет , даже io cp не умеет.
Здравствуйте, alex_public, Вы писали:
_>Тормозной если на нём считать — это я сам тестировал. Но в вебе мало считают, так что там производительность обычно вообще в базы данных упирается.
То есть, ты хочешь сказать, что производительность не всегда упирается в процессор ?
Здравствуйте, alex_public, Вы писали:
_>Да, да, согласен, весь этот await/async стиль — это отстой. )))
У тебя только эмуляции, что и есть отстой
_>А легко. Например мы можем сделать в одном обработчике несколько отдельных асинхронных вызовов. Или вообще в цикле погонять этот блок... Типа такого:
_>
_>Понятно что похожий код можно и в C# намутить, но это надо уже вставлять асинхронные лямбды и вызывать их... В общем код будет уже заметно пострашнее чем C++ выглядеть.
И давно в C# запретили вставлять циклы в код ? Для твоего случая вообще ничего мутить не надо, работает искаропки Пробуй еще раз.
_>P.S. Но вообще мне нравится куда уже ушла наша дискуссия. Я вижу попытки доказать мне что реализация await/asynx в C# не хуже чем в C++. Это правильный подход... А то начали то с диких лозунгов что в C++ это вообще невозможно.
Ты пока что ничего не показал, если не считать "я бы всё равно не стал писать так".
Здравствуйте, alex_public, Вы писали:
I>>У тебя всего лишь ручное разделение кода и данных. Проблемы с расширением возникают как раз из за ручного разделения, а не из за маршалинга. Странно что тебе пришла в голову мысль, что может быть необходимость маршалить чего то в рамках одного процесса
_>Забавно. ))) Похоже у нас тут у кое-кого раздвоение личности... Например здесь http://www.rsdn.ru/forum/philosophy/5208835
некий Ikemefula как раз рассказывает нам об ужасах маршалинга. )))
В обоих случаях сказано примерно одно и то же
"Если делать как ты предложил, придется маршалить весь контекст" == маршалинг, именно в твоей реализации
"не надо продумывать что там куда может маршалиться или не може" == маршалинг, именно в твоей реализации
То есть, в обоих случаях я хочу сказать, что маршалинг есть только благодаря твоему подходу, а раз так, то это отстой, потому что процесс у нас один и тот же. Благодаря поддержке компилера нет необходимости маршалить, нужно всего то подождать возврата управления.
Здравствуйте, alex_public, Вы писали:
_>1. Там по два асинхронных вызова в каждом блоке с кодом в ui потоке между ними. _>2. textbox результирующий свой для каждого блока.
А, тогда .ContinueWith()/Rx. Async в том виде как есть заточен под описание последовательности инструкций в continuation-passing-стиле. Сахара для распараллеливания сейчас практически нет.
Здравствуйте, Ikemefula, Вы писали:
I>У тебя только эмуляции, что и есть отстой
Покажи разницу с C#.
I>И давно в C# запретили вставлять циклы в код ? Для твоего случая вообще ничего мутить не надо, работает искаропки Пробуй еще раз.
Покажи код. Если просто вставить в тот C# код цикл, больше ничего не меняя, то получится последовательный, а не параллельный запуск скачиваний.
I>Ты пока что ничего не показал, если не считать "я бы всё равно не стал писать так".
Я как раз показал все примеры кода, а от тебя пока вижу только болтовню и ни одной строчки кода. То что мне не нравится подобный стиль (что в C#, что в C++) — это только мой личный вкус. И он не мешает мне продемонстрировать реализацию этой схемы в C++, даже если я сам и не собираюсь её применять.
Здравствуйте, 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;
}
Здравствуйте, alex_public, Вы писали:
I>>То есть, ты хочешь сказать, что производительность не всегда упирается в процессор ?
_>По разному бывает, в зависимости от задачи. Но если например переписать mysql на php то тогда точно без шансов будет упираться только в процессор.
Как речь про дотнет, так все тормозное и только С++ может победить. А как про пхп — "По разному бывает, в зависимости от задачи"
Здравствуйте, Sinix, Вы писали:
S>А, тогда .ContinueWith()/Rx. Async в том виде как есть заточен под описание последовательности инструкций в continuation-passing-стиле. Сахара для распараллеливания сейчас практически нет.
Здравствуйте, alex_public, Вы писали:
I>>У тебя только эмуляции, что и есть отстой
_>Покажи разницу с C#.
В прошлый раз я все что нужно показал, в твоем новом примере только строчек больше.
_>Покажи код. Если просто вставить в тот C# код цикл, больше ничего не меняя, то получится последовательный, а не параллельный запуск скачиваний.
I>>Ты пока что ничего не показал, если не считать "я бы всё равно не стал писать так".
_>Я как раз показал все примеры кода, а от тебя пока вижу только болтовню и ни одной строчки кода.
Ля-ля-ля
> То что мне не нравится подобный стиль (что в C#, что в C++) — это только мой личный вкус. И он не мешает мне продемонстрировать реализацию этой схемы в C++, даже если я сам и не собираюсь её применять.
Ты лучше покажи ту схему, которую собираешься применять.
Ещё неплохо бы дождаться завершения и скинуть результаты каждого из методов в свою переменную по мере завершения, как в примере с BEGIN_ASYNC и тогда сравнивать читаемость кода. Напомню, alex_public просил без явных лямбд/отдельных методов.
Здравствуйте, Ikemefula, Вы писали:
I>В прошлый раз я все что нужно показал, в твоем новом примере только строчек больше.
Ты нигде ничего не показал, а только уворачиваешься от ответа всеми возможными способами. И меня это уже если честно утомило. Или ответь один раз точно на конкретные вопросы или будем считать что ты слил по всем пунктам.
Здравствуйте, 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>
И что тут интересного? ) Это мы типа так длинно записали следующий код?