멀티태스킹 사용 시기
멀티태스킹을 구현하는 방법에는 두 가지가 있습니다. 즉, 여러 스레드가 있는 단일 프로세스 또는 여러 프로세스로, 각각 하나 이상의 스레드가 있는 프로세스입니다. 애플리케이션은 프라이빗 주소 공간과 프라이빗 리소스가 필요한 각 스레드를 자체 프로세스에 배치하여 다른 프로세스 스레드의 활동으로부터 보호할 수 있습니다.
다중 스레드 프로세스는 사용자 인터페이스를 제공하고 백그라운드 계산을 수행하는 등 스레드를 사용하여 상호 배타적인 작업을 관리할 수 있습니다. 다중 스레드 프로세스를 만드는 것은 유사하거나 동일한 여러 작업을 동시에 수행하는 프로그램을 구성하는 편리한 방법일 수도 있습니다. 예를 들어 명명된 파이프 서버는 파이프에 연결하는 각 클라이언트 프로세스에 대한 스레드를 만들 수 있습니다. 이 스레드는 서버와 클라이언트 간의 통신을 관리합니다. 프로세스는 여러 스레드를 사용하여 다음 작업을 수행할 수 있습니다.
- 여러 창에 대한 입력을 관리합니다.
- 여러 통신 디바이스의 입력을 관리합니다.
- 다양한 우선 순위의 작업을 구분합니다. 예를 들어 우선 순위가 높은 스레드는 시간이 중요한 작업을 관리하고 우선 순위가 낮은 스레드는 다른 작업을 수행합니다.
- 백그라운드 작업에 시간을 할당하면서 사용자 인터페이스가 계속 빠르게 응답하도록 합니다.
일반적으로 애플리케이션은 다음과 같은 이유로 여러 프로세스를 만드는 대신 단일 다중 스레드 프로세스를 만들어 멀티태스킹을 구현하는 것이 더 효율적입니다.
- 프로세스는 스레드보다 오버헤드가 더 많기 때문에(프로세스 컨텍스트가 스레드 컨텍스트보다 크므로) 시스템은 프로세스보다 스레드에 대해 컨텍스트 전환을 더 빠르게 수행할 수 있습니다.
- 프로세스의 모든 스레드는 동일한 주소 공간을 공유하며 프로세스의 전역 변수에 액세스하여 스레드 간 통신을 간소화할 수 있습니다.
- 프로세스의 모든 스레드는 파일 및 파이프와 같은 리소스에 열린 핸들을 공유할 수 있습니다.
다중 스레딩 대신 사용할 수 있는 다른 기술이 있습니다. 가장 중요한 것은 비동기 입력 및 출력(I/O), I/O 완료 포트, APC(비동기 프로시저 호출) 및 여러 이벤트를 대기하는 기능입니다.
단일 스레드는 비동기 I/O를 사용하여 동시에 실행할 수 있는 여러 시간이 소요되는 I/O 요청을 시작할 수 있습니다. 파일, 파이프 및 직렬 통신 디바이스에서 비동기 I/O를 수행할 수 있습니다. 자세한 내용은 동기화 및 겹치는 입력 및 출력을 참조하세요.
단일 스레드는 하나 또는 모든 이벤트가 발생할 때까지 기다리는 동안 자체 실행을 차단할 수 있습니다. 이는 여러 스레드를 사용하는 것보다 더 효율적이며, 각 스레드는 단일 이벤트를 기다리고 있으며, 이벤트가 발생할지 지속적으로 확인하여 프로세서 시간을 사용하는 단일 스레드를 사용하는 것보다 더 효율적입니다. 자세한 내용은 Wait Functions를 참조하세요.