Короче, давит на меня сильно прошлый опыт реализации всего этого асинхронного добра врукопашную.
В связи с чем никак не могу решиться перейти на asio.
Наворочено там слоев абстракции — пугает.
В общем вопрос у меня простой (не обязательно ответ тоже). Вот есть у меня события, интрузивные, есть под них очередь — интрузивная. Раньше я ее раскручивал через poll + self-pipe trick.
Можно как-то мне эту очередь через asio раскрутить?
Я вот знаю, что у io_service есть своя очередь внутри. Мне она не нужна. Могу я написать свой io_service со своей очередью,
а от asio взять только кроссплатформенное мультиплексирование? Насколько это противоречит идеологии библиотеки?
Где почитать про это?
Спасибо, ребят, за ответы.
Здравствуйте, reversecode, Вы писали:
R>никогда не мог понять программистов которые не могут понять архитектуру опенсорс проекта R>исходники есть, откройте, изучите и все вопросы отпадут
Исходники не ответят на вопрос о корректности того или иного подхода с точки зрения идеологии.
R>асио сверху снизу по бокам и изнутри весь завязан на себе R>его можно как то костомайзить но без него нельзя
Вот и я спрашиваю, как можно ли его закастомазить так, чтобы не нарушить идеологию?
Вот например я беру из гугла такой пример: http://hansewetz.blogspot.com/2014/07/using-queues-with-boostasio-part-i.html
И вижу там, что сущности из очереди все равно потом перекладываются во внутреннюю очередь io_service. Плюс к этому вижу огромное кол-во второстепенного кода, который прячет суть происходящего за своей многословностью. Если представленный подход по ссылке является единственным корректным с точки зрения good practice использования ASIO, то мне он не подходит. У меня уже есть заданная извне инфраструктура и я пытаюсь понять, может ли ASIO в нее вписаться или нет.
R>вообще архитектура асио проста до безобразия R>свой асио на коленке за день два не давясь печеньками можно набросать
Очень похвально, что вы это можете. Я тоже могу.
Меня совсем другой вопрос интересует.
Вот он: > Могу я написать свой io_service со своей очередью, а от asio взять только кроссплатформенное мультиплексирование? Насколько это противоречит идеологии библиотеки?
R>интересный вопрос, а что вы используете сейчас ? R>блокирующие сокеты и миллион треидов ?
Вот именно собственный "ASIO" у меня и есть. Вы как будто пост не читали? Сразу лишь бы ткнуть ТС побежали ответ писать, да?
Как упоминание poll могло привести вас к мысли о миллионе тредов и блокирующих сокетах?
Да и о сокетах речи не шло, пока что.
Как и многопоточности.
у меня есть колеса от самоката
могу ли я их приспособить к самолету ?
просто я уже привык к ним у меня вся инфраструктура двора заточена под колеса самоката
но хочется еще и самолет в ангар
а инфраструктуру ломать не хочется
и как бы вы смогли ответить если бы сами себе задали этот вопрос ?
если у вас есть свой асио то зачем вам бустовский асио ?
если вы хотите перейти на бустовский асио то выбрасывайте свой асио
асио работает в трех режимах
youtu.be/7FQwAjELMek?t=1341 three threading models
поэтому и нужны все эти хитро сплетения очередей
допустим закрыв глаза вы выбросите все ядро очередей в асио
иии что у вас остается ?
обвязка хендлеров асио + ваше ядро = для чего ?? профит какой ?
Здравствуйте, reversecode, Вы писали:
R>и как бы вы смогли ответить если бы сами себе задали этот вопрос ?
Я бы дал ссылку на информацию или сам написал пример, использования io_service с кастомной очередью.
Или сказал, бы что это неосуществимо в заданных условиях.
Здравствуйте, Ablex, Вы писали:
A>Здравствуйте, reversecode, Вы писали:
R>>и как бы вы смогли ответить если бы сами себе задали этот вопрос ? A>Я бы дал ссылку на информацию или сам написал пример, использования io_service с кастомной очередью. A>Или сказал, бы что это неосуществимо в заданных условиях.
кастомные очереди это экзекуторы которые запускают хендлеры по алгоритму который можно кастомизировать, примеры есть то ли в самом асио то ли в буст асио
но внутренние очереди это никак не изменит
но думаю это не то что вы хотите
поскольку свой асио к этому вы не прикрутите
я все же не понимаю зачем вы пытаетесь свой асио интегрировать в существующий асио ?
Здравствуйте, reversecode, Вы писали:
R>если у вас есть свой асио то зачем вам бустовский асио ?
Мой асио Linux-specific.
R>если вы хотите перейти на бустовский асио то выбрасывайте свой асио
С радостью, если пойму, что смогу его использовать в нужном ключе.
R>асио работает в трех режимах R>youtu.be/7FQwAjELMek?t=1341 three threading models R>поэтому и нужны все эти хитро сплетения очередей
За видео спасибо. Это уже что-то.
R>допустим закрыв глаза вы выбросите все ядро очередей в асио R>иии что у вас остается ? R>обвязка хендлеров асио + ваше ядро = для чего ?? профит какой ?
Я ж написал. У меня очередь — интрузивная. События в очереди — интрузивные. В ASIO очередь не интрузивная.
Мой вопрос в том, можно ли отмасштабировать ASIO на мой случай или нет.
Эмоций ваших не понимаю. Если вы считаете, что нельзя — так и скажите, к чему эти риторические вопросы с кучей вопросительных знаков?
A>Я ж написал. У меня очередь — интрузивная. События в очереди — интрузивные. В ASIO очередь не интрузивная. A>Мой вопрос в том, можно ли отмасштабировать ASIO на мой случай или нет. A>Эмоций ваших не понимаю. Если вы считаете, что нельзя — так и скажите, к чему эти риторические вопросы с кучей вопросительных знаков?
у меня нет никаких эмоций кроме очень большого удивления
я не могу сказать можно или нельзя пока не пойму что же вы хотите сделать
все мультиплексоры в реакторах работают по одной схеме
но я знаю ответ на ваш вопрос
что бы понять подойдет ли вам асио под ваше решение
вам надо взять и написать пару простых примеров с использованием асио
иначе нужно будет выкладывать ваш линукс специфик что бы мы все на форуме дружно посмотрели и сказали может ли он быть совместим с существующим асио
самый простой апи кастомного асио
reactor io;
int socket = ...
io.add(socket_handler, func_write);
io.run_loop();
какая разница где там и какая очередь внутри реактора ?
этот код с легкостью переделывается под буст асио