Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обертка над asio сокетом 
V
    Опции темы
mes
Дата 11.4.2011, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  11.4.2011,  18:02 Найти цитируемый пост)
mes, кстати. как Вам такой сокет? ;) 

внимательно не рассматривал, но интуитивно не очень.. 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 11.4.2011, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(phprus @  11.4.2011,  20:37 Найти цитируемый пост)
Аллокации, влияют не так сильно

запустите код из этой темы под профайлером. и сами посмотрите на результат. не думаю что профайлер врет.

Цитата(phprus @  11.4.2011,  20:37 Найти цитируемый пост)
второй так просто не решается

это интересный момент..

PM WWW   Вверх
borisbn
Дата 12.4.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4864
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(phprus @  11.4.2011,  20:37 Найти цитируемый пост)
shared_ptr не может принимать массивы

принимать может ( http://liveworkspace.org/code/93c25ddc57b2...c6880d858a56139 )
удаляет неправильно (без [])


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mabrarov
Дата 12.4.2011, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 12.1.2011
Где: Казань

Репутация: 8
Всего: 9



Цитата

запустите код из этой темы под профайлером. и сами посмотрите на результат. не думаю что профайлер врет.


Вы просто забыли, что такое шаблон Proactor и как важен для него механизм, предоставляемый Boost.Asio: custom memory allocation (http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/overview/core/allocation.html)

С этим механизмом (с его применением) Вы сильно удивитесь резвости asio, так как в этом случае все аллокаци во всех используемых очередях (io_service, io_service::strand, deadline_timer) могут свестись к банальному:
Код

void* allocate(std::size_t size)
{
  if (!in_use_ && size <= storage_.size)
  {
    in_use_ = true;
    return storage_.address();
  }      
  return ::operator new(size);      
}

void deallocate(void* pointer)
{
  if (pointer == storage_.address())
  {        
    in_use_ = false;
    return;
  }      
  ::operator delete(pointer);      
}

PM MAIL WWW Skype   Вверх
boostcoder
Дата 13.4.2011, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



mabrarov, Марат, здравствуйте ;)
по приведенной вами ссылке, читал, и не раз.
не могли бы Вы популярно объяснить, и, желательно с примером. буду сильно благодарен.
спасибо.


Это сообщение отредактировал(а) boostcoder - 13.4.2011, 02:13
PM WWW   Вверх
mabrarov
Дата 13.4.2011, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 12.1.2011
Где: Казань

Репутация: 8
Всего: 9



Цитата(boostcoder @ 13.4.2011,  01:39)
mabrarov, Марат, здравствуйте ;)
по приведенной вами ссылке читал, и не раз. не могли бы Вы популярно объяснить, и, желательно с примером. буду сильно благодарен.
спасибо.

А я думал, что уже достал Вас   smile 

Объяснить проще, чем в примерах Boost.Asio, я не смогу. К сожалению, проще уже некуда.
Могу только пояснить следующее: как любая система построенная по шаблону Proactor (да и вообще - как все многопоточные системы, базирующиеся на очередях - т.е. почти все более-менее "продвинутые" многопоточные системы, например, Intel TBB), asio активно использует очереди (в случае asio - это очереди из функциональных объектов). 

В связи с этим остро встает вопрос выделения памяти в таких очередях (особенно остро в свете многопоточности и кешей процессора). Intel TBB решает это своим "прокаченным-специализированным" аллокатором (и обещаниями повторно использовать выделяемые блоки). 

asio использует очень легкое и гибкое решение (и это не единственный случай!): позволяет использовать allocator per async operation (начиная с dev release 1.53 - во всех асинхронных операциях). И вот какая штука: в любом вменяемом (т.е. не "hello world") приложении количество одновременных однотипных асинхронных операций над одним и тем же объектом (например, socket или deadline_timer) всегда ограничено сверху. И зачастую это ограничение равно единице (Вы уже на него нарвались недавно).

Исходя из всего вышесказанного, зачастую, Вы можете просто заранее выделить непрерывный блок памяти, который будет удерживаться Вашим handler-ом (например, при помощи shared_ptr). Затем, каждый раз когда asio будет нужна память для чего-то временного (обычно, это память для расположения в очереди - IOCP или boost::asio::io_service::strand или даже deadline_timer), что связанно с асинхронной операцией, для которой Ваш handler является completion handler-ом - asio просто попросит об этом через Ваш же handler. При этом те гарантии что дает asio относительно custom memory allocation, гарантируют, что (при достаточном размере Вашего пред-аллоцированного блока памяти) Вы всегда сможете выделить  эту память из того самого, ранее выделенного, блока памяти.

Кроме того, гарантии asio позволяют удерживать этот "пред-аллоцированный блок памяти" самим же handler-ом (с небольшим ограничением на handler - см. доки по Boost.Asio 1.53, почти всегда это ограничение выполняется и уж точно всегда его можно легко обойти). Главное, хранить в handler-е не сам блок, а указатель на него (лучше -smart) - чтобы в блок помещался сам handler + что-то временное.

В моем проекте (http://sourceforge.net/projects/asio-samples) echo_server (и qt_echo_server, и, вообще, все "asio samples") вообще не выделяет память в куче при своей непосредственной работе (кроме приема новых входящих TCP-соединений, да и тут есть reuse). Custom memory allocation сводит все выделения памяти к тому коду, что я указал - т.е. никаких блокировок и даже никаких атомарных (interlocked) операций. Плюс, в теории (не могу до сих пор проверить) - это должно очень положительно сказаться на использовании CPU-кеша (+ учтите очень правильную реализацию strand-ов в asio).

Это сообщение отредактировал(а) mabrarov - 13.4.2011, 02:16
PM MAIL WWW Skype   Вверх
boostcoder
Дата 29.5.2011, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mabrarov @  13.4.2011,  02:14 Найти цитируемый пост)
allocator per async operation (начиная с dev release 1.53 - во всех асинхронных операциях)

возможно я не туда смотрю..
вот дока asio-1.4.9 входящая в состав boost-1.46.1: http://www.boost.org/doc/libs/1_46_1/doc/h...allocation.html
а вот дока asio-1.5.3 с офф. сайта: http://think-async.com/Asio/asio-1.5.3/doc...allocation.html

не вижу разницы.
или я не туда смотрю?
PM WWW   Вверх
mabrarov
Дата 30.5.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 12.1.2011
Где: Казань

Репутация: 8
Всего: 9



Цитата(boostcoder @ 29.5.2011,  06:52)
Цитата(mabrarov @  13.4.2011,  02:14 Найти цитируемый пост)
allocator per async operation (начиная с dev release 1.53 - во всех асинхронных операциях)

возможно я не туда смотрю..
вот дока asio-1.4.9 входящая в состав boost-1.46.1: http://www.boost.org/doc/libs/1_46_1/doc/h...allocation.html
а вот дока asio-1.5.3 с офф. сайта: http://think-async.com/Asio/asio-1.5.3/doc...allocation.html

не вижу разницы.
или я не туда смотрю?

Вот и я не увидел. Но в release notes к asio-1.5.3 все четко сказано. А уж в коде я сразу "порылся" 8) - ждал этого с самого рождения asio.
Не увидел и написал Christopher M. Kohlhoff об этом. Он вежливо поблагодарил за замеченную неточность и... ничего не исправил.

PM MAIL WWW Skype   Вверх
boostcoder
Дата 30.5.2011, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mabrarov @  30.5.2011,  10:07 Найти цитируемый пост)
и... ничего не исправил

 smile 
"великий OpenSource" (с)

остается ждать.
PM WWW   Вверх
mabrarov
Дата 30.5.2011, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 12.1.2011
Где: Казань

Репутация: 8
Всего: 9



К слову, документация у Christopher M. Kohlhoff ну просто очень и очень хорошая (только надо не забывать, что примеры в ней тоже являются обязательным чтивом). 
Думаю:
1) когда asio-1.5.3 войдет в Boost C++ Libraries, все будет исправлено;
2) сразу после выхода asio-1.5.3 Chris уже должен был готовиться к BoostCon 2011;
3) судя по тому, что я читал в рассылке asio-users, он действительно занят коммерческими проектами, остается только поражаться тому, как он находит время и силы и вносит столь серьезные (и долгожданные) изменения, как move semantic support и custom memory allocation support for SSL async operations. 

PM MAIL WWW Skype   Вверх
boostcoder
Дата 30.5.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mabrarov @  30.5.2011,  10:47 Найти цитируемый пост)
документация у Christopher M. Kohlhoff ну просто очень и очень хорошая

не могу согласиться. увы :(

полагаю, сейчас отпишется не один программист, разделяющий мою точку зрения ;)
ибо я такое слышу каждый день(ну почти) от знакомых и коллег.
PM WWW   Вверх
mabrarov
Дата 30.5.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 12.1.2011
Где: Казань

Репутация: 8
Всего: 9



Цитата(boostcoder @ 30.5.2011,  10:54)
полагаю, сейчас отпишется не один программист, разделяющий мою точку зрения ;)
ибо я такое слышу каждый день(ну почти) от знакомых и коллег.

Радует, значит про Asio на просторах СНГ слышали и даже используют.
А если чего-то в документации Asio не хватает, то... для этого и существуют asio samples. Дай бог времени и желания - напишу пару статей на русском про наиболее частые ошибки разработчиков, пытающихся использовать Asio вопреки определенным в документации ограничениям/гарантиям.
Ну и да, это Open Source (и даже не GPL) - поэтому прежде чем переводить production code на Boost.Asio я внимательно изучал его исходники. Это многое открывает, особенно в плане понимания производительности Asio в сравнении с "raw WinSock".
Сравните документацию по Boost.Asio с документацией по ACE или даже с книгами по ACE.
PM MAIL WWW Skype   Вверх
boostcoder
Дата 30.5.2011, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mabrarov @  30.5.2011,  11:25 Найти цитируемый пост)
для этого и существуют asio samples

вставьте-ка лучше ссылку в подпись. найти будет легче. и, возможно, гугл проиндексирует.

Цитата(mabrarov @  30.5.2011,  11:25 Найти цитируемый пост)
Сравните документацию по Boost.Asio с документацией по ACE или даже с книгами по ACE

когда я только начал постигать _network_programming_in_c++_, я пересмотрел несколько библиотек, и ACE одна из них. но от нее я отказался, в виду монструозности. поэтому не юзал. и о качестве документации вряд-ли смогу сказать уверенно.

PM WWW   Вверх
Google
  Дата 23.3.2017, 23:10 (ссылка)  





  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1046 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.