タグ

performanceとthreadに関するyukimori_726のブックマーク (2)

  • mmap+POSIXセマフォによる高速なプロセス間通信 - mp::ipc_vector - Blog by Sadayuki Furuhashi

    同じホストの異なるプロセスの間で、高速な通信を行いたいときがあります: fork() したプロセスと通信したい場合や、「アプリケーションたくさん → localhostのクライアントデーモン1つ → サーバー」という形で接続したい*1 *2 場合などなど。 あるいは共有リソースを管理するプロセスが必要なとき、具体的には memcached が localhost で動いるイメージ。 こんなときに高速なプロセス間通信がしたい。スレッドなみに高速だと嬉しい。 そこで、POSIXセマフォを使って排他制御をしつつ、mmap(2) を使って共有したメモリの上でデータをやりとりすることで、高速にプロセス間で通信を行えるようにするライブラリを作ってみました。 さっそくベンチマーク: 時間 スループット換算 UNIXドメインソケット 4.44 sec 25 MB/s ipc_vector(sleepなし)

    mmap+POSIXセマフォによる高速なプロセス間通信 - mp::ipc_vector - Blog by Sadayuki Furuhashi
  • Kazuho@Cybozu Labs: 「サーバ書くなら epoll 使うべき」は、今でも正しいのか

    多数のTCP接続をハンドリングするサーバを書くなら、1コネクション1スレッドのモデルではなく、epollやkqueueのようなイベント駆動型のI/O多重化を行うべきだ、と言われます。だが、そのような主張は、「C10K問題」が書かれた2002年から7年経過した今でも有効なのでしょうか? echoサーバを書いて、ベンチマークを取ってみることにしました。 ふたつのグラフは、いずれも接続数とスループットの関係を表しています。最初のグラフは、全接続がアクティブに通信した場合、あとのグラフは、全接続のうち小数のコネクションが順次アクティブになっていく、というモデルです。これらのグラフから、以下ようなことが読み取れます。 epoll も per-thread モデルも、良くスケールする epoll は、ワークセットが小さい場合に (最大50%) per-thread モデルよりも高速 少なくとも、1コネ

  • 1