본문으로 바로가기

Thread와 Process!!

category 프로그래밍/자바 2019. 1. 25. 18:12

Concurrency란?
: 하나의 일이 아닌 여러개의 일이 이루어져야한다.
: 하나의 작업을 하면서도 다른 이벤트에 대한 응답을 할 준비가 되어 있어야 한다.

=> Thread와 Process 개념이 나옴

Thread 와 Process


프로그램
: 어떤 작업을 위해 실행할 수 있는 파일

Process
: 메모리에 올라와 CPU를 할당받고 프로그램이 실행되고 있는 상태
: 프로세스는 운영체제로부터 자원(메모리등)을 할당받는 작업의 단위
: .exe 파일을 클릭하게 되면 컴퓨터에서 실행가능 하도록 바뀐 녀석
: 프로세스와 프로세스간의 통신만 가능
: 프로세스 생성시 새로운 프로세스 메모리 영역을 생성

쓰레드란?
: 프로세스가 할당받은 자원을 이용하는 실행의 단위
: 기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성되는데 이를 메인 스레드라고 부른다.
스레드를 추가로 생성하지 않는 한 모든 프로그램 코드는 메인 스레드에서 실행이된다.
: 한개의 프로세스 내에서 동작되는 여러 실행의 흐름
: 프로세스안의 Heap 영역에서 서로 데이터를 주고 받을수 있음
: 프로세스가 할당받은 메모리 영역에서 쓰레드를 생성


멀티 프로세스와 멀티 스레드


- 멀티 태스킹?
  : 두가기 이상의 작업을 동시에 처리하는것
  • 멀티 프로세스 : 독립적으로 프로그램들을 실행하고 여러가지 작업 처리
  • 멀티 스레드 : 한 개의 프로그램을 실행하고 내부적으로 여러가지 작업 처리   


멀티 프로세스와 멀티 스레드

○ 공통점
: 양쪽 모두 흐름이 동시에 진행됨

차이점
: 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각의 별개의 메모리를 차지하고 있지만 멀티스레드는 프로세스 내의 메모리를 공유해 사용한다.
: 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 더 빠르다.

Why?
멀티프로세스(여러 프로세스)로 할수있는 작업들을 하나의 프로세서에서
멀티 스레드(여러 스레드)로 나눠가면서 할까?

=> 효율적인 시스템 작업을 위해서

멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우,
프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할수 있다.

스레드의 단점은 
여러 스레드가 함께 사용하는 공유 객체일 경우 충돌현상이 발생할수 있기 때문에 동기화 문제를 잘 해결해줘야 한다.

Q. 질문1.   쓰레드가 하는 일을 프로세스는 못하나?

: 가능하다 하지만 어떻게 동작시킬것인가에 차이이다.
: 쓰레드는 프로세스내에서 힙영역의 자원들과 공유를 하면서(서로 주고받고) 하면서 동시성을 만들어 내고
: 프로세스간의 통신은 서로 프로세스 끼리만 통하면 되고 서로 다른 process의 heap 영역은 알 필요가 없다면 사용하면 되는것이다.
: Apache http webserver도 프로세스 방식!! -> Process Forking

Q. 질문2. 자바에서 쓰레드 Pool은 왜 나왔을까?

: Thread는 OS의 자원이고 OS의 자원을 많이 쓰는것은 좋지 않다.
: 그렇기 때문에 Thread, Runnable의 사용보단 ThreadPool을 이용하는것이 좋다.
: Pool은 중요자원의 갯수를 제한하고 비용적인 측면 장점을 살리는 역할을 한다.

Q. 질문3. 쓰레드는 얼마나 생성하면 좋을까요?

: 코어의 하이퍼스레딩 기술이 나오면서 코어당 2개의 쓰레드를 돌릴수있게 된다. 물론 발전되면 더 늘어나겠지만...
: 코어 X 2 가 적당하다.

스레드의 장점

  • 시스템의 throughput이 향상된다.
    • throughput : 단위시간당 처리량
  • 시스템의 자원 소모가 줄어든다
  • 프로그램의 응답 시간이 단축된다..

스레드의 단점

  • 여러 개의 스레드를 이용하는 프로그램을 작성하는 경우에는 주의 깊게 설계해야 한다.
  • 단일 프로세서 시스템에서는 효과를 기대하기 어렵다.