Por qué Redis tiene un solo subproceso
(Tutorial recomendado: tutorial de Redis)
Redis es una operación basada en memoria. La CPU no es el cuello de botella de Redis. tamaño de la memoria de la máquina o ancho de banda de la red. Dado que el subproceso único es fácil de implementar y la CPU no se convertirá en un cuello de botella, es natural que Redis adopte una solución de subproceso único.
Razones detalladas:
1. No se requiere el consumo de rendimiento de varios bloqueos.
Las estructuras de datos de Redis no son todas estructuras simples de clave-valor; listas y hashes, que pueden requerir operaciones muy detalladas, como agregar un elemento al final de una lista larga, agregar un objeto a un hash o eliminar un objeto de un hash. Estas operaciones pueden requerir grandes cantidades de bloqueo, lo que genera aumentos significativos en la sobrecarga de sincronización.
En resumen, en un caso de un solo subproceso, no es necesario pensar en bloqueos, no es necesario agregar ni liberar bloqueos y no es necesario lidiar con la sobrecarga de rendimiento. de posibles bloqueos.
2. Programa de clúster multiproceso de un solo subproceso
El poder del subproceso único es realmente muy poderoso y la eficiencia de cada núcleo también es muy alta. El subproceso múltiple es naturalmente más alto que el de un solo subproceso, pero en el entorno informático actual, incluso el límite superior de subprocesos múltiples de una sola máquina a menudo no puede satisfacer las necesidades. Lo que es necesario mapear más a fondo son los programas de clúster de múltiples servidores. , en el que la tecnología multihilo no se utiliza como es habitual.
3. Consumo de CPU
El uso de un solo subproceso evita cambios de contexto y condiciones de carrera innecesarios, y no hay consumo de CPU causado por el cambio de múltiples procesos o subprocesos. Pero, ¿qué pasa si la CPU se convierte en el cuello de botella de Redis o no desea dejar inactivos otros núcleos CUP en el servidor?
Considere iniciar varios procesos más de Redis. Redis es una base de datos de valores clave, no una base de datos relacional, y no existen restricciones entre los datos. Siempre que el cliente pueda distinguir qué claves se colocan en qué proceso de Redis.