단일 코어 시스템에서 스레드를 사용하는 이유는 단순히 모든 CPU를 사용하는 프로세스가 더 빨리 수행되어야하는 다른 작업에 의해 선점 될 수 있도록 허용하기 위해서입니다. 시스템을 멀티 스레드로 만드는 가장 보편적 인 이유는 긴 계산을 수행하는 동안에도 반응 형 사용자 인터페이스를 갖는 것입니다.
물론 어떤 작업이든 (파일 읽기, 데이터베이스 액세스, 사진 크기 조정, 스프레드 시트 재 계산) 시간이 오래 걸리며 스레드가 사용자 입력에 응답 할 수 있도록 별도의 스레드에서 수행 할 수 있습니다 전체 시간을 운영합니다.
예를 들어 20 년 전에는 멀티 CPU 시스템이나 멀티 스레딩을 허용하는 OS가 거의 없었기 때문에 거의 모든 프로그램이 단일 스레드 였고 시스템에서 UI를 가질 수 있도록 많은 프레임 워크가 만들어졌습니다 여전히 I/O를 수행합니다. 이를위한 표준 메커니즘은 모든 이벤트 (UI, 네트워크, 타이머 등)가 큰 루프로 처리되는 이벤트 루프입니다.
이 유형의 시스템은 파일 I/O 및 계산과 같은 상황에서 UI가 보류되었음을 의미합니다. UI를 너무 많이 유지하지 않으려면 청크로 I/O를 수행해야합니다 (예 : 한 번에 4k 개의 파일을 읽음). 들어오는 UI 이벤트를 청크 사이에서 처리해야합니다. 이것은 실제로 시스템을 계속 실행하기위한 해킹이지만 이벤트를 얼마나 자주 처리해야하는지 모르기 때문에 시스템을 원활하게 실행하기는 어렵습니다.
해결 방법은 스프레드 시트를 다시 계산하거나 파일을 쓰는 별도의 스레드가 있어야합니다. 그렇게하면 운영 체제가 해당 스레드에 공정한 타임 슬라 이프를 제공하면서 UI 실행을 선점 할 수 있으므로 UI가 항상 응답 할 수 있습니다.
이유가 있습니다. I/O 바인딩 작업은 스레딩 (특히 네트워크 응용 프로그램)의 이점을 얻습니다. 하이퍼 스레딩 프로세서는 단일 코어에서도 멀티 스레드 응용 프로그램의 속도를 높일 수 있습니다. 스레드는 특정 이벤트에 대해 대기 (차단) 및 작동을 지시 할 수 있으므로 이벤트 중심 프로그래밍을 활성화 할 수 있습니다. – nneonneo
이벤트 기반 프로그래밍은 놀라운 이점입니다. 따라서, 간단한 구현을 위해 - 메인 스레드는 단일 스레드에 있고, 이벤트 스레드는 프로그램 흐름을 방해하고 특정 작업을 실행합니까? – sherrellbc
다른 방법. "주 스레드"는 입력 사용에 응답하는 짧은 코드를 실행합니다. 계산 및 무거운 리프트 코드는 우선 순위가 낮은 스레드에서 실행됩니다. 주 스레드는 이벤트가 들어올 때마다 깨어나 UI 코드를 통해 처리하고 다시 잠자기 상태로 돌아갑니다. – nneonneo