redisのWebサイトを調べたところ、redisはマルチコアCPU用に設計されていないことがわかりました。私の質問は、なぜそうなのかということです。
これは設計上の決定です。
Redisはepoll/kqueueでシングルスレッド化されており、I/Oの同時実行性に関して無期限にスケーリングします。 [email protected](Redisの作成者)
イベントドリブンアプローチを選択する理由は、同期であるためです。 スレッド間では、ソフトウェア(コードの複雑さ)とハードウェアレベル(コンテキストスイッチング)の両方でコストがかかります。これに加えて、Redisのボトルネックは通常ネットワークです。 、CPUではありません。一方、シングルスレッドアーキテクチャには独自の利点があります(たとえば、アトミック性の保証)。
したがって、イベントループは、効率的なための優れた設計のように見えます。 &スケーラブル Redisのようなシステム。
また、そうであれば、マルチコアCPUでCPUリソースを100%使用する方法を教えてください。
複数のコアに拡張するためのRedisのアプローチは、シャーディングです。 、主にTwemproxyと一緒に。
ただし、何らかの理由でマルチスレッドアプローチを使用したい場合は、Thredisを確認しますが、作成者が行ったことの意味を理解してください(たとえば、レプリケーションマスターとして使用することはできません)。