Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, artelk, Вы писали:
A>>Предлагается сделать так, чтоб лапши небыло, при сохранении всех бенефитов асинхронности.
_>Для этого есть много разных вариантов, а не только сопрограммы. Но и они тоже имеются и полноценно работают (в том числе и во многопоточности, как уже продемонстрировал вместо меня Евгений).
Не возражаю. Лишь бы лапши небыло.)
_>А лично мне больше нравятся реализации типа модели акторов — так называемое "выпрямление кода" не нравится с архитектурной точки зрения, т.к. обычно смешивает принципиально разные вещи (типа работы с ui и сетью например).
Я где-то утверждал, что из слоя представления нужно напрямую в сокеты лезть? Между обработчиком UI и сетью может быть хоть 10 уровней абстракции\изоляции.
A>>Помнится там обсуждалось как вернуться в вызывающий поток, т.е. один из юзкесов, реализуемых через await.
_>Да да, точно. Но фокус был в том, что это как раз и было типа сложностью и модной фичей (понятно что подразумевался возврат в UI), а вариант с произвольным потоком наоборот тривиален и скучен.
Ну, раз он тривиален, наверно, не составит труда его продемонстрировать.
_>Более того, если у нас нет обязательного требования возврата в тот же поток, то сам принцип await'a становится не особо интересным — любые реализации просто потоков становятся удобнее этого механизма.
Что за "любые реализации просто потоков"?
_>Причём речь как о зелёных (в случае потребности очень большого числа одновременных), так и даже о просто системных.
Поподробней, плз.
Здравствуйте, Sheridan, Вы писали:
S>Приподнял то что есть, смотреть там http://www-test.sergos.ru/ S>Местами криво, местами ссылки из контента в нитуда. Можешь потрогать. Но в любой момент могу рубануть...
На Огнелисе с Noscript не работает Можешь подсказать пользователю js включить? Некоторые сайты такое умеют.
Здравствуйте, genre, Вы писали:
G>а у меня по 3 секунды на jpg.
Будешь смеяться, особых задержек я не ощущаю. Подтормаживает, но в разумных пределах. Кэш, разумеется, вычищал.
S>>Что за браузер у тебя? ОС? Какое железо?
G>вин7, фф, железо нормальное для разработки, памяти и прочего вагон, нет остальное не тормозит
XP, огнелис. Старенький, ничем не примечательный ноут.
Здравствуйте, Privalov, Вы писали:
P>На Огнелисе с Noscript не работает Можешь подсказать пользователю js включить? Некоторые сайты такое умеют.
Попробую завтра вспомнить и покурить тему
Я в предыдущем сообщение несколько сумбурно всё написал, смешав совсем разные вещи. Сейчас попробую систематизировать.
И так, у нас речь о выполнение неких задач параллельно (действительно параллельно или скажем "поочерёдно"). Я бы разделил всю эту большую область на две отдельные части:
1. Когда не требуется небольшое число одновременных задач.
В данном случае на мой взгляд самым оптимальным является использование системных потоков (и соответственно блокирующего IO). Возможно кто-то не согласится (готов подискутировать и даже потестировать), но я не вижу ни единого аргумента в пользу других решений.
Но не всё так просто. В случае использования системных потоков и отдельных подсистем (типа UI) возникает проблема возврата данных в некий выделенный поток. У этой проблемы есть много разных решений с разной сложностью и удобством. Например в .net эту проблему довольно эффективно решает await. Существует полностью аналогичная реализация этого в C++ на базе Boost.Coroutine — обсуждалось подробно на этом форуме год назад. Кстати, лично мне эта техника не нравится (хотя именно я и продемонстрировал тогда пример реализации), т.к. на мой взгляд она вызывает путаницу в коде (канонический пример был с запуском скачивания из сети внутри обработчика кнопок и последующим выводом результата скачивания). Лично мне больше нравится модель акторов (причём по схеме 1 актор=1 системный поток). Естественно есть и ещё варианты (например продолжения и т.п.).
2. Когда требуется небольшое число одновременных задач.
В данном случае очевидно надо переходить к асинхронному IO. А вот механизм исполнения параллельных задач может быть очень разный: можно работать непосредственно на базе асинхронных колбэков (используя библиотеки типа libevent, libev или вообще руками), а можно использовать какую-то разновидность зелёных потоков, работающих поверх пула системных. Причём если говорить о зелёных потоках, то у них есть множество очень разных реализаций:
— Это могут быть сопрограммы поверх пула системных. Причём опять же разделяются на: stackless (как в .net await или в примерах boost.asio) и stackfull (boost.coroutine). Насколько я понял именно применение последних в данном контексте тебя и интересует. Так вот фокус в том, что в данном случае они "просто работают". ))) Т.е. какой-то дополнительный код потребовался именно для реализации техники "возврата в спец. поток", а для просто реализации зелёных потоков поверх пула системных ничего дописывать и не надо — оно просто работает. Как собственно Евгений и продемонстрировал. Вот разве что реализацию семафора дописать.
— это могут быть акторы (уже более сложные, работающие поверх пула системных потоков). Тут конечно самый известный Эрланг, но и в C++ с этим не плохо. Мне например нравится библиотечка Theron.
— встроенные в некоторые языки специфические реализации многозадачности
— всякие велосипедные реализации именно зелёных потоков в чистом виде.
Здравствуйте, alex_public, Вы писали:
_>Ещё раз повторюсь: ты думаешь оно последовательно грузится? )))
Я не думаю, я вот смотрю на таймлайн хрома и вижу, что мгновенностью там и не пахнет.
_>Ээээ, ты точно прочитал моё сообщение? ) Я же показал подробно всё. Вариант без дерева намного легче
Здравствуйте, alex_public, Вы писали:
_>Если же говорить об аналогиях этого "цитирования", то я бы наверное хотел получить в C++ функцию mixin из D. Она принимает строковый параметр (который должен быть определён на момент компиляции), воспринимает его как код, компилирует (причём с учётом окружающего контекста) и вставляет вместо себя.
Это и есть цитирование, только через зад.
_> И всё это естественно во время компиляции, так что поверх всего этого потом ещё по полной гуляет дикий оптимизатор C++ (который скорее всего заинлайнит всё вокруг на несколько уровней).
Чего он заинлайнит? Процитированный код? Нахрена?
_>Значит смотри, у нас есть некий библиотечный класс с кучей предков, полей, методов и т.п. Так вот его поля делятся на два типа: динамически инициализируемые (он сам этим занимается в своих конструкторах) и поля с реальными данными. Мы хотим хранить набор объектов этого класса в таблице базы данных.
Уже плохо. Хранить в РСУБД надо не объекты, хранить надо данные. Как только пытаешься хранить там объекты — сразу получаешь граблями по лбу.
_>Покажешь как реализуется подобное с помощью "качественно интерфейса к БД"? )
Какой смысл натягивать динамику на статические механизмы типа линка? Смысл линка как раз в статическом контроле типов. Если такой контроль невозможно осуществить в принципе, то и линк не нужен.
Ну или я твое сумбурное описание задачи не понял.
Здравствуйте, Ночной Смотрящий, Вы писали:
_>>Я говорю о том, что не надо пытаться реализовать именно LINQ, потому как есть более эффективные схемы НС>Эффективные в чем?
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Я не думаю, я вот смотрю на таймлайн хрома и вижу, что мгновенностью там и не пахнет.
Ну естественно оно помедленнее чем скажем страница гугла. ))) Но на уровне восприятия пользователя можно считать мгновенным. ) В отличие от скажем форума rsdn с открытым деревом солидной дискуссии или же вообще его старым сайтом (на WP который).
НС>Ты легкость в чем измерял?
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Это и есть цитирование, только через зад.
Как раз это нормальный вариант, т.к. работает во время компиляции, а не исполнения.
НС>Чего он заинлайнит? Процитированный код? Нахрена?
Типа быстродействие не нужно? )
НС>Уже плохо. Хранить в РСУБД надо не объекты, хранить надо данные. Как только пытаешься хранить там объекты — сразу получаешь граблями по лбу.
Типа все ORM — это зло? )
НС>Какой смысл натягивать динамику на статические механизмы типа линка? Смысл линка как раз в статическом контроле типов. Если такой контроль невозможно осуществить в принципе, то и линк не нужен. НС>Ну или я твое сумбурное описание задачи не понял.
Естественно всё статически — как-то ты забываешь мою "специализацию". )))
Но подразумевается что на практике Person — это не такая простая вещь, а какой-то чужой класс с кучей предков и всяких лишних (в смысле БД) полей. Здесь естественно показан искусственный упрощённый пример.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, dimgel, Вы писали:
НС>И в чем циничность разумного подхода к разработке и к получению новых знаний?
Как я понял из топика, "в навязывании своего мнения^Wпути".
Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, Sheridan, Вы писали:
S>>WP уже есть. Мне не нравится как он работает.
_>А вот это действительно очень тормозная штука (если она прямо на том же сервере живёт)... Но зато анимация там работает как надо. )))