EP>>Более высокоуровневый, более "собственно логико-задачный", использует меньше примитивов железа и ос, ручного связывания, чем C++1998 код: I>Выделил. Нет ручного связывания, как ты видишь, bind нигде не вызывается, а параметры идут куда надо.
I>Явно указано ожидание результата, при чем такой код совершенно не означает что будет какой то джополнительный поток. Всё.
Конечно не означает, ибо это вообще не код, так как не компилируется
А поток у тебя таки будет (либо постоянное ожидание), ибо твой download не асинхронный
I>А у тебя ручное связывание аргументов, результатов и явная команда запуска обработки в фоне.
У тебя task и запускается вручную, и ожидается
I>При чем если минимально усложнить код, тебе придется заниматься ручно диспетчеризацией навроде "execute_on_ui_thread"
Так у тебя тоже ручная диспетчеризация в виде await/task/async
Здравствуйте, alex_public, Вы писали:
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>>
_>И что тут интересного? ) Это мы типа так длинно записали следующий код? _>
Здравствуйте, Sinix, Вы писали:
S>Ещё неплохо бы дождаться завершения и скинуть результаты каждого из методов в свою переменную по мере завершения, как в примере с BEGIN_ASYNC и тогда сравнивать читаемость кода. Напомню, alex_public просил без явных лямбд/отдельных методов.
Макры использовать можно, а лямбды нельзя ? :faceplam:
Здравствуйте, Ikemefula, Вы писали:
EP>>>>Сферического "интенсивного заиспользования" java'ы за десяток сообщений ты так не показал — всё, уже не интересно. I>>>Джавый я как то не мог обещать показать, ибо на ней сроду не писал.
EP>>А это что
EP>>>>Как пример — эти аллокации вылезают по всему коду, <b><u>при простейших абстракциях</u></b> — просадка 16x на ровном месте.
I>>>Такой код в своём уме никто не пишет, кроме вчерашних плюсовиков, которые не знают как устроена память.
EP>>[...]
I>>>С такими проблемами как ты показал, не надо бороться против языка, наоборот, его надо интенсивно использовать.
EP>>? EP>>Или в твоём понимании "интенсивно использовать язык" = "сменить его на C#"? I>В моём понимании здесь нет ни слова про джаву
То есть код ты посмотрел, что-то ляпнул, а java'у не увидел?
I>Код который ты привел, пишут именно вчерашние сиплюсники, силу многолетней привычки "зачем думать и так всё быстро".
Код показывает к чему приводят минимальные абстракции в java
И если нужно писать быстрый код, от этих абстракций придётся отказаться.
I>Покажи нормальную задачу, в терминах юзера, без использования слов "массив, элемент, индекс".
Я уже показывал — найти сумму векторов
I>Выяснил, что дотнет может справляться с вычислениями быстрее, чем нативная либа с отрисовкой результатов.
"Выяснил, что дотнет складывает два числа быстрее, чем нативная либа решает СЛАУ", что за бред?
I>Итого, пока что у нас расклад такой — я привел примеры, где С++ используют без плюсов или даже пишут "против языка", а вот от тебя пока что ничего не было.
То есть Eigen и Facebook ты за примеры не считаешь?
I>P.S. Если всё что ты хотел сказать, это разница во времени при проходе по массиву между C++ и С#, то мог бы и не напрягаться, я сам про это писал на этом форуме, при больше, чем всех твоих сообщений вместе взятых.
Мой поинт в том, что за многие абстракции в управляемых средах нужно платить производительностью. Массив структур на java — это простейший конкретный пример
Но почему-то за 20 страниц флейма до тебя это так и не дошло
Здравствуйте, alex_public, Вы писали:
I>>В прошлый раз я все что нужно показал, в твоем новом примере только строчек больше.
_>Ты нигде ничего не показал, а только уворачиваешься от ответа всеми возможными способами. И меня это уже если честно утомило. Или ответь один раз точно на конкретные вопросы или будем считать что ты слил по всем пунктам.
_>1. Покажи чем принципиально этот http://www.rsdn.ru/forum/philosophy/5208679
Здравствуйте, Mazay, Вы писали:
M>Здравствуйте, Evgeny.Panasyuk, Вы писали:
M>Я в своё время писал вот такую штуку:
[...] M>Несетевая логика поскипана, остальной сетевой код коннектится к сокс-серверу и через него шлёт HTTP запрос на другой сервер. M>Функции ***_resume выполняются асинхронно. То есть после их вызова корутина спит, а после получения результата возобновляется с того же места. Связь с остальными корутинами — через поля структуры fd. Прервать соединение тоже понятно как. M>Функции ***_resume есть мною писанные обёртки над соответствующими функциями asio. Они все однотипные, покажу на примере connect_resume:
Здравствуйте, Evgeny.Panasyuk, Вы писали:
I>>Код который ты привел, пишут именно вчерашние сиплюсники, силу многолетней привычки "зачем думать и так всё быстро".
EP>Код показывает к чему приводят минимальные абстракции в java
Ровно к тому же, что и в Boost
EP>И если нужно писать быстрый код, от этих абстракций придётся отказаться.
Правильно, смотри сишный nginx или сфинкс.
I>>Покажи нормальную задачу, в терминах юзера, без использования слов "массив, элемент, индекс". EP>Я уже показывал — найти сумму векторов
Никаких требований и ограничений стало быть нет ? Ну тогда идельный результат "нашел!"
I>>Выяснил, что дотнет может справляться с вычислениями быстрее, чем нативная либа с отрисовкой результатов. EP>"Выяснил, что дотнет складывает два числа быстрее, чем нативная либа решает СЛАУ", что за бред?
Похоже, если в контексте дотнета ты слышишь вычисления, то тебе мерещится "складыват два числа". Это скорее к доктору, а не на форум.
I>>Итого, пока что у нас расклад такой — я привел примеры, где С++ используют без плюсов или даже пишут "против языка", а вот от тебя пока что ничего не было. EP>То есть Eigen и Facebook ты за примеры не считаешь?
По моему мы остановились на том, что ты не понимаешь слово "типичный" и что это означает. А на счет фейсбука даже не знаю, php вместо С++ как пример классной нативной разработки ?
I>>P.S. Если всё что ты хотел сказать, это разница во времени при проходе по массиву между C++ и С#, то мог бы и не напрягаться, я сам про это писал на этом форуме, при больше, чем всех твоих сообщений вместе взятых.
EP>Мой поинт в том, что за многие абстракции в управляемых средах нужно платить производительностью. Массив структур на java — это простейший конкретный пример
Ровно тоже можно сказать и про С++. Более того — даже про С можно сказать тоже самое.
EP>Но почему-то за 20 страниц флейма до тебя это так и не дошло
А по моему с тем фактом, что низкоуровневы код быстрее на С++ относительно C# в этом топике никто нигде ни разу не спорил. Тебе просто померещилось чего то.
var r = await download(args.url, args.cancellation);
Тем, что на С++ ?
I>>Явно указано ожидание результата, при чем такой код совершенно не означает что будет какой то джополнительный поток. Всё.
EP>Конечно не означает, ибо это вообще не код, так как не компилируется EP>А поток у тебя таки будет (либо постоянное ожидание), ибо твой download не асинхронный
Это несущественные детали.
I>>А у тебя ручное связывание аргументов, результатов и явная команда запуска обработки в фоне.
EP>У тебя task и запускается вручную, и ожидается
Таск != поток
I>>При чем если минимально усложнить код, тебе придется заниматься ручно диспетчеризацией навроде "execute_on_ui_thread"
EP>Так у тебя тоже ручная диспетчеризация в виде await/task/async
Я нигде не указываю в каком потоке чего выполнить, я всего то указываю ожидание результатов, по потокам раскидает компилятор, а ты это делаешь руками.
. Это же ведь ты утверждал они чем-то принципиально отличаются (как там, эмуляция кажется?)...
I>Меньше мусора, в т.ч. отсутствие макров, да-да.
ОК, принимается. Ничего возразить не могу. Действительно в C++ коде на один лишний значок больше. Но хотелось бы зафиксировать что это единственный его недостаток в данном сравнение.
_>>2. Покажи точный аналог на C# этого http://www.rsdn.ru/forum/philosophy/5210899
внизу). Аналог же полноценного кода ты так и ни разу не показал.
2. Даже если брать это твоё упрощение и его C++ аналог, то видно что C# вариант в несколько раз объёмнее и сложнее. И кстати замечу что такая простота C++ варианта как раз из-за возможности (как ты там сказал?) "в конце метода находится код который выполнится в начале".
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>На stackless coroutine такая инкапсуляция не получится — асинхронные кишки будут торчать в клиентском коде, ибо такие сопроцедуры сразу возвращают управление в клиентский код — а это значит что либо данные ещё не получены, либо никакой асинхронности, так как только один поток.
"ибо такие сопроцедуры сразу возвращают управление в клиентский код" это как, если сопроцедура не сразу возвращает управление в клиентский код, то получается отсутствие асинхрощины ?
Здравствуйте, Ikemefula, Вы писали:
S>>Ещё неплохо бы дождаться завершения и скинуть результаты каждого из методов в свою переменную по мере завершения, как в примере с BEGIN_ASYNC и тогда сравнивать читаемость кода. Напомню, alex_public просил без явных лямбд/отдельных методов.
I>Макры использовать можно, а лямбды нельзя ? :faceplam:
А то, всё честно
Здравствуйте, alex_public, Вы писали:
I>>Макры использовать можно, а лямбды нельзя ? :faceplam:
_>Почему нельзя? ) Можно конечно что угодно. Собственно я и сказал что без лямбд не обойтись. А Sinix просто попытался попробовать как-нибудь без них...
Синикс взял да и повелся, ты то сам и лямбды и макры использовал
Здравствуйте, Ikemefula, Вы писали:
I>>>Код который ты привел, пишут именно вчерашние сиплюсники, силу многолетней привычки "зачем думать и так всё быстро". EP>>Код показывает к чему приводят минимальные абстракции в java I>Ровно к тому же, что и в Boost
Boost это набор библиотек, ты что сказать-то хотел?
EP>>И если нужно писать быстрый код, от этих абстракций придётся отказаться. I>Правильно, смотри сишный nginx или сфинкс.
Ещё раз, то что где-то быстрый код написан не на C++ не означает, что при написании аналогичного кода на C++ придётся отказываться от абстракций. Логично же
I>>>Покажи нормальную задачу, в терминах юзера, без использования слов "массив, элемент, индекс". EP>>Я уже показывал — найти сумму векторов I>Никаких требований и ограничений стало быть нет ? Ну тогда идельный результат "нашел!"
Ну тогда и для:
I>Смотри, как все просто — реализовать оконное FFT.
"Реализовал!"
детский сад
I>>>Выяснил, что дотнет может справляться с вычислениями быстрее, чем нативная либа с отрисовкой результатов. EP>>"Выяснил, что дотнет складывает два числа быстрее, чем нативная либа решает СЛАУ", что за бред? I>Похоже, если в контексте дотнета ты слышишь вычисления, то тебе мерещится "складыват два числа". Это скорее к доктору, а не на форум.
Я тебе показал, что из твоей фразы видно, что ты сравниваешь абсолютно разные задачи на разных языках
I>>>Итого, пока что у нас расклад такой — я привел примеры, где С++ используют без плюсов или даже пишут "против языка", а вот от тебя пока что ничего не было. EP>>То есть Eigen и Facebook ты за примеры не считаешь? I>По моему мы остановились на том, что ты не понимаешь слово "типичный" и что это означает.
А где я говорил что-то про типичный?
I>А на счет фейсбука даже не знаю, php вместо С++ как пример классной нативной разработки ?
Здравствуйте, alex_public, Вы писали:
I>>Меньше мусора, в т.ч. отсутствие макров, да-да.
_>ОК, принимается. Ничего возразить не могу. Действительно в C++ коде на один лишний значок больше. Но хотелось бы зафиксировать что это единственный его недостаток в данном сравнение.
I>>На мой взгляд это лучше благодаря поддержке асинхронщины компилером, ибо в С++ есть только поддержка 1 либами 2 макрами.
_>А вот тут всё наоборот.
_>1. Этот твой код совершенно не является аналогом этого http://www.rsdn.ru/forum/philosophy/5210899
внизу). Аналог же полноценного кода ты так и ни разу не показал.
Угадывать по коду, какую задачу ты хотел решать, я не хочу, потому уже который раз прошу описание человеческим языком.
Без этого у меня складывается ощущение, что ты чего то не понимаешь похоже. Сначала ты был уверен, что в C# нельзя цикл всунуть в имеющийся код. Щас утверждаешь, что цепочка из двух последовательных ожиданий намного сложнее, чем из одного
Это конечно лучше, чем спутать лямбды и внешние ресурсы, но примерно так же смешно.
Вобщем если хочешь получить внятный ответ, дай внятное описание задачи. Например — 5 параллельных асинхронных тасков, каждый таск состоит из двух(трех, десяти) цепочек. Валяй.
I>var r = await download(args.url, args.cancellation);
I>
I>Тем, что на С++ ?
А где я говорил, что это чем-то лучше, круче? Ты спрашивал про аналог
I>>>Явно указано ожидание результата, при чем такой код совершенно не означает что будет какой то джополнительный поток. Всё. EP>>Конечно не означает, ибо это вообще не код, так как не компилируется EP>>А поток у тебя таки будет (либо постоянное ожидание), ибо твой download не асинхронный I>Это несущественные детали.
Ну так и в коде на C++ — там не обязательно дополнительный поток.
I>>>При чем если минимально усложнить код, тебе придется заниматься ручно диспетчеризацией навроде "execute_on_ui_thread" EP>>Так у тебя тоже ручная диспетчеризация в виде await/task/async I>Я нигде не указываю в каком потоке чего выполнить, я всего то указываю ожидание результатов, по потокам раскидает компилятор,
По потокам у тебя раскидает библиотека/среда на основе глобального состояния.
I>а ты это делаешь руками.
ничто не мешает также задавать это параметрами среды
Здравствуйте, Evgeny.Panasyuk, Вы писали:
I>>>>Код который ты привел, пишут именно вчерашние сиплюсники, силу многолетней привычки "зачем думать и так всё быстро". EP>>>Код показывает к чему приводят минимальные абстракции в java I>>Ровно к тому же, что и в Boost
EP>Boost это набор библиотек, ты что сказать-то хотел?
Java это вобщем тоже набор библиотек по большому счету. И stackfull coroutines там есть. И точно такие же приседания со стеком.
EP>Ещё раз, то что где-то быстрый код написан не на C++ не означает, что при написании аналогичного кода на C++ придётся отказываться от абстракций. Логично же
Смотря что называть абстракциями. Я вот честно не знаю, что ты под этим понимаешь.
EP>Ну тогда и для: EP>
I>>Смотри, как все просто — реализовать оконное FFT.
EP>"Реализовал!" EP>детский сад
По моему, мы уже выяснили, что все что ты силился сказать, это про разницу в перформансе низкоуровневого кода. Отдохни, примерно за 10 лет я про это и писал на этом же форуме не единожды, загляни в хистори и убедись.
I>>Похоже, если в контексте дотнета ты слышишь вычисления, то тебе мерещится "складыват два числа". Это скорее к доктору, а не на форум. EP>Я тебе показал, что из твоей фразы видно, что ты сравниваешь абсолютно разные задачи на разных языках
Я показываю, что менеджед код запросто может не быть узким местом, даже если требования к перформансу в виде тактов процессора и тд. А тебе почему то мерещится "сложить два числа"
I>>По моему мы остановились на том, что ты не понимаешь слово "типичный" и что это означает.
EP>А где я говорил что-то про типичный?
Вещи которые ты тут сообщал непосредтсвенно связаны с этим понятием. Твоих разовых примеров недостаточно, что бы сказать, что в С++ все шоколадно.
EP>Конечно, с такими-то тылами: EP>
EP>HipHop VM (and before it HPHPc) has realized > 5x increase in throughput for Facebook compared with Zend PHP 5.2.
Да, это нечестно по отношению к С++, надо было этим дуракам на бусте все захерачить, шоб все знали, что быстрые приложения можно только на С++ писать.
Здравствуйте, Ikemefula, Вы писали:
I>Синикс взял да и повелся, ты то сам и лямбды и макры использовал
Ну я же не виноват что в C# нет макросов. ))) Ну и кстати замечу что в данном случае они использовались исключительно для эстетических целей, а не для магии, как иногда бывает.
Здравствуйте, alex_public, Вы писали:
_>Ну я же не виноват что в C# нет макросов. ))) Ну и кстати замечу что в данном случае они использовались исключительно для эстетических целей, а не для магии, как иногда бывает.
Не ясно, где тут эстетика, если ты сам не хочешь использовать свой же подход.