LINUX.ORG.RU

С++ и сокеты, архитектура многопоточности


0

2

Из сокета принимаются данные, парсинг происходит в отдельном потоке, когда мы распарсили данные - возвращаемся в основной поток и добавляем в очередь запись по которой данные будут записаны в файл. Затем в определенный момент очищаем очередь записывая все в файл. Используется pthread. Можно ли как-то улучшить данную архитектуру современными средствами С++? Заранее спасибо.


С++11 мультипоточная библиотека в помощь

valner
()
Ответ на: комментарий от Debasher

У нас в гугле новые проекты пишут в том числе на плюсах. Но да, когда есть армия задротов, то есть ресурсы повыжимвать такты. Но к плюсам тоже прибегают не всегда. Часто нет смысла

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

то есть ресурсы повыжимвать такты

Оперативная память уже не ресурс? Или 64 Гб хватит всем?

anonymous
()
Ответ на: комментарий от anonymous

Иногда не ресурс, особенно для Java кода, которые перебрасывает и обрабатывает сообщения из нескольких С++ систем, которые компактно хранят данные в ОЗУ

vertexua ★★★★★
()

А зачем что то улучшать - где ботлнек? Сдается мне что ключевое слово здесь «определенный момент».

Лочится ли очередь пока происходит запись?

Сокет читаешь синхронно? Сокет один, или один на клиента, клиент один?

В общем случае:

Boost.Asio +1

batbko
()

Подумай о boost::asio. Суть выйдет такая: один поток обработки, в нем запущен цикл обработки событий boost::asio::io_service. Все операции с сокетами (boost::asio::ip::tcp::socket) только в этом потоке, т.к. их класс сокета не потокобезопасен. Операции - асинхронный send (async_send) и асинхронный recv (async_receive) - оба не блокируют поток и вызывают в нем же callback по завершении. Обработка, например, в этом же потоке прямо в коллбэке.

Pavval ★★★★★
()

Как уже написали, boost::asio, а к нему (почти обязательно) в придачу shared_ptr/weak_ptr, enable_shared_from_this и boost::bind/лямбды. С++ asio - хорошая библиотека.

dave ★★★★★
()

Как вариант, есть еще libev, но там, скорее всего, не будет многопоточности на уровне клиентского приложения при обработке сокетов - совершенно другая модель, другой мультиплексор по сокетам. Тоже хорошая библиотека, но мне не нравится, что на нее вечно сердит valgrind, или просто готовить libev не умею :) Причем, судя по ману на libev, автор прекрасно осведомлен о такой проблеме.

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.