어려움에도 불구하고 멀티스레딩이 여전히 사용되는 이유는 멀티스레딩이 여전히 여러 가지 이점을 갖고 있기 때문입니다. 이러한 이점 중 일부는 다음과 같습니다.
리소스 활용도 향상
일부 시나리오에서 간단한 프로그래밍
더 빠른 응답 프로그램
리소스 활용도 향상
로컬 파일 시스템에서 파일을 읽고 처리하는 애플리케이션을 상상해 보세요. 디스크에서 파일을 읽는 데 5초가 걸리고 처리하는 데 2초가 걸리고 두 파일을 모두 실행하는 데 시간이 걸린다고 가정해 보겠습니다.
5 seconds reading file A 2 seconds processing file A 5 seconds reading file B 2 seconds processing file B ----------------------- 14 seconds total
디스크에서 읽을 때 파일을 읽을 때 대부분의 작업은 파일을 읽을 때까지 CPU 시간이 소요됩니다. 그 당시 CPU는 매우 유휴 상태입니다. 그것은 다른 일을 할 수 있습니다. 이 작업의 순서를 변경하면 CPU를 더 잘 활용할 수 있습니다. 다음 시퀀스를 살펴보세요.
5 seconds reading file A 5 seconds reading file B + 2 seconds processing file A 2 seconds processing file B ----------------------- 12 seconds total
CPU는 첫 번째 파일을 읽을 때까지 기다립니다. 그런 다음 두 번째 파일을 읽기 시작합니다. 두 번째 파일을 읽는 동안 이 CPU는 첫 번째 파일을 실행합니다. 이 CPU는 디스크에서 파일을 읽을 때까지 기다리는 동안 대부분의 시간 동안 유휴 상태라는 점을 기억하십시오.
일반적으로 CPU는 IO를 기다리는 동안 다른 작업을 수행할 수 있습니다. 반드시 디스크 IO일 필요는 없습니다. 네트워크 IO일 수도 있고 사용자의 입력일 수도 있습니다. 네트워크 및 디스크 IO는 CPU 및 메모리 IO보다 훨씬 느립니다.
단순한 프로그래밍
위의 파일 읽기 및 처리 순서를 단일 스레드 응용 프로그램에서 수동으로 작성하는 경우 다음을 수행해야 합니다. 읽고 처리된 모든 파일의 상태를 추적합니다. 대신, 각각 별도의 파일을 읽고 처리하는 두 개의 스레드를 시작할 수 있습니다. 디스크가 파일을 읽을 때까지 기다리는 동안 이러한 스레드 각각은 차단됩니다. 기다리는 동안 다른 스레드는 CPU를 사용하여 이미 읽은 파일의 일부를 처리할 수 있습니다. 결과적으로 디스크는 지속적으로 다양한 파일을 메모리로 읽어오느라 바쁜 상태를 유지하게 됩니다. 결과적으로 디스크 및 CPU 활용도가 향상됩니다. 스레드는 단일 파일만 추적하므로 프로그래밍하기도 더 간단합니다.
더 빠른 응답 프로그램
또 다른 일반적인 목표는 단일 스레드 애플리케이션을 다중 스레드 애플리케이션으로 변환하는 것입니다. 들어오는 요청을 일부 포트에서 수신하는 서버 애플리케이션을 상상해 보세요. 요청이 수신되면 요청을 처리한 다음 다시 수신 대기합니다. 이 서버 주기는 다음과 같이 요약됩니다.
while(server is active){ listen for request process request }
이 요청을 처리하는 데 오랜 시간이 걸리면 해당 시간 동안 새 클라이언트가 서버에 요청을 보내지 않습니다. 서버만 들어오는 요청을 수신할 수 있습니다.
대체 설계는 수신 스레드가 요청을 작업자 스레드에 전달하고 즉시 수신 상태로 돌아가는 것입니다. 이 작업자 스레드는 요청을 실행하고 클라이언트에 응답을 보냅니다.
while(server is active){ listen for request hand request to worker thread }
이러한 방식으로 서버 스레드가 리스너에게 빠르게 반환됩니다. 따라서 더 많은 클라이언트가 서버에 요청을 보낼 수 있습니다. 서버의 반응성이 더욱 향상되었습니다.
데스크톱 애플리케이션도 마찬가지입니다. 버튼을 클릭하여 장기 실행 작업을 시작하고 작업을 실행하는 스레드가 창, 버튼 등을 업데이트하는 스레드인 경우 작업이 실행되면 응용 프로그램이 응답하지 않게 됩니다. 대신 이 작업을 작업자 스레드로 변환할 수 있습니다. 작업자 스레드가 작업을 처리하는 동안 창 스레드는 다른 사용자 요청에 자유롭게 응답할 수 있습니다. 작업자 스레드가 완료되면 창 스레드에 신호를 보냅니다. 그런 다음 창 스레드는 이 작업의 결과에 따라 응용 프로그램 창을 업데이트할 수 있습니다. 작업자 스레드를 사용하여 설계된 프로그램은 사용자에게 더 빠른 응답을 제공합니다.
위 내용은 자바 멀티스레딩의 장점에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!