8.1 Thread and Synchronization

JAVA PROGRAMMING/JAVA 2010/02/21 21:39 by 킨테리 KinTeL



8.1.1 개요



윈도우의 장점 중에서 가장 두드러진 것이 바로 멀티 태스킹(Multitasking)입니다. 여러분들이 작업을 할 때 워드창, 웹 브라우저, 음악 플레이어 정도는 동시에 켜둔 상태에서 작업을 하고 있습니다. 동시에 이러한 작업이 이루어질 수 있는 것은 CPU의 시간을 분할해서 각각의 프로그램에게 제어권을 한번씩 나누어 주기 때문입니다. 이러한 작업의 대상인 프로그램은 하나의 프로세스(Process) 형태로 운영체제에서 관리해 줍니다. 운영체제 차원의 이러한 프로세스 관리법을 멀티 태스킹이라고 하며, 80386 계열에서는 CPU 차원에서 지원해 주기 때문에 더욱 효율적으로 멀티 태스킹이 동작합니다.

▣ 프로세스(Process)
◈ 하나의 프로그램(Program)은 하나의 프로세스(Process)에 해당한다.

프로세스의 경우에는 자동으로 운영체제가 관리하기 때문에 완벽하게 멀티 태스킹의 지원을 받을 수 있습니다. 프로그램을 만들고 실행만 시킨다면 운영체제 차원에서 CPU의 시분할(Time Sharing)을 지원받을 수 있습니다. 

▣ 멀티 태스킹(Multi-Tasking)
◈ 프로세스(Process)의 경우 운영체제에서 자동으로 관리해 준다.
◈ 운영체제 차원의 프로세스(Process) 관리를 멀티 태스킹(Mutitasking)이라고 한다.

▣ 프로세스(Process)와 스레드(Thread)
◈ 하나의 프로세스(Process) 내에는 여러 개의 스레드(Thread)가 존재할 수 있다.

우리가 목표로 하는 것은 프로그램 단위의 멀티 태스킹이 아니라 하나의 프로그램 내에서 실행되는 멀티 메서드입니다. 즉 하나의 프로세스 내에 여러 개의 메서드를 동시에 실행하기를 원하는 것입니다. 스레드(Thread)란 바로 하나의 프로세스 내에서 실행되는 메서드를 의미합니다. 일반적인 프로세스의 경우 한순간에 하나의 메서드만이 실행되지만, 스레드의 기법을 이용하면 여러 개의 메서드를 동시에 실행시킬 수 있습니다.

▣ 스레드(Thread)란?
◈ 하나의 프로그램 내에서 실행되는 메서드
◈ 같은 순간에 두 개의 메서드가 동시에 실행되면 두 개의 스레드가 동작하는 것이다.

이 장에서는 두 개의 메서드를 동시에 실행시키는 방법에 대해서 배우게 될 것입니다. 사실 알고 보면 하나의 메서드는 이미 실행된 상태입니다. main()도 하나의 메서드이기 때문에 이미 프로그램에서는 main 스레드가 동작중입니다. main() 이외의 다른 메서드를 실행하기 위해서 스레드의 프로그램 기법을 사용하는 것입니다.

의미상으로 하나의 스레드는 하나의 메서드에 해당한다고 했지만 실제 프로그램에서도 그러합니다. 단, 조건이 있습니다. 하나의 스레드로서의 조건을 만족하기 위해서는 프로그램 내에서 메서드가 다른 메서드와 동시에 실행되어야 합니다. 즉 하나의 독립된 메서드로 실행되면 그것은 스레드라고 말할 수 있습니다. 이러한 스레드 프로그램을 할 때 주의해야 할 사항이 있습니다. 

▣ 스레드 프로그램을 할 때 주의해야 할 사항
◈ 우선권(Priority)
◈ 동기화(Synchronization)

동시에 두 개 또는 여러 개의 메서드가 실행되기 때문에 어느 메서드에게 작업할 권한을 많이 줄 것인 지에 대해서 생각해 보아야 합니다. 즉 우선권을 어떤 메서드에게 많이 줄 것인지에 관한 것입니다. 

우선권보다도 더 중요한 것이 바로 자원의 공유입니다. 두 개의 메서드가 동시에 작업을 진행할 때 둘 다 하나의 자원을 상대로 작업을 하면 미세한 문제가 발생합니다. 가령, 은행 계좌에 돈이 10000원 있으며, 이 계좌를 A와 B라는 두사람이 공동으로 이용한다고 가정하죠. 그런데 공교롭게도 A와 B가 서로 다른 장소에서 A는 돈을 인출하려고 하고 B는 돈을 입금하려 한다면 무슨 문제가 발생할까요?

A와 B가 거의 동시에 작업을 진행한다면 은행 시스템은 A나 B 둘 중 한사람을 먼저 처리한 후에 다른 사람을 처리해야 올바른 작업이 이루어질 것입니다. 만약 이것을 지키지 않는다면 아주 심각한 문제가 발생합니다. A와 B가 둘 다 동시에 은행 계좌를 읽어가고 작업을 했다면 둘 다 10000원으로 작업을 할 수도 있습니다. 이렇게 되면 계좌의 돈계산은 엉망이 될 것입니다. A가 먼저하든지 B가 먼저하든지 순서를 지키면서 작업을 해야 합니다. 이렇게 하나의 자원을 상대로 순서대로 작업이 처리되는 것을 보장하는 기법을 동기화(Synchronization)라고 합니다.

▣ 동기화(Synchronization)의 보장
◈ 공유자원을 상대로 순서대로 작업이 이루어지는 것을 '동기화(Synchronization)가 보장된다'라고 말한다.

이러한 문제는 프로그램에서도 똑같이 발생합니다. 위의 A와 B는 스레드에 해당하며, 은행 계좌는 공유자원에 해당합니다. 공유자원을 사용할 때 동기화를 지키지 않으면 프로그램에서 예상치 못한 결과를 초래할 수도 있습니다. 이러한 측면에서 이 장에서는 스레드 프로그램을 하는 방법과 우선권 처리, 동기화 기법에 관련된 사항들을 학습하게 될 것입니다.
저작자 표시 비영리 변경 금지

'JAVA PROGRAMMING > JAVA' 카테고리의 다른 글

8.3 스레드의 제어  (0) 2010/02/21
8.2 스레드의 기본  (0) 2010/02/21
8.1 Thread and Synchronization  (0) 2010/02/21
7.3 에러처리 실례  (0) 2010/02/21
7.2 Exception  (0) 2010/02/21
7.1 Exception  (0) 2010/02/21
1  ... 48 49 50 51 52 53 54 55 56  ... 159 
BLOG main image
(주)KinTeL 회장 김형기

카테고리

분류 전체보기 (159)
My Name Is KinTeL (3)
농구 인생 (1)
사진 이야기 (13)
미디어 (5)
JAVA PROGRAMMING (105)
C# Programming (2)
FLEX (6)
Database (4)
About Eclipse (1)
참조 - Reference (9)
모든 무료 정보 (2)
좋은글 (2)


Statistics Graph
Total : 73,500
Today : 11
Yesterday : 43

최근에 받은 트랙백