J'ai consulté le site Web de Redis et j'ai découvert que Redis n'était pas conçu pour un processeur multicœur. Ma question est :pourquoi en est-il ainsi ?
C'est une décision de conception.
Redis est monothread avec epoll/kqueue et évolue indéfiniment en termes de simultanéité d'E/S. [email protected] (créateur de Redis)
L'une des raisons de choisir une approche basée sur les événements est que la synchronisation entre les threads a un coût à la fois au niveau logiciel (complexité du code) et au niveau matériel (commutation de contexte). Ajoutez à cela que le goulot d'étranglement de Redis est généralement le réseau , pas le processeur. En revanche, une architecture mono-thread a ses propres avantages (par exemple la garantie d'atomicité).
Par conséquent, les boucles d'événements semblent être une bonne conception pour un efficace &évolutif système comme Redis.
De plus, si oui, comment pouvons-nous utiliser à 100 % les ressources du processeur avec redis sur un processeur multicœur.
L'approche Redis pour évoluer sur plusieurs cœurs est le sharding , principalement avec Twemproxy.
Cependant, si pour une raison quelconque vous souhaitez toujours utiliser une approche multithread, jetez un œil à Thredis mais assurez-vous de bien comprendre les implications de ce que son auteur a fait (vous ne pouvez pas l'utiliser comme maître de réplication, par exemple).