반원 블로그

[JAVA] 멀티스레드_1.개념과 메인스레드 본문

2017/JAVA (기본)

[JAVA] 멀티스레드_1.개념과 메인스레드

반원_SemiCircle 2017. 3. 7. 07:00

■1. 
프로세스, 간단하게는 '작업'이며, 운영체제에서는 실행 중인 프로그램(어플리케이션)을 말한다. 하나의 프로그램이 다중 프로그램을 만들기도 한다.


■2 

멀티 태스킹(Multi tasking)은 두 가지 이상 작업을 동시에 처리하는 것을 말한다. 이 때 처리방식에는 여러가지가 존재하며, 이 때 운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당해주고, 병렬로 실행시킨다. 예로 음악을 들으며 문서작업을 하거나 게임을 실행하거나 인터넷 방송을 시청하는 것 모두 멀티태스킹이다.

'멀티 태스킹=멀티 프로세스'는 아니다. 하나의 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 프로그램들도 있다. 대표적으로 미디어 플레이어와 메신저이다. 전자의 경우 동영상 재생, 음악 재생이라는 두 작업을 동시에 처리한다. 메신저는 채팅과 파일 전송 기능을 동시에 수행할 수 있다. 이러한 것은 '멀티 스레드(Multi thread)'때문에 가능하다.

하나의 스레드는 하나의 코드실행 흐름이기 대문에 한 프로세스 내에 스레드가 두개라면 두 개의 코드 실행 흐름이 존재한다는 의미이다. 멀티 프로세스는 프로그램 단위의 멀티태스킹, 멀티 스레드는 프로그램 내부에서의 멀티 태스킹이라 보자.



멀티 프로세스들은 운영체제에서 할당받은 자신의 메모리를 가지고 실행하기에 서로 독립적이다. 따라서 하나의 프로세스에서 오류가 발생해도 다른 프로세스에게 영향을 미치지 않는다.
ex) 워드에 오류가 나도 엑셀은 사용가능

하지만 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있어 다른 스레드에게 영향을 미치게 된다.
ex) 메신저에서 파일 전송 담당 스레드가 에러가 나면 메신저 프로세스 자체가 종료되기 때문에 채팅 담당 스레드도 종료됨

■3
코드를 보며 스레드가 와닿지않다면, 코드의 진행 흐름을 스레드로 알아두자. 그 중에 메인 스레드를 알아보자.

메인스레드는(main thread)는 main() 메소드를 실행하며 시작된다. 즉 메인스레드는 main메소드의 코드 흐름이다. 메인스레드가 없다면 멀티스레드가 나올 수 없다.


public static void main(String[] args){ //메인 스레드 시작
	...
	...
	...
}//메인스레드 끝

메인 스레드는 도중에 필요에 따라 작업 스레드들을 만들어서 병렬로 코드를 실행할 수 있다. 즉 멀티스레드를 생성해서 멀티 태스킹을 수행한다. 병렬이라는 키워드에 주목하자.




Comments