본문 바로가기

JAVA 기본

Process / Thread

강의를 듣는와중에 언급된 프로세스와 스레드의 차이점을 알아보고자 한다.

 

1. 프로세스란..? (Multi Process, Context Switching..)

2. 스레드란..?  (Multi Thread, Thread safe)

3. 프로세스, 스레드 내부적으로 어떻게 동작할까..? 문제점..!!🤣

4. 멀티 스레드의 필요성과 Thread safe보장 방법에 대한 고민,,

5. 실습중 생긴 문제점과 느낀점...

 

 

 

 

 

1.

     프로세스는 운영체제에서 실행중인 프로그램을 의미한다.

   한개의 프로세스 내부에는 최소 하나의 스레드를 가지고 있고, 여러 개의 스레드를 가질 수 있다.

   멀티 프로세스를 사용하며 이를 스케줄링 하는 알고리즘이 있는데,

   프로세스 끼리 공유된 자원에 접근 하는 방법이 까다롭다.( IPC )

   하나의 프로세스에서 문제 발생시 context switching을 하며 비용이 발생한다.

   

 

2.

      스레드는 프로세스 내부적으로  한개의 스레드(실)을 가지고 작업을 할 수도 있고,

    멀티 스레드를 이용 할 수도 있다. 멀티 스레드를 사용 할 경우 각 스레드가 동작을 수행하는 시간이

    각각 다르고 예측 하기가 어려우며, 공유 자원을 건드리는 경우에 복잡해 질 수 있어서, 초급 개발자가

    스레드를 쓸 경우 서버가 망가질 확률이 높다. 멀티스레드를 쓸 경우엔 Thread Safe가 보장 되어야 한다.

 

   

 

3.

    프로세스가 실행이되면 독립된 메모리영역( Code,Data,Stack,Heap 형식 )이 할당이 된다.

   각각의 스레드독립된 Stack영역을 가지고 Code,Data,Heap영역공유 자원으로 쓰게 된다.

   이러한 구조 때문에 멀티 프로세스에서 한 프로세스가 종료되어도 다른 프로세스에 영향을 주지않고,

   Context Switching비용이 발생하게 된다. (장점이자 단점)

   반면 스레드프로세스와 다르게 공유자원이 있기 때문에 멀티스레드를 이용할 때, 동기화 문제가 발생하기 쉽고, 

   하나의 스레드에 의해 프로세스가 종료될 수 있다.  그렇기 때문에 멀티 스레드를 쓸 경우 신중해야 한다.

   

  

 

4. 

     앞서 프로그래밍의 종류에 대해서 말할때, 함수형 프로그래밍을 조사할 때 언급한 적이 있다.

   수백만, 수천만명이 접속하는 시대에 멀티 스레드의 필요성이 높아짐에 따라 

   Thread Safe를 보장 하는 방법이 여러가지 있는데,

     첫번째synchronized(동기) 가 있다. 싱크로나이즈는 한 스레드가 메모리를 사용하고 있을때

       다른 스레드는 그 메모리에 접근하지 못하게 락(rock)을 거는 방법이다, 남용하게되면 멀티 쓰레드의 이점을

       잃고 속도 저하의 원인이 된다. 

     

     두번째로 프로세스의 공유자원을 최대한 건드리지 않고 지역변수(스택영역)를 활용 하는 방법이 있다.

     

     세번째불변객체(함수)를 쓰는 방법이 있다.  (함수형 프로그래밍이 뜨는 이유)

   

    멀티 쓰레드를 사용할때는, 신중을 기해야 한다. 동시에 여러개의 스레드가 작업할때, 일어 날 수 있는

    문제는 무궁무진 하기 때문에, 깊게 생각해보지 않고 돌아가게만 코딩을 하게 된다면

    돌이킬 수 없는 결과가 기다리고 있다.

  

 

5.  to be continue...

   

   

   

   

 

'JAVA 기본' 카테고리의 다른 글

포인터와 래퍼런스의 차이?  (0) 2022.10.10
Servlet  (0) 2022.03.28
Non-blocking / blocking / Async / Sync  (0) 2022.03.22
Object (1차 수정)  (0) 2022.03.21
MIME(Multipurpose Internet Mail Extensions)  (0) 2022.03.21