런타임 스레딩 모델

런타임 스레드, 풀 및 디스패치 규칙이 NetLogic 실행, 작업 선택 및 성능에 어떤 영향을 미치는지 알아보십시오.

개요

FactoryTalk Optix 응용 프로그램
는 여러 실행 모델을 사용합니다. 런타임 작업은 하나의 전역 스레드에서 실행되지 않습니다. 런타임은 공유 우선 순위 기반 스레드 풀, 타이머 풀 및 전용 서브시스템 스레드를 사용합니다.
이 모델은 NetLogic 코드가 실행되는 방식, 콜백이 직렬화되는 방식, 그리고 시스템 부하가 응용 프로그램 동작을 어떻게 변경하는지에 영향을 줍니다.

공유 스레드 풀 및 전용 스레드

공유 우선 순위 기반 스레드 풀은 일반 런타임 작업을 실행합니다. 런타임은 우선 순위와 사용 가능한 작업자 스레드에 따라 작업을 예약합니다. 타이머 풀은 타이머 기반 콜백을 처리합니다. 일부 서브시스템은 공유 풀 대신 전용 스레드를 사용합니다.
전용 서브시스템 스레드는 응답성을 유지하거나 순서를 지켜야 하는 작업을 격리합니다. 통신 드라이버는 드라이버 설계 및 프로토콜 요구 사항에 따라 자체 스레딩 모델을 사용할 수 있습니다.

디스패치 및 직렬화

런타임은 많은 작업에 친화도 기반 디스패치를 사용합니다. 동일한 런타임 개체 또는 실행 컨텍스트를 대상으로 하는 작업은 동일한 친화도에서 직렬화된 순서로 실행될 수 있습니다. 직렬화는 동일한 상태에 대한 동시 액세스를 줄이지만, 모든 런타임 작업이 하나의 스레드에서 실행된다는 의미는 아닙니다.
독립적인 개체 또는 서브시스템은 서로 다른 스레드에서 병렬로 실행될 수 있습니다. 공유 리소스는 코드가 서로 다른 컨텍스트에서 실행될 수 있는 경우에도 여전히 스레드 안전한 설계를 필요로 합니다.

NetLogic 실행 모델

NetLogic 코드는 서로 다른 런타임 컨텍스트에서 실행될 수 있습니다.
Start()
및
Stop()
은 NetLogic 수명 주기에 설명된 NetLogic 수명 주기 규칙을 따릅니다. 내보낸 메서드, 이벤트 콜백, 타이머 및 비동기 작업은 호출자와 런타임 스케줄러에 따라 서로 다른 스레드에서 실행될 수 있습니다.
나중에 호출해도 동일한 스레드를 재사용한다고 가정하지 마십시오. 동시 액세스가 가능한 경우 공유 상태가 명시적이고 제한적이며 보호되도록 NetLogic 코드를 설계하십시오.

장기 실행 작업

LongRunningTask
는 정보 모델에 액세스해야 하는 길거나 차단되는 작업에 선호되는 옵션입니다. 장기 실행 작업을 수명 주기 실행과 분리하고 런타임 동작의 응답성을 유지하는 데 도움이 됩니다.
프로젝트 노드에 액세스하지 않는 작업에만
async/await
또는 .NET 스레드 풀 API를 사용하십시오. API 세부 정보는 생성자: LongRunningTask(action, executingNode)를 참조하십시오.

하드웨어 고려 사항

런타임 처리량은 CPU 코어 수와 CPU 클럭 속도에 모두 좌우됩니다. 코어 수가 많을수록 잠재적인 병렬성이 증가합니다. 클럭 속도가 높을수록 단일 스레드 성능과 직렬화된 워크로드가 향상됩니다.
하이퍼 스레딩 또는 동시 멀티스레딩(SMT)은 CPU 사용을 향상시킬 수 있지만, 논리 코어는 더 많은 물리 코어와 동일한 성능을 제공하지 않습니다. 성능 향상은 워크로드 유형, 차단 동작 및 경합에 따라 달라집니다.

설계 원칙

런타임 실행을 위한 NetLogic 코드를 설계할 때는 다음 원칙을 사용하십시오.
  • Start()
    및
    Stop()
    은 짧게 유지하십시오.
  • 차단되거나 장기 실행되는 작업은
    LongRunningTask
    또는 다른 적절한 작업 유형으로 이동하십시오.
  • 하위 시스템 전반에서 스레드 ID 또는 콜백 순서에 대해 가정하지 마십시오.
  • 공유되는 변경 가능한 상태를 보호하십시오.
  • 공유 리소스에 대한 경합을 줄이십시오.
  • 현실적인 CPU 부하, I/O 부하 및 통신 부하 조건에서 테스트하십시오.
의견을 작성 부탁드립니다.
이 자료에 대한 문의사항이나 요청사항이 있습니까? 여기에 요청사항을 작성 부탁드립니다.
Normal