Re[12]: [boost][asio] boost::asio::placeholders::error
От: jazzer Россия Skype: enerjazzer
Дата: 02.12.11 10:40
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Давно "мечтал", чтобы инициализация и деинициализация Asio были вынесены явно (например, в некоторый scoped guard класс). Вообще, мне кажется, любая библиотека, требующая инициализации/деинициализация должна позволять делать это явно (если не требовать). Ваше мнение?

Полностью согласен.
Например, в стандартной библиотеке создаются глобальные объекты стандартных потоков ввода-вывода, так для этого есть специальный класс std::ios_base::Init (смотри [lib.ios::Init] в стандарте).

A>Вот еще кое-что по теме, но из другого "королевства" — TBB initialization, termination, and resource management details, juicy and gory:

A>

A>This means that auto-initialization, with all its convenience, may restrict your ability to control concurrency of parallel computations. The only consolation is that fortunately this is rarely an issue in practice.

Да, я с этим сталкивался, гемор тот еще.
Хорошо, когда можешь управлять рождением потоков и проинициализировать все до того, как появятся первые потоки.
Но такое далеко не всегда бывает, и начинаются всякие веселые эффекты
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[13]: [boost][asio] boost::asio::placeholders::error
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 10:40
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>но конкретно крис колхоф — линуксоид и такое порно у него уже 8 лет


Ммда. К сожалению, похоже на правду.
Programs must be written for people to read, and only incidentally for machines to execute
Re[12]: [boost][asio] boost::asio::placeholders::error
От: jazzer Россия Skype: enerjazzer
Дата: 02.12.11 10:46
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>с ним не о чем говорить:

о_О>https://svn.boost.org/trac/boost/ticket/3605

Еще имеет смысл поднять шум в мейл-листе буста (boost-dev), там много народу это увидят и он уже не сможет так просто отмахнуться.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[13]: [boost][asio] boost::asio::placeholders::error
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 10:57
Оценка: +1
Здравствуйте, jazzer, Вы писали:

J>Еще имеет смысл поднять шум в мейл-листе буста (boost-dev), там много народу это увидят и он уже не сможет так просто отмахнуться.


Об этом х/з сколько раз писали в рассылке по Asio (asio-users@sf.net).
Programs must be written for people to read, and only incidentally for machines to execute
Re[13]: гыгы
От: о_О
Дата: 02.12.11 11:49
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Здравствуйте, о_О, Вы писали:


о_О>>с ним не о чем говорить:

о_О>>https://svn.boost.org/trac/boost/ticket/3605

A>Ну хотя бы с WSAStartup/WSACleanup там есть решение. Да. Что касается boost::asio::placeholders, то они мне "сразу не понравились". Перейду на boost::arg<> и на _N.


а ты видел как async_resolve, async_connect сделаны? запускается один поток (1!) и делается getaddrinfo (аналогично connect), и если второй поток тоже делает запрос, то он виснет на мьютексе. вот это асинхронность по-линуксоидному ещё небось поток в глобальной переменной
Re[14]: [boost][asio] boost::asio::placeholders::error
От: о_О
Дата: 02.12.11 11:54
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Здравствуйте, о_О, Вы писали:


о_О>>но конкретно крис колхоф — линуксоид и такое порно у него уже 8 лет


A>Ммда. К сожалению, похоже на правду.


так глянь impl. я как увидел это в 2008, то ещё тогда решил, что в продакшн такое использовать нельзя. сомневаюсь, что если афтор уже 8 лет не может правильно инициализировать WinSock, то там что-то кардинально изменилось
Re[13]: [boost][asio] boost::asio::placeholders::error
От: о_О
Дата: 02.12.11 11:58
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, о_О, Вы писали:


о_О>>с ним не о чем говорить:

о_О>>https://svn.boost.org/trac/boost/ticket/3605

J>Еще имеет смысл поднять шум в мейл-листе буста (boost-dev), там много народу это увидят и он уже не сможет так просто отмахнуться.


я знаю эту библиотеку ещё до буста. после того как asio взяли в boost в 2008, афтор стал очень сильно гнуть пальцы.

з.ы. кстати некоторые дефайны ещё в 2009 были глючны — библиотека не собиралось. и это в официальных релизах буста. такие дела
Re[15]: [boost][asio] boost::asio::placeholders::error
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 16:11
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>так глянь impl. я как увидел это в 2008, то ещё тогда решил, что в продакшн такое использовать нельзя. сомневаюсь, что если афтор уже 8 лет не может правильно инициализировать WinSock, то там что-то кардинально изменилось


Ну там, вроде, ничего сильно страшного нет.
Programs must be written for people to read, and only incidentally for machines to execute
Re[14]: гыгы
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 16:16
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>а ты видел как async_resolve, async_connect сделаны? запускается один поток (1!) и делается getaddrinfo (аналогично connect), и если второй поток тоже делает запрос, то он виснет на мьютексе. вот это асинхронность по-линуксоидному ещё небось поток в глобальной переменной


Насчет async_resolve — так это же вроде проблема WinSock, что нет асинхронного аналога. Всегда думал, что там очередь к одному рабочему потоку используется... Сейчас гляну.

Насчет async_connect — решается легко.
Programs must be written for people to read, and only incidentally for machines to execute
Re[15]: гыгы
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 16:20
Оценка:
A>Насчет async_connect — решается легко.

Не туда — вот это хотел отправить.
Programs must be written for people to read, and only incidentally for machines to execute
Re[15]: гыгы
От: о_О
Дата: 02.12.11 16:23
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Насчет async_resolve — так это же вроде проблема WinSock, что нет асинхронного аналога. Всегда думал, что там очередь к одному рабочему потоку используется... Сейчас гляну.


а пул потоков с менеждером, который эмулирует асинхронность, я должен писать? впрочем и писал в свое время, что оставалось то...

A>Насчет async_connect — решается легко.


ты не понял. там connect() вместо ConnectEx() т.е. опять синхронность. опять через 1 поток. опять убогие костыли
Re[14]: [boost][asio] boost::asio::placeholders::error
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 16:27
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>я знаю эту библиотеку ещё до буста. после того как asio взяли в boost в 2008, афтор стал очень сильно гнуть пальцы.


Знаю как раз с того момента, как вошла в состав Boost C++ Libraries. Про "пальцы" слышу первый раз. Лично с автором не знаком, а в переписке ничего такого за ним не замечал.

о_О>з.ы. кстати некоторые дефайны ещё в 2009 были глючны — библиотека не собиралось. и это в официальных релизах буста. такие дела


Пробовал почти все релизы Boost.Asio и не замечал глюков, не дающих собираться (использовал header-only вариант) — можете уточнить релиз и проблему (включая платформу/компилятор/флаги компиляции)? Становится все интереснее.
Programs must be written for people to read, and only incidentally for machines to execute
Re[15]: [boost][asio] boost::asio::placeholders::error
От: о_О
Дата: 02.12.11 16:35
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Пробовал почти все релизы Boost.Asio и не замечал глюков, не дающих собираться (использовал header-only вариант) — можете уточнить релиз и проблему (включая платформу/компилятор/флаги компиляции)?

я не помню, я её забросил в 2009

A>Становится все интереснее.

интересно, почему?
Re[15]: [boost][asio] boost::asio::placeholders::error
От: о_О
Дата: 02.12.11 16:45
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Пробовал почти все релизы Boost.Asio и не замечал глюков, не дающих собираться (использовал header-only вариант) — можете уточнить релиз и проблему (включая платформу/компилятор/флаги компиляции)? Становится все интереснее.


да, вспомнил. мы же не бустовскую версию использовали. когда её включили в буст, стали выходить две версии и тут начался зоопарк
Re[16]: гыгы
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 16:51
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>а пул потоков с менеждером, который эмулирует асинхронность, я должен писать? впрочем и писал в свое время, что оставалось то...


Ну про async_resolve и async_connect (в Windows) в документации все честно расписано. Спасибо и за это (даже такое не у всех бывает).

о_О>ты не понял. там connect() вместо ConnectEx() т.е. опять синхронность. опять через 1 поток. опять убогие костыли


Это объясняется тем, что поддерживалась Windows 2000, на которой ConnectEx нет. Обойти-то легко (позволю себе повторить эту ссылку) средствами самой библиотеки Boost.Asio.

Насчет пула — не всем нужен пул внутренних (по отношению к пользователю Boost.Asio) потоков (опять дополнительные потоки!). Те, кому одного потока мало, естественно, пишут свой async_resolve. Это вполне нормально. Не поддерживается целевой платформой — вот вам минимальный/плохонький fallback и честная документация про это. "Хороший" вариант — уж как-нибудь сами. Зачем пихать в библиотеку "жирный" non native workaround.
Programs must be written for people to read, and only incidentally for machines to execute
Re[16]: [boost][asio] boost::asio::placeholders::error
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 16:59
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>интересно, почему?


Идеального кода, конечно, не существует. Но в Boost.Asio качество вполне так ничего. Вот с asio::placeholders прямо какой-то epic fail получился. С WSAStartup/WSACleanup мне все понятно — многие не любят явные инициализации/деинициализации (когда я вводил это в свои библиотеки, меня заставляли выносить в static) — ну это хотя бы решабельно без изменения кода Boost.Asio.
Programs must be written for people to read, and only incidentally for machines to execute
Re[16]: [boost][asio] boost::asio::placeholders::error
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 17:08
Оценка:
Здравствуйте, о_О, Вы писали:

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


Про проблемы с non-boost version где-то уже слышал. Смысл non-boost version (которая все равно требует наличия Boost) остается для меня загадкой.
Programs must be written for people to read, and only incidentally for machines to execute
Re[16]: [boost][asio] boost::asio::placeholders::error
От: abrarov Россия http://asio-samples.blogspot.com/
Дата: 02.12.11 17:13
Оценка:
Здравствуйте, о_О, Вы писали:

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


Кстати, в последней версии автор много чего добавил/улучшил/исправил — прогресс есть. Надежда на качественную C-like effective with low overhead C++ network library еще живет.
Programs must be written for people to read, and only incidentally for machines to execute
Re[17]: [boost][asio] boost::asio::placeholders::error
От: о_О
Дата: 02.12.11 17:14
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Здравствуйте, о_О, Вы писали:


о_О>>интересно, почему?


A>Идеального кода, конечно, не существует. Но в Boost.Asio качество вполне так ничего. Вот с asio::placeholders прямо какой-то epic fail получился. С WSAStartup/WSACleanup мне все понятно — многие не любят явные инициализации/деинициализации (когда я вводил это в свои библиотеки, меня заставляли выносить в static) — ну это хотя бы решабельно без изменения кода Boost.Asio.


архитектура хороша, спору нет. и вообще по сравнению с другими очень секси, но присутствуют непростительные вещи, что приходится брать натфиль и, как с ConnectEx, фигачить
Re[17]: [boost][asio] boost::asio::placeholders::error
От: о_О
Дата: 02.12.11 17:18
Оценка:
Здравствуйте, abrarov, Вы писали:

A>Здравствуйте, о_О, Вы писали:


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


A>Кстати, в последней версии автор много чего добавил/улучшил/исправил — прогресс есть. Надежда на качественную C-like effective with low overhead C++ network library еще живет.


последние версии (судя по логам) радуют, проверю на практике в 2012м
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.