Saltar a contenido

Semaphores

La interfaz de Semaphore es donde los administradores pueden gestionar todos los semáforos creados en el sistema.

Si una parte de una regla o rulebook ha sido etiquetada con el semáforo, la entrada del semáforo será creada en el sistema. Cada vez que la ejecución del código de la regla ingresa a la región con semáforo, solicitará exclusividad antes de ejecutar la operación (y cualquier operación hija).

Crear un semáforo con el REPL

Inicialmente, cuando aún no se han creado semáforos por ninguna regla, la interfaz no contendrá datos. Ejecute una regla con una operación que tenga un semáforo configurado para inicializar una entrada de semáforo.

Una forma fácil de inicializar un semáforo es dirigirse al REPL y ejecutar el siguiente código JS Server:

var sem = require("cla/sem");
var util = require("cla/util");
var ret = sem.take('mysem', function(){
    util.sleep(10); // bloqueará el semáforo durante 10 segundos
});

Gestionar slots

Una vez que se crea un semáforo, serán visibles en el panel de administración de Semaphores.

Cada semáforo definido en el sistema será visible en el lado izquierdo, el explorador de Semaphore. Para cada semáforo, se mostrarán los siguientes campos:

  • slots - el número de slots disponibles. Esto puede aumentarse o disminuirse con las flechas arriba/abajo junto al nombre del semáforo. El valor predeterminado es 1, lo que significa que solo un proceso puede usar el semáforo a la vez.

  • busy - este es el número de slots ocupados. El valor predeterminado es 0 lo que significa que ningún proceso está usando ningún slot.

  • waiting - número de procesos en cola esperando slots disponibles.

Aumentar los slots disponibles

Los semáforos por defecto no permiten ejecuciones simultáneas. Sin embargo, el número de ejecuciones concurrentes permitidas puede aumentarse usando las flechas arriba/abajo junto al nombre del semáforo.

Note

Reducir el número de slots disponibles una vez que ya están ocupados no tendrá ningún efecto en los procesos en curso, solo en nuevas solicitudes de semáforo entrantes.

Bloqueo global de semáforo

Establecer el número de slots en 0 forzará el encolado de todos los procesos que usen ese semáforo.

Esta es una forma elegante de prevenir que usuarios y procesos accedan a un proceso durante un cierto período de tiempo.

Slots infinitos

Si el número de slots se reduce (flecha hacia abajo) más allá de 0, estarán disponibles slots infinitos y se mostrará un signo de infinito . Eso se traduce en deshabilitar el control de semáforo por completo.

Gestión en vivo de semáforos

Una vez que un proceso está en cola para tomar un semáforo, o está ocupado dentro de una sección de semáforo, el proceso será visible como una fila en el panel del lado derecho.

Cada fila tiene un icono que indica el estado del proceso:

Icono Estado Significado
waiting proceso esperando un slot disponible
busy semáforo tomado y proceso en ejecución
cancelled proceso fue cancelado por solicitud

Hay más estados, visibles en la referencia Legend en la parte inferior del panel, pero generalmente son efímeros en duración y o no deberían ser visibles la mayoría del tiempo o durarán una fracción de segundo hasta que desaparezca de la lista.

Hay 2 acciones disponibles para cada fila:

  • Grant
  • Cancel

Grant

Grant está destinado a liberar procesos en cola -- procesos esperando un semáforo.

Esta acción ignora la restricción de slot, saltándola por completo.

Por ejemplo, digamos que tiene un semáforo X de un solo slot y la siguiente cola de procesos:

Proceso Estado
A busy
B waiting
C waiting

En el ejemplo anterior, el proceso B está esperando en cola que A libere el semáforo X.

Si usted grant el proceso B, comenzará inmediatamente y no consumirá ningún slot. Una vez que el proceso A termine, el proceso C comenzará aunque el proceso B ya esté en ejecución.

La acción de cancelar está destinada a resolver situaciones críticas de cola, principalmente para situaciones de emergencia donde el proceso B debe ejecutarse inmediatamente sin importar la disponibilidad de slots.

Cancel

La acción Cancel le dirá al proceso en espera que falle.

Esto está destinado a prevenir que los procesos en la cola tomen semáforos y fallen elegantemente con un error Semaphore cancel.

Cancelar procesos en la cola puede ser útil en situaciones donde un recurso externo crítico (por ejemplo, un servidor) está bloqueado o demasiado lento y requiere intervención manual de los administradores antes de que cualquier otro proceso interactúe con él.

En el caso anterior, por ejemplo, los administradores deberían:

  1. reducir el conteo de slots del semáforo a 0

  2. cancelar cualquier proceso pendiente en la cola.