1

最近、POCO および ACE ネットワーク フレームワークと、私が既に知っていた Boost に出会いました。

私の質問は、これらのライブラリは、バークレー ソケットを使用した通常の C プログラムよりも、メッセージの受け渡しが高速ですか? これらのライブラリは、パフォーマンス要因に役立つマルチスレッドなどの機能を追加するためだけに人気がありますか?

Linux で高性能メッセージング システムを作成したいのですが、 ACE 、 POCO 、および Boost を回避し、代わりに Linux スレッド OS 関数とバークレー ソケットを使用する必要があるかどうかはわかりません。

言い換えれば、私は自分のコードを "STL フレンドリー" にするなど、一般的なコードに悩まされることはありません。生のパフォーマンスが必要なだけです (アセンブリを記述する必要はありません!)。

4

3 に答える 3

1

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.
于 2011-12-03T20:58:35.950 に答える
0

ユースケースについてあまり共有せずに、多くのことを尋ねています。あなたが書いたことから、ネットワークに接続されたマシン間でメッセージングを行う必要があるようです。すべてがピア ツー ピアですか、それとも一部のマシンが「サーバー」で、他のマシンがクライアントですか? ACE などのライブラリは、あらゆるタイプのソケット通信とマルチスレッドをラップするための単純な便利なクラスから、考えられるほぼすべてのモデルを使用する本格的なサーバーまで、すべてを提供します。

ある種のサーバーが必要であると仮定すると、スレッドを使用するか、シングル スレッドの非同期を使用するかについて全体的な議論があります。繰り返しますが、ユースケースに応じて、一方が他方よりも「優れた」ものになります (実際には何をする必要があるかによって異なります)。

ネットワーク部分では、信頼性の高い順序付けされたメッセージが必要ですか、それとも、パケットが失われたことを検出できるようになるまでに各メッセージは時代遅れになっていますか? 信頼性のために、通常は TCP の上に構築しますが、必要に応じて、より高速に実行される UDP のプロトコルを設計できます。

要件が非常に単純で基本的なものである場合や、以前にネットワーク化されたマルチスレッド コードを大量に作成したことがある場合を除き、自分ですべてを再発明しようとするよりも、適切に作成されたパッケージを使用する方がよいでしょう。

于 2011-12-03T21:10:31.057 に答える