Modelo de subprocesos de tiempo de ejecución
Obtenga información sobre cómo los subprocesos, los grupos y las reglas de distribución de tiempo de ejecución afectan a la ejecución de NetLogic, la selección de tareas y el rendimiento.
Información general
Aplicaciones FactoryTalk Optix
utiliza varios modelos de ejecución. El trabajo de tiempo de ejecución no se ejecuta en un único subproceso global. El tiempo de ejecución utiliza un grupo compartido de subprocesos basado en prioridades, un grupo de temporizadores y subprocesos dedicados para subsistemas.Este modelo afecta a cómo se ejecuta el código NetLogic, cómo se serializan las devoluciones de llamada y cómo la carga del sistema cambia el comportamiento de la aplicación.
Grupos de subprocesos compartidos y subprocesos dedicados
El grupo compartido de subprocesos basado en prioridades ejecuta el trabajo general de tiempo de ejecución. El tiempo de ejecución programa el trabajo por prioridad y por los subprocesos de trabajo disponibles. El grupo de temporizadores gestiona las devoluciones de llamada basadas en temporizadores. Algunos subsistemas utilizan subprocesos dedicados en lugar de los grupos compartidos.
Los subprocesos dedicados de subsistemas aíslan el trabajo que debe seguir siendo receptivo o mantenerse ordenado. Los variadores de comunicación pueden utilizar su propio modelo de subprocesos, en función del diseño del controlador y de las necesidades del protocolo.
Despacho y serialización
El tiempo de ejecución utiliza el despacho basado en afinidad para muchas operaciones. El trabajo que tiene como destino el mismo objeto de tiempo de ejecución o contexto de ejecución puede ejecutarse con la misma afinidad y en orden serializado. La serialización reduce el acceso simultáneo al mismo estado, pero no significa que todo el trabajo de tiempo de ejecución se ejecute en un único subproceso.
Los objetos o subsistemas independientes pueden ejecutarse en paralelo en diferentes subprocesos. Los recursos compartidos siguen requiriendo un diseño seguro para subprocesos cuando el código puede ejecutarse desde diferentes contextos.
Modelo de ejecución de NetLogic
El código NetLogic se puede ejecutar desde diferentes contextos de tiempo de ejecución.
Start()
y Stop()
siguen las reglas del ciclo de vida de NetLogic descritas en Ciclo de vida de NetLogic. Los métodos exportados, las devoluciones de llamada de eventos, los temporizadores y las tareas asincrónicas se pueden ejecutar en diferentes subprocesos, en función del autor de la llamada y del programador de tiempo de ejecución.No asuma que las llamadas posteriores vuelven a utilizar el mismo subproceso. Diseñe el código NetLogic de modo que el estado compartido sea explícito, limitado y esté protegido cuando sea posible el acceso simultáneo.
Tarea de larga ejecución
LongRunningTask
es la opción preferida para operaciones largas o de bloqueo que deben acceder al modelo de información. Separa el trabajo de larga ejecución de la ejecución del ciclo de vida y ayuda a mantener la capacidad de respuesta del comportamiento en tiempo de ejecución.Utilice
async/await
o las API del grupo de subprocesos de .NET solo para el trabajo que no accede a los nodos del proyecto. Para obtener más información sobre la API, consulte Constructor: LongRunningTask(action, executingNode).Consideraciones de hardware
El rendimiento en tiempo de ejecución depende tanto del número de núcleos de la CPU como de la velocidad de reloj de la CPU. Más núcleos aumentan el paralelismo potencial. Una velocidad de reloj más alta mejora el rendimiento de un solo subproceso y las cargas de trabajo serializadas.
Hyper-Threading, o multithreading simultáneo (SMT), puede mejorar el uso de la CPU, pero los núcleos lógicos no igualan el rendimiento de más núcleos físicos. Las ganancias de rendimiento dependen del tipo de carga de trabajo, el comportamiento de bloqueo y la contención.
Principios de diseño
Utilice estos principios al diseñar código NetLogic para la ejecución en tiempo de ejecución:
- Mantenga brevesStart()yStop().
- Mueva el trabajo de bloqueo o de larga ejecución aLongRunningTasku otro tipo de tarea adecuado.
- Evite hacer suposiciones sobre la identidad del subproceso o el orden de las devoluciones de llamada entre subsistemas.
- Proteja el estado mutable compartido.
- Reduzca la contención en los recursos compartidos.
- Pruebe con una carga de CPU, una carga de E/S y una carga de comunicación realistas.
threading model
thread pool
timer pool
NetLogic
LongRunningTask
communication driver
performance
Entregue su opinión