Ho esaminato il sito Web di redis e ho scoperto che il redis non è progettato per una CPU multi-core. La mia domanda è:perché è così?
È una decisione progettuale.
Redis è a thread singolo con epoll/kqueue e scala indefinitamente in termini di concorrenza I/O. [email protected] (creatore di Redis)
Un motivo per scegliere un approccio basato sugli eventi è la sincronizzazione tra i thread ha un costo sia a livello di software (complessità del codice) che di hardware (commutazione del contesto). Aggiungi a questo che il collo di bottiglia di Redis è solitamente la rete , non la CPU. D'altra parte, un'architettura a thread singolo ha i suoi vantaggi (ad esempio la garanzia di atomicità).
Pertanto i loop di eventi sembrano un buon progetto per un efficiente &scalabile sistema come Redis.
Inoltre, se sì, come possiamo utilizzare il 100% delle risorse della CPU con Redis su una CPU multi-core.
L'approccio Redis alla scalabilità su più core è sharding , principalmente insieme a Twemproxy.
Tuttavia, se per qualche motivo vuoi ancora utilizzare un approccio multi-thread, dai un'occhiata a Thredis ma assicurati di aver compreso le implicazioni di ciò che ha fatto il suo autore (non puoi usarlo come master di replica, per esempio).