2

定義上、真のスレッドはメモリを共有しないため、データを共有できません。

ただし、サーバー内の任意のスレッド内から更新でき、すべてのスレッドで共有 (静的) される実行中の接続数 (接続だけでなく、他のいくつかのもの) を保持する方法を探しています。 . どうすればいいですか?

いくつかのメモ:

  • パフォーマンスが重要であるため、データベースも外部サーバー接続もありません。できれば Memcached もありません

  • このデータは、1秒間に数千回更新されることを意図しています

  • データは、1 つのスレッドから更新された後、新しい値を使用して、他のすべてのスレッドで即座に使用できる必要があります。

  • 理想的には、データは複数のスレッドで同時に利用できる必要があります

4

1 に答える 1

2

Xcacheを使用すると、次の API を使用できます。

int   xcache_inc(string name [, int value [, int ttl]])

これにより、 によって識別される値がアトミックにインクリメントされname、リクエスト間で存続する共有メモリに格納されます。Apache で実行中のスレッドから値を取得するには、次のようにします。

mixed xcache_get(string name)

注: Apache (httpd) を再起動すると、これらの値は失われます。

注 2: 定義上、スレッドメモリを共有し、同じプロセス内で実行されている場合はデータを簡単に共有します。パフォーマンスが重要であり、大量のデータが並行して処理され、潜在的に遅い IPC や複雑な共有メモリ ソリューションではなく、スレッド間で調整される場合に、これらを使用する主な理由の 1 つです。ただし、スレッド間でデータを共有することは複雑であり、特にデータが変更可能であり、課題を完全に理解している人が行う必要があります。

于 2013-11-12T05:00:35.777 に答える