본문 바로가기
My Image
프로그래밍/Java

[Java] 멀티스레드 개념

by Lim-Ky 2017. 6. 27.
반응형



이번 시간에는 "멀티스레드 개념"을 알아보자


우선 프로세스와 스레드를 이해하고 넘어가야한다.


운영체제는 실행 중인 하나의 어플리케이션을 "프로세스"라고 부른다.


사용자가 어플리케이션을 실행하면 운영체제로부터 필요한 메모리를 할당맏아 코드를 실행한다. 이것이 바로 프로세스다.


또 하나의 어플리케이션은 2개이상의 프로세스를 가질 수 있다. 예를 들어 chrome이라는 어플리케이션을 더블클릭을 2번하면,


chrome이라는 exe 프로세스가 2개 생긴다.



"멀티태스킹"이란 두가지 이상의 일을 동시에 처리하는 것을 말한다. 


(결국 멀티스레드는 멀티태스킹을 하기 위함이다!)


운영체제에서 멀티태스킹을 지원하기 위해 CPU및 메모리자원을 각 프로세스에서 적절히 할당시키고 병렬 실행을 시킨다.


예를 들어 노래를 들으면서 문서작업을 하는 것이다. 


하지만 멀티태스킹은 꼭 멀티 프로세스를 뜻하진 않는다. 


한 프로세스내에서 멀티태스킹을 할 수 있게 만들어진 어플리케이션도 있다. 예를 들어 곰플레이어는 하나의 프로세스에서


동영상재생과 음악재생이라는 작업을 동시에 수행한다. 



그렇다면, 어떻게 멀티태스킹을 할 수 있을까? 그것을 가능케하는 것은 바로 "멀티스레드"라는 녀석이다.


스레드는 한가락의 실이라는 뜻이다. 멀티 스레드는 여러가닥의 실이라고 해석할 수 있는데 


이 실가닥의 흐름을 코드실행의 흐름이라 생각하면 쉽다. 


즉 여러가닥의 실은 곧 여러개의 코드실행이 실행된다.는 것을 뜻한다.


또한 멀티프로세스가 어플리케이션 단위의 멀티태스킹이라면,


멀티스레드는 하나의 어플리케이션 내부에서의 멀티태스킹이라 할 수 있다.


또 하나 우리가 알아야할 것!


멀티프로세스들은 각자의 다른 메모리를 운영체제로부터 할당 받기 때문에 프로세스간의 영향을 미치지 않는다.


하지만 멀티스레드는 하나의 프로세스내에서 생성되었기 때문에 어떤 스레드가 문제가 발생하면, 프로세스자체에 영향을 


줄 수 있다. 즉 프로세스 내부에 존재하기 때문이다.


따라서 멀티스레드의 예외처리는 특히 중요하다. 



자 이제 자바프로그램에서 설명하겠다. 


자바는 기본적으로 메인스레드라는 녀석이 존재한다. 기본적으로 생성되는 녀석이다. main()메서드를 실행하면 시작된다.


메인스레드는 첫코드부터 끝코드까지 순차적으로 실핸한다. 마지막코드를 실행하거나 return을 받으면 종료된다.


이제 우리는 개별적인 작업스레드를 생성해야한다면, 이 메인스레드를 통해서 만들 수 있다.


아래 그림과 같이 메인스레드에서 작업스레드 2개를 생성해 병렬로 코드가 수행된다는 점을 느꼈으면 좋겠다.



출처 http://palpit.tistory.com/726



마지막으로 하나만 더 알고가자...


만약 싱글 스레드 어플리케이션에서 메인스레드가 종료되면 프로세스도 당연히 종료될 것이다.


그렇다면, 멀티스레드 환경에서 종료되지 않은 스레드가 한개라도 존재한다면, 프로세스는 종료되지 않는다.


설령 메인스레드가 작업스레드보다 먼저 종료된다 하여도 살아있는 스레드가 한개라도 존재한다면 프로세스는 종료되지 않는다는 점!



다음 시간에는 우리가 배운 스레드를 생성과 실행하는 방법에 대해서 알아보도록 하겠다. 







반응형

'프로그래밍 > Java' 카테고리의 다른 글

[Java] multi thread 구현 01  (1) 2017.06.29
[Java] JVM 메모리 구조  (4) 2017.06.28
[Java] enum 이란?  (3) 2017.06.27
[Java] HashTable, Hashmap, ConCurrentHashMap 차이  (0) 2017.06.18
[Java] 객체지향프로그래밍 (OOP)란?  (0) 2017.06.12

댓글