본문 바로가기

자바공부

자바 멀티테스킹, 명품자바프로그래밍13장

728x90
반응형

* 멀티테스킹이란 멀티+테스킹의 합성어로서 다수의 작업을 동시에 처리하는 것을 말한다.

 

* 공학적으로 멀티태스킹은 하나의 응용프로그램이 여러 작업(태스킹 혹은 task)을 동시에 처리한는 것을 말한다.

 

* 컴퓨터에서 사용하는 스레드(thread)는 thread of control의 준말로서 프로그램 코드를 이동하면서 실행하는 하나의 실 혹은 제어의 개념이다.

하나의 스레드로 하나의 작업밖에 처리할 수 없다.

 

* 응용프로그램 내에 여러 객체들이 존재한다.

객체들은 모두 메소드와 같은 프로그램 코드를 가지고 있다.

스레드 A와 스레드 B는 마치 바느질을 하는 것처럼 한 메소드에서 다른 메소드로의 호출에 따라 이동하면서 코드를 실행하고 있다.

두 개의 스레드는 상호 독립적이다.

즉, 이 응용프로그램은 2가지 일을 동시에 하고 있는 셈이다.

그림에서 초록색 객체는 두 개의 스레드에 의해 모두 사용되고 있다.

스레드와 멀티스레딩 개념

* 스레드는 실행 단위이다.

main()이 시작되면 main() 메소드를 실행하는 하나의 스레드 A가 생긴다.

그리고 이 스레드는 main() 함수에서 호출하는 다른 객체의 메소드를 실행하고 여기서 또 다른 메소드가 호출되면 그 메소드 코드를 실행한다.

만일 중간에 새로운 스레드 B가 생기게 되면 이 스레드는 자신이 탄생한 코드에서부터 독립적으로 실행을 진행한다.

 

* 컴퓨터 기술의 발전과 함께 멀티태스킹을 실현하기 위해 두 가지 방법이 사용되고 있다.

멀티프로세싱은 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 기법이다.

각 프로세스는 고유한 메모리 영역을 보유하고 독립적으로 실행된다. 그러므로 하나의 응용프로그램에 속하는 프로세스들조차 상호 통신의 오버헤드가 크고 프로세스의 문맥 교환(context switch)에 따른 과도한 작업량과 시간 소모의 문제점이 있다.

 

* 이런 문제를 개선하기 위해 제안된 방법이 멀티스레딩이다.

멀티스레딩은 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 기법이다.

모든 스레드가 응용프로그램 내의 자원과 메모리를 공유하므로 통신에 따른 오버헤드가 비교적 크기 않으며, 스레드 사이의 문맥 교환 시 작업량이 작고 시간이 짧은 점을 지닌다.

멀티스레딩 시 운영체제의 스케쥴링 단위가 스레드인 셈이다.

 

* 웹 서버는 대표적인 멀티스레드 응용프로그램이다.

네트워크 클라이언트로부터 웹 검색 요청이 전달되면 웹 서버는 그 클라이언트를 전담하는 웹 서비스 스레드를 생성하여 검색을 하고 결과를 클라이언트로 전송하도록 한다. 

그러므로 단하게 보면 웹 서버에 동시에 100명의 클라이언트가 접속하면 100개의 스레드가 각각 자신의 클라이언트의 요청을 서비스한다.

만일 싱글 스레드로 웹 서버를 구현한다면 웹 서버는 한 번에 한 클라이언트씩 순차적으로 서비스하게 되므로 뒤에 접속한 클라이언트는 많은 시간을 기다려야 할 것이다.

 

* 멀티스레딩은 응용프로그램이 다수의 스레드를 가지고 다수의 작업을 동시에 처리함으로써, 여러 개의 작업을 순차적으로 진행하는 경우 발생하는 시간 지연과 자원의 비효율적 사용을 개선한다.

웹 서버의 멀티스레딩

반응형