스레드 5

스레드 풀

병렬 작업 처리가 많아지면 스레드 개수가 증가되고 그에 따른 스레드 생성과 스케줄링으로 인해 CPU가 바빠져 메모리 사용량이 늘어난다. 따라서 애플리케이션의 성능저하 된다. 갑작스런 병렬 작업의 폭증으로 인한 스레드의 폭증을 막으려면 스레드풀(ThreadPool)을 사용해야 한다. 스레드풀은 작업처리에 사용되는 스레드를 제한된 개수만큼 정해놓고 작업 큐 (Queue)에 들어노는 작업들을 하나씩 스레드가 맡아 처리한다 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리한다. 그렇기 때문에 작업 처리 요청이 폭증되어도 스레드의 전체 개수가 늘어나지 않으므로 애플리케이션의 성능이 급격히 저하 되지 않는다. 자바는 스레드풀을 생성하고 사용할 수 있도록 java.util.concurrent 패..

스레드 상태

스레드 객체를 생성하고, start() 메소드를 호출하면 곧바로 스레드가 실행되는 것처럼 보이지만 사실은 실행 대기 상태가 된다. 실행 대기 상태란 아직 스케줄링이 되지 않아서 실행을 기다리고 있는 상태를 말한다. 실행 대기 상태에 있는 스레드 중에서 스레드 스케줄링으로 선택된 스레드가 비로서 CPU를 점유하고 run() 메소드를 모두 실행하기 전에 스레드 스케줄링에 의해 다시 실행 대기 상태로 돌아갈수 있다 그리고 실행 대기 상태에 있는 다른 스레드가 선택되어 실행 상태가 된다 이렇게 스레드는 실행 대기 상태와 실행 상태를 번갈아가면서 자신으 run() 메소드를 조금씩 실행 한다. 실행 상태에서 run() 메소드가 종료 되면, 더 이상 실행할 코드가 없기 때문에 스레드의 실행은 멈추게 된다 이를 종료 ..

동기화 메소드와 동기화 블록

공유 객체를 사용할 때의 주의 할 점 싱글 스레드 프로그램에서는 한 개의 스레드가 객체를 독차지해서 사용하면 됨 멀티 스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우 이 경우, 스레드 A를 사용하던 객체가 스레드 B에 의해 상태가 변경 될 수 있기 때문에 스레드 A가 의도 했던 것과는 다른 결과를 산출 할 수도 있다. 이는 마치 여러 사람이 계산기를 함께 나눠 쓰는 상황과 같아서 사람 A가 계산기로 작업을 하다가 계산 결과를 메모리에 저장한 뒤 잠시 자리를 비웠을 때 사람 B가 계산기를 만져서 앞 사람이 메모리에 저장한 값을 다른 값으로 변경하는 것과 같다 그런 다음 사람 A가 돌아와 계산기에 저장된 값을 이용해서 작업을 진행한다면 결국 사람 A는 엉터리 값을 이용하게 된다 User1..

스레드 우선순위

멀티 스레드는 동시성(Concurrency) 병렬성(Parallelism) 으로 실행 동시성 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질 병렬성 멀티 작업을 위해 멀티 코어에서 개별스레드를 동시에 실행하는 성질 싱글 코어 CPU를 이용한 멀티 스레드 작업은 병렬적으로 실행되는 것 처럼 보이지만 사실은 번갈아가며 실행하는 동시성 작업이다. 번갈아 실행하는 것이 워낙 빠르다 보니 병렬성으로 보일 뿐 스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가를 결정 이것을 스레드 스케줄링 스레드 스케줄링에 의해 스레드들은 아주 짧은 시간에 번갈아 가면서 그들의 run() 메소드를 조금씩 실행 자바의 스레드 스케줄링은 우선순위(Priority) 방..

멀티 스레드 개념

프로세스와 스레드 프로세스(Process) : 운영체제에서는 실행 중인 하나의 애플리케이션 - 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행 하나의 애플리케이션은 다중 프로세스를 만들기도 한다 . Chrome 브라우저를 두개 실행 했다면 두 개의 Chrome 프로세스 생성 프로그램 -> 실행 프로세스 -> 실행 프로세스 멀티 태스킹 : 두 가지 이상의 작업을 동시에 처리하는 것, 운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당 , 병렬로 실행 워드로 문서작업을 하면서 동시에 윈도우 미디어 플레이로 음악을 들을수 있다. 멀티 태스킹은 꼭 멀티 프로세스를 뜻하지는 않는다. 한 프로세스 내에서 멀티 태스킹을 할..