Ich habe mir die Redis-Website angesehen und festgestellt, dass Redis nicht für eine Mehrkern-CPU ausgelegt ist. Meine Frage ist, warum ist das so?
Es ist eine Designentscheidung.
Redis ist Single-Threaded mit epoll/kqueue und lässt sich hinsichtlich der E/A-Parallelität unbegrenzt skalieren. [email protected] (Ersteller von Redis)
Ein Grund für die Wahl eines ereignisgesteuerten Ansatzes ist die Synchronisation zwischen Threads geht mit Kosten sowohl auf der Software- (Codekomplexität) als auch auf der Hardwareebene (Kontextwechsel) einher. Hinzu kommt, dass der Flaschenhals von Redis meist das Netzwerk ist , nicht die CPU. Andererseits hat eine Singlethread-Architektur ihre eigenen Vorteile (zum Beispiel die Garantie der Atomarität).
Daher scheinen Ereignisschleifen ein gutes Design für ein effizientes zu sein &skalierbar System wie Redis.
Falls ja, wie können wir CPU-Ressourcen mit Redis auf Mehrkern-CPUs zu 100 % auslasten?
Der Redis-Ansatz zum Skalieren über mehrere Kerne ist Sharding , meist zusammen mit Twemproxy.
Wenn Sie jedoch aus irgendeinem Grund immer noch einen Multithread-Ansatz verwenden möchten, werfen Sie einen Blick auf Thredis, aber stellen Sie sicher, dass Sie die Auswirkungen dessen verstehen, was der Autor getan hat (Sie können es beispielsweise nicht als Replikations-Master verwenden). P>