멀티태스킹 고려 사항
권장 지침은 가능한 한 적은 수의 스레드를 사용하여 시스템 리소스 사용을 최소화하는 것입니다. 이렇게 하면 성능이 향상됩니다. 멀티태스킹에는 애플리케이션을 디자인할 때 고려해야 할 리소스 요구 사항과 잠재적 충돌이 있습니다. 리소스 요구 사항은 다음과 같습니다.
- 시스템은 프로세스와 스레드 모두에 필요한 컨텍스트 정보에 메모리를 사용합니다. 따라서 만들 수 있는 프로세스 및 스레드의 수는 사용 가능한 메모리에 의해 제한됩니다.
- 많은 스레드를 추적하는 데는 상당한 프로세서 시간이 소비됩니다. 스레드가 너무 많으면 대부분 상당한 진전을 이룰 수 없습니다. 대부분의 현재 스레드가 하나의 프로세스에 있는 경우 다른 프로세스의 스레드가 예약되는 빈도가 감소합니다.
리소스에 대한 공유 액세스를 제공하면 충돌이 발생할 수 있습니다. 이를 방지하려면 공유 리소스에 대한 액세스를 동기화해야 합니다. 이는 시스템 리소스(예: 통신 포트), 여러 프로세스에서 공유하는 리소스(예: 파일 핸들) 또는 여러 스레드에서 액세스하는 단일 프로세스(예: 전역 변수)의 리소스에 적용됩니다. 액세스를 올바르게 동기화하지 못하면(동일하거나 다른 프로세스에서) 교착 상태 및 경합 상태와 같은 문제가 발생할 수 있습니다. 여러 스레드 간에 리소스 공유를 조정하는 데 사용할 수 있는 동기화 개체 및 함수입니다. 동기화에 대한 자세한 내용은 여러 스레드의 실행 동기화를 참조하세요. 스레드 수를 줄이면 리소스를 보다 쉽고 효과적으로 동기화할 수 있습니다.
다중 스레드 애플리케이션에 적합한 디자인은 파이프라인 서버입니다. 이 디자인에서는 프로세서당 하나의 스레드를 만들고 애플리케이션이 컨텍스트 정보를 유지하는 요청 큐를 빌드합니다. 스레드는 다음 큐에서 요청을 처리하기 전에 큐의 모든 요청을 처리합니다.