Cómo Redis garantiza la atomicidad
Sin entrar en demasiados detalles, este artículo registra principalmente mis pensamientos sobre cómo garantizar la atomicidad en Redis, así como los problemas derivados de ello. Si tiene algún error o pregunta, no dude en contactarnos. Déjanos un comentario en la parte inferior.
La respuesta es simple, porque Redis es de un solo subproceso.
La pregunta es, dado que Redis es de un solo subproceso y puede garantizar la atomicidad, ¿cuál es su naturaleza asincrónica y sin bloqueo? ¿Cómo lograr asincronía y sin bloqueo en un solo hilo?
Después de consultar mucha información, descubrí que no tenía claros los conceptos de sincronización/asíncrono, bloqueo/no bloqueo y subproceso único/multiproceso. Esto se explicará brevemente a continuación.
Sincronización/asincrónica: en primer lugar, la sincronización y la asincronía provienen principalmente del mecanismo de notificación de mensajes.
Sincronización: Secuencia confiable de tareas en la que la finalización de una tarea debe depender de la finalización de otra, y ambas tienen éxito o fracasan. Cuando se produce una llamada sincrónica, la persona que llama debe esperar a que se obtenga el resultado antes de continuar con las tareas posteriores.
Asíncrono: no es necesario esperar a que se completen las tareas dependientes, solo a que se completen las propias tareas, por lo que es una secuencia de tareas poco confiable. Cuando se produce una llamada asincrónica, la persona que llama no necesita esperar a que se devuelva el resultado. La persona que llama puede hacer otras cosas y el componente llamado le notificará (estado, notificación, devolución de llamada) una vez que se complete el procesamiento.
Bloqueo/no bloqueo: el bloqueo y el no bloqueo están relacionados con el estado de la persona que llama mientras espera la notificación del mensaje. Es importante no confundirlo con la sincronización.
Bloqueo: mientras espera una notificación, la persona que llama no puede realizar ninguna otra operación y solo puede esperar tontamente a que llegue la notificación.
Sin bloqueo: a diferencia del bloqueo, la persona que llama puede realizar otras tareas.
No he leído el código fuente, consulte el siguiente artículo Arquitectura de red de Redis y modelo de subproceso único
Para resumir: para las solicitudes de red de Redis, Redis tendrá un EventLoop. que contiene dos matrices de eventos, disparado: eventos se usa para guardar eventos registrados y disparado se usa para guardar eventos.
Aquí se reflejan los procesos asincrónicos y sin bloqueo. El proceso es de un solo subproceso, por lo que no hay problemas de simultaneidad.
Pregunta 3: ¿Qué es la multiplexación, cuáles son las diferencias entre select, poll y epoll (por resolver)
La pregunta principal ha sido resuelta, esta pregunta se resolverá después Emití de nuevo.