linux/system programming2011. 7. 8. 21:45
쓰레드(Thread)

 

프로세스와 쓰레드

프로세스는 운영체제가 실행시키는 하나의 프로그램이다.하나의 작업으로 비유할 수 있는데 워드 프로그램,동영상 실행 프로그램, 탐색기와 같이 여러 개의 프로세스가 동시에 수행되는 것을 multi-tasking이라 한다. Thread는 프로세스보다는 작은 단위이고, 하나의 프로세스에서 여러 개의 thread가 돌아가는 방식을 multi-thread 방식이라 한다.

 

@쓰레드의 생성방법

Thread를 생성시키는 방법으로는 java.lang.Thread 클래스를 extends 사용해 상속받는 방법과 

java.lang.Runnable 인터페이스를 implements하는 방법이 있다.Thread 클래스가 Runnable 인터페이스를 implements하고 있기 때문에, Thread를 상속받는 방법보다는 Runnable 인터페이스를 implements하고 있기 때문에, Thread를 상속받는 방법보다는 Runnable 인터페이스를 implements하는 방법을 많이 사용한다.

 

@쓰레드의 생명 주기

Thread를 start()했다고 해서 바로 실행이 되는 것이 아니고, Runnable 상태에 있다가 우선순위에 따라서 Running 상태로 넘어가 run()이 수행된다.run()의 모든 수행이 종료하게 되면, Dead 상태로써 프로그램이 종료된다.

 

@쓰레드의 우선 순위

Thread가 Runnable 상태에서 Running 상태로 넘어가기 위해서 서로간에 가준이 되는 것이 바로 우선 순위다. 최대 우선 순위는 10이고, 최소 우선 순위는 0이 된다.main()에서 생성된 thread는 대부분 우선 순위 5를 갖게 된다.

 

@쓰레드의 제어

Running 상태에서 CPU를 독점해 사용하고 있는 thread를 특정 메소드를 호출해 Block상태로 보내는 방법에는 일정 시간동안 Block 시킬 수 있는 sleep(), 양보하는 yield(), 현재 실행 중인 thread를 Block 시키는 join()등이 있다.

 

@쓰레드의 동기화

공유 자원을 동시에 thread들이 접근하려할 때 , 공유 자원을 보호하고, 데이터 무결성을 보장하는 방법으로써, synchronized 키워드를 사용해 공유 데이터를 접근하는 메소드에 동기화를 적용시킬 수 있다. 메소드 전체에 동기화를 부여할 수도 있고 특정 영역만 동기화를 적용시킬 수도 있다.

 

@wait() & notify()

동기화만으로 해결이 안되는 thread의 문제점인 데이터가 없는데도 데이터를 요구할 때를 대비해서, 데이터가 없을 떄는 기다리고, 데이터가 저장되면 알려주겠다는 메커니즘을 구현하는 메소드가 wait()와 notify()이다. 
[출처] 쓰레드(Thread)란?|작성자 뚜루미



프로그램이 실행되기 위해서는 메모리에 로딩 되어야 합니다. 
즉, 프로그램 크기만큼 메모리를 차지하게 되는 것이죠.
 
대개 메모리에서 수행되는 프로그램을 프로세스라고 부릅니다.
 
최근에는 많은 사용자에게 서비스하는 프로그램이 늘어나는 추세입니다.
 
웹 프로그램이 전형적인 예라고 볼 수 있겠죠.
 
따라서, 많은 사용자를 위해서는 메모리 등의 시스템 자원 소모를 줄이는
 
효율적인 프로그래밍 방식을 고려해야 합니다.
 
이런 경우에 사용하는 것이 쓰레드(Thread)입니다.
 
쓰레드는 시스템 자원을 공유하는 방식입니다. 쉽게 말해서
 
동일한 데이터를 가지고 작업하는 프로그램이 여러번 실행되어야 할 때
 
매번 프로세스를 생성하여 메모리를 차지하지 않고
 
동일한 메모리 공간을 공유하는 방식으로 시스템 자원을 아껴쓰고
 
CPU를 보다 효율적으로 사용하게 되는 것이죠.
 
쉽게 설명한다고 해놓고, 그다지 쉽게 되지는 않았네요..
 
Posted by babuzzzy