C / C ++ Высокочастотная программа обмена сообщениями - PullRequest
1 голос
/ 04 декабря 2011

Недавно я столкнулся с сетевыми платформами POCO и ACE, а также с Boost, о котором я уже знал.

Мой вопрос: эти библиотеки быстрее передают сообщения, чем обычная программа на C с сокетами Беркли? Являются ли эти библиотеки популярными только потому, что в них добавлены функции многопоточности и т. Д., Что способствует повышению производительности?

Я хочу написать высокопроизводительную систему обмена сообщениями в Linux, но я не могу решить, стоит ли мне избегать ACE, POCO и Boost и вместо этого просто использовать функции потоковой ОС Linux вместе с сокетами Беркли?

Другими словами, я не беспокоюсь об общем коде, делаю мой код «дружественным к STL» и т. Д. Я просто хочу сырой производительности (без необходимости писать ассемблер!).

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Вы уже смотрели на 0MQ (он же ZeroMQ) ?Цитирование с их сайта:

ØMQ \zeromq\:
 Ø  The socket library that acts as a concurrency framework.
 Ø  Faster than TCP, for clustered products and supercomputing.
 Ø  Carries messages across inproc, IPC, TCP, and multicast.
 Ø  Connect N-to-N via fanout, pubsub, pipeline, request-reply.
 Ø  Asynch I/O for scalable multicore message-passing apps.
 Ø  Large and active open source community.
 Ø  30+ languages including C, C++, Java, .NET, Python.
 Ø  Most OSes including Linux, Windows, OS X.
 Ø  LGPL free software with full commercial support from iMatix.
0 голосов
/ 04 декабря 2011

Вы спрашиваете много, не рассказывая много о вашем случае использования.Из того, что вы пишете, кажется, вам нужно сделать обмен сообщениями между компьютерами, подключенными к сети.Это все одноранговые, или одни машины "серверы", а другие клиенты?Такие библиотеки, как ACE, предлагают все: от простых удобных классов для упаковки любого типа сокетной связи и многопоточности до полнофункциональных серверов с использованием практически любой модели, о которой вы только можете подумать.

Если вам нужны какие-то серверы,весь спор о том, следует ли вам использовать многопоточность или однопоточную асинхронность.Опять же, в зависимости от варианта использования, один будет «лучше» другого (это действительно зависит от того, что вам нужно сделать).

В сетевой части вам нужны надежные заказанные сообщения или каждыйсообщение устарело к тому времени, когда вы сможете обнаружить, что пакет потерян?Для надежности вы обычно строите поверх TCP, но в зависимости от того, что вам нужно сделать, вы можете разработать протокол на UDP, который будет работать быстрее.

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

...