Tengo múltiples eventos de procesamiento de subprocesos. Quiero asignar una marca de tiempo de un nanosegundo a cada evento. Sin embargo, debe ser una identificación única. Entonces, en el extraño caso de que lleguen dos eventos de modo que se les asigne la misma marca de tiempo, quiero que uno de ellos se incremente en un nanosegundo. Dado que la precisión real no está en el nivel de nanosegundos, está bien en cuanto a la naturaleza del sello de tiempo del sistema.Identificación única de marca de tiempo de alto rendimiento para varios subprocesos en Haskell
En un hilo, este es un problema trivial. Pero a través de múltiples hilos, se vuelve más desafiante. El rendimiento es absolutamente crítico, por lo que la idea de sincronizar ingenuamente en un tipo de generador de identificación típico parece bloquear demasiado.
¿Hay algún enfoque que resuelva esto con un bloqueo mínimo o sin bloqueo?
@ehird: por favor no realice cambios no triviales en mi publicación, publique un comentario en su lugar si tiene algo que agregar. –
Lo siento, sentí que el cambio que estaba haciendo era bastante trivial, pero luego vi otros dos errores antes de guardar. Actualmente, 'getUnique' siempre devuelve' ⊥', y 'counter' puede insertarse en otras expresiones, duplicando la variable y rompiendo el código.Además, si se arreglaran ambos, entonces 'getUnique' tendría una fuga de espacio causada por la acumulación de thunk en las ejecuciones sucesivas. (Por cierto, el módulo estándar 'Data.Unique' en realidad ya proporciona esta API.) – ehird
@ehird: Ese es exactamente el tipo de información que quería saber, gracias. –