LabVIEW에서 멀티태스킹
- 업데이트 날짜:2025-08-27
- 4분 (읽기 시간)
LabVIEW는 선점형 및 협력형 멀티스레팅을 사용합니다. 선점형 멀티스레딩을 가진 OS와 프로세서는 한정된 수의 스레드를 사용하므로, 특정한 경우에는 이런 시스템이 협력형 멀티스레딩 사용으로 돌아갑니다.
실행 시스템은 스레드를 사용하여 선점적으로 VI를 멀티태스크합니다. 그러나 사용 가능한 스레드 수는 한정되어 있습니다. 완전한 병렬 어플리케이션의 경우, 실행 시스템은 유효한 스레드가 사용 중일 때 협력형 멀티태스킹을 사용합니다. 또한, OS는 어플리케이션과 다른 작업 사이의 선점형 멀티태스킹을 다룹니다.
기본 실행 시스템
기본 실행 시스템은 활성화 작업의 큐를 유지합니다. 예를 들어 세 루프가 병렬로 실행되는 경우, 어느 시점에서나 한 작업이 실행되고 다른 두 작업은 큐에서 기다립니다. 모든 작업의 우선순위가 같다고 가정하면, 작업 중 하나가 특정한 시간동안 실행됩니다. 그 후 해당 작업은 큐의 끝으로 이동하고 다음 작업이 실행됩니다. 작업이 완료되면 실행 시스템은 큐에서 작업을 삭제합니다.
실행 시스템은 VI의 생성된 코드를 호출하여 큐의 첫 원소를 실행합니다. 일정 포인트에서, 해당 VI의 생성된 코드는 실행 시스템을 확인하여 실행 시스템이 다른 작업에 실행을 지정했는지 확인합니다. 지정하지 않은 경우, VI의 코드는 계속 실행됩니다.
동기화/차단 노드
블록다이어그램의 몇몇 노드 또는 아이템은 동기화되어 있습니다. 즉 다른 노드와 멀티태스크하지 않습니다. 멀티스레드 어플리케이션에서 이런 노드는 완료까지 실행되며, 노드가 실행되는 스레드는 해당 작업이 완료될 때까지 독점됩니다.
컨트롤 또는 어플리케이션 참조에 사용되는 [프로퍼티 노드]와 [인보크 노드], 컨트롤 참조의 값 프로퍼티도 UI 스레드와 동기화됩니다. 그러므로 많은 양의 데이터를 그래프에 디스플레이하는 경우와 같이 UI 스레드가 사용 중인 경우, 프로퍼티 노드 또는 인보크 노드는 UI 스레드가 현재 작업을 완료할 때까지 실행되지 않습니다.
공유 라이브러리 호출과 계산 함수는 동기적으로 실행됩니다. 대부분의 분석 VI와 데이터 수집 VI는 공유 라이브러리 호출을 포함하고 있으므로 동기적으로 실행됩니다. 단일 비 재호출 VI를 설정하여 공유 라이브러리를 호출함으로써 한 번에 하나의 스레드만이 비 재호출 공유 라이브러리를 호출하도록 합니다. 하나 이상의 재호출되지 않은 VI가 공유 라이브러리를 호출하는 경우, LabVIEW는 예상치 않은 결과를 반환할 수 있습니다.
대부분의 다른 노드는 비동기화되어 있습니다. 예를 들어 구조, I/O 함수, 타이밍 함수, subVI는 비동기적으로 실행됩니다.
어커런스 기다림, 타이밍, GPIB, VISA 함수와 시리얼 VI는 스레드를 점유하지 않고 작업이 완료되기를 기다릴 수 있습니다. 실행 시스템은 작업이 완료될 때까지 해당 작업을 큐에서 빼 놓습니다. 작업이 완료되면 실행 시스템은 해당 작업을 큐의 맨 끝에 놓습니다. 예를 들어, 사용자가 [세 개 버튼 대화 상자] VI가 디스플레이하는 대화 상자의 버튼을 클릭할 때 실행 시스템은 작업을 큐의 맨 끝에 놓습니다.
교착
교착은 둘 이상의 작업이 같은 시스템 리소스를 놓고 경쟁하여 어느 작업도 완료되지 못할 때 발생합니다. 교착의 예는 두 어플리케이션이 동시에 파일을 인쇄해야 하는 경우입니다. 스레드 1에서 실행되는 한 어플리케이션은 파일을 수집하여 다른 어플리케이션이 접근 못하도록 잠급니다. 스레드 2에서 실행되는 다른 어플리케이션도 프린터에 같은 작업을 합니다. OS가 리소스에 개입하거나 리소스를 해제하지 않는 비 선점형 환경에서는, 두 어플리케이션 모두 상대 어플리케이션이 리소스를 해제하기를 기다리지만, 이미 가지고 있는 리소스는 해제하지 않습니다. 교착을 피하기 위한 한 방법은 VI를 설정하여 같은 순서대로 공통 리소스에 접근하도록 하는 것입니다.
실행 시스템에서 사용자 인터페이스 관리하기
VI를 실행하는 것 외에, 실행 시스템은 사용자 인터페이스와의 상호작용을 조정해야 합니다. 버튼을 클릭하거나, 윈도우를 이동하거나, 슬라이드 컨트롤의 값을 변경할 때, 실행 시스템은 해당 작업을 관리하고 VI가 배경에서 계속 실행되도록 해야합니다.
싱글스레드 실행 시스템은 사용자 상호작용과 VI 실행에 번갈아가며 대응함으로써 멀티태스크합니다. 실행 시스템은 처리가 필요한 사용자 인터페이스 이벤트가 있는지 확인합니다. 처리가 필요한 이벤트가 없는 경우, 실행 시스템은 VI로 돌아가서 큐의 다음 작업을 받습니다.
버튼 또는 풀다운 메뉴를 클릭할 때, LabVIEW가 배경에서 VI를 실행하고 있기 때문에 실행한 작업은 완료까지 약간의 시간이 걸릴 수 있습니다. LabVIEW는 컨트롤이나 메뉴와의 상호작용 및 VI 실행에 번갈아가며 대응합니다.
LabVIEW 실행 시스템
LabVIEW에는 6개의 실행 시스템이 있는데, 파일≫VI 프로퍼티를 선택한 후 VI 프로퍼티 대화 상자에서 실행을 선택하여 실행 시스템을 지정할 수 있습니다. 다음 실행 시스템 중에서 선택할 수 있습니다.
- 사용자 인터페이스―사용자 인터페이스를 처리합니다. 멀티스레드 어플리케이션에서도 싱글스레드 어플리케이션의 경우와 똑같이 작동합니다. VI는 사용자 인터페이스 스레드에서 실행되나, 실행 시스템은 협력형 멀티태스킹과 사용자 인터페이스 이벤트 응답 사이를 번갈아가며 작동합니다.
- 표준―사용자 인터페이스와 별도의 스레드에서 실행됩니다.
- 인스트루먼트 I/O―VISA, GPIB, 시리얼 I/O가 다른 VI를 방해하지 못하게 합니다.
- 데이터 수집―데이터 수집이 다른 VI를 방해하지 못하게 합니다.
- 기타 1과 기타 2―어플리케이션의 작업이 자신의 스레드를 요구할 때 사용 가능합니다.
- 호출자와 같음―subVI의 경우, subVI를 호출한 VI와 같은 실행 시스템에서 실행됩니다. 최상위 VI에서, 호출자와 동일은 실행 시스템을 표준으로 설정하는 것과 같은 효과를 갖습니다.
이 실행 시스템은 VI가 다른 VI와 독립적으로 실행되어야 하는 대략적인 기준을 제공합니다. 기본적으로 VI는 표준 실행 시스템에서 실행됩니다.
인스트루먼트 I/O와 데이터 수집이라는 이름은 이 실행 시스템 내에서 이루어지는 작업 타입에 대한 제안입니다. I/O와 데이터 수집은 다른 시스템에서는 작동되나, 이 라벨을 사용하여 어플리케이션을 나누고 구조를 이해할 수 있습니다.
실행 시스템은 사용자 인터페이스 관리를 담당하지 않습니다. 이 실행 시스템 중 하나에 있는 VI가 컨트롤을 업데이트하는 경우, 실행 시스템은 책임을 사용자 인터페이스 실행 시스템에 넘겨줍니다. 사용자 인터페이스 실행 시스템을 다수의 프로퍼티 노드를 포함하는 VI에 지정하십시오.
LabVIEW는 머신에 있는 프로세서의 수에 비례하여 할당하는 스레드 개수를 정합니다. 각 스레드는 작업을 처리합니다. 예를 들어, VI가 공유 라이브러리를 호출하는 경우, 별도의 스레드가 해당 실행 시스템 내에서 다른 VI를 계속 실행합니다. 각 실행 시스템이 갖고 있는 스레드의 개수가 한정되어 있기 때문에, 스레드가 사용 중인 경우 태스크는 지연됩니다.
생성한 VI가 표준 실행 시스템에서는 정상적으로 실행되더라도 다른 실행 시스템 사용을 고려하십시오. 예를 들어 인스트루먼트 드라이버를 개발하는 경우, 인스트루먼트 I/O 실행 시스템 사용을 고려하십시오.
표준 실행 시스템을 사용하더라도 사용자 인터페이스는 자신의 스레드에 분리되어 있습니다. 프런트패널에 그리기, 마우스 클릭에 응답하기 등 사용자 인터페이스에서 실행되는 모든 작업은 블록다이어그램 코드의 실행 시간을 방해하지 않고 실행됩니다. 마찬가지로, 긴 계산 루틴을 실행해도 사용자 인터페이스가 마우스 클릭이나 키보드 데이터 입력에 응답하는 것을 막지는 않습니다.
프로세서가 여러 개 있는 컴퓨터는 멀티스레딩으로 더욱 큰 혜택을 얻습니다. 단일 프로세서 컴퓨터에서, OS는 스레드를 선취하여 프로세서의 각 스레드에 시간을 분배합니다. 멀티프로세서 컴퓨터에서, 스레드는 동시에 여러 프로세서에서 실행될 수 있으므로 둘 이상의 작업이 동시에 발생할 수 있습니다.