1.실행단위 : cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는개념

2.(부연설명이 없는)프로세스 - 하나의 스레드만 가지고있는 단일 스레드 프로세스

3.동시성 - 한순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에처리하는 것처럼 보이는것
(여러가지가 빠르게 전환되면서 동시에 일어난 것처럼보인다)

프로세스랑 쓰레드가 완전히 다른 무언가가 아니다.

 

목차 
1. process & thread
2.multi-process vs multi-thread
3.multi-core
4.요약


1 . 프로그램과 프로세스


피자레시피 : 내가 열심히 구현하고있는 코드파일(프로그램)
하지만 이 프로그램자체는 실행시키기전에는 그저 코드가 구현되어있는 파일일뿐이다.
이것을 사용하기 위해서는 종이 레시피가 피자가 되는것처럼 

실행이 되어서 사용 할 수있는 무언가가되어야하는데
그것이 바로 프로세스다.

*프로그램이 프로세스가 되면서 어떤일이 일어날까
일단 프로세스가 필요로 하는 재료들이 메모리에 올라가야 한다.

 

PCB 
code(실행명령을 포함하는 코드들) 

data(static변수 혹은 global변수)

heap(동적메모리 영역)

stack(지역변수,매개변수,반환값 등 일시적인데이터)


해당 프로세스에 대한 정보를 담고있는 PCB블럭이 프로세스 생성시 함께만들어진다.

 

두번째로 해당 프로세스에 대한 정보를 담고 있는 PCB블럭이 프로세스 생성시 함께 만들어 진다.

프로세스 상태준비, 대기상태의 큐를 구현하기 위해 필요한 포인터, 현재 프로세스의 상태를 담는 process state, 고유번호를 담는 PID, 다음 명령어를 가리키는 프로그램 카운터 등등이 있다.

 


* 코딩을 할때 예시를 들자면

  • 유투브에서 팝송 플레이리스트를 튼다
  • 코딩을 하기위해 인텔리제이를 킨다
  • 슬렉을킨다
  • 카톡, 크롬을킨다
    대부분의 사람들은 하나의 프로세스만 사용하기보다는 여러가지를 동시에 사용하고싶어한다.
    하지만 원래 한 프로세스가 실행되기 위해서 cpu를 점유하고있으면
    다른프로세스는 실행상태에 있을 수가없다.
    노래를 듣다가 코딩을 하기위해서 인텔리제이를 키면 노래가 꺼지게된다
    그래서 다수의 프로세스를 동시에 실행하기위해 여러개 프로세스를 시분할로, 즉 짧은텀을 반복하면서
    전환해서 실행을 시킨다.

컨텍스트 스위칭

동시에 실행하고 싶은 프로세스 두개가 있다고 가정하자.

먼저 프로세스 1이 실행상태에 있고 CPU에 적재되어있다.

프로세스 2는 준비상태에있다.

프로세스 2를 실행 하기 위해서는 프로세스 1이 먼저 준비상태로 내려가고 

프로세스 2가 cpu에 적재가 되고

다시 1로 전환하기 위해서는 2가 준비상태로 내려가고

1이 cpu에 올라와야한다. 이게 바로 컨테스트 스위칭이다.

 

 

*경량화된 프로세스버전인 스레드 등장

하나의 프로세스 안에 다수의 쓰레드가 있을때 공유되는 자원이 있기때문

스레드는 코드,데이터,힙영역을 공통된 자원으로 사용한다.

각 스레드는 스택부분만을 따로 가지고있는것

공유되는 자원이 있기 때문에 효율적이다.

컨텍스트 스위칭이 일어날때 캐싱 적중률이 올라간다

->모두 다 빼고 다시 다 넣을 필요가 없다.

 

 

*예를 들어 '회의실'을 예약을 하고 회의실을 사용한다고 가정하자.

개인 노트북을 공용 모니터 연결하고 스피커, 리모컨을 사용한다.

다음 예약한 팀이 들어올때 이전의 컨텍스트 스위칭은 또 사용할 자원인 TV와 스피커 리모콘을 모조리 챙겨서 나가는것

다음 팀은 그것을 다시 챙겨서 들어와야만 사용 할 수있다.

->스레드의 컨텍스트 스위칭은 공용으로 사용 할 것들은 두고 개인 노트북만 가지고 와서 연결을 하면된다.

간단하고 부담이 적다.

 

 

2 . 멀티프로세스 vs 멀티스레드 

두가지 모두 처리 방식의 일종

한 어플리케이션에 대한 처리방식

-> 한 어플리케이션에 대해서 두가지의 다른 처리방식

 

 

Multi-process Multi-thread
각 프로세스는 독립적
IPC를 사용한 통신
자원 소모적, 개별 메모리 차지
context switching 비용이 큼
동기화 작업이 필요하지 않음
ex. chrome
Thread끼리 긴밀하게 연결되어 있음
공유된 자원으로 통신비용 절감
context switching 비용이 적음
공유 자원 관리를 해야함
긴밀하게 연결되어있어 한 스레드게 문제가 생기면 전체프로세스에 영향이간다
ex. web server

 

 

3.  멀티코어 란?

하드웨어 측면에 가깝다.

 (멀티 프로세스랑 멀티스레드는 처리방식의 일종-소프트웨어 분야에 가까움)

  1. 동시성 : 여러 실행단위를 번갈아 실행하면서 동시에 일어난 것처럼 보이게한다. 하나의 코어에서 하나 이상의 프로세스(혹은 스레드)가 번갈아가면서 진행되지만 동시에 진행되는 것 처럼 보이는것 
  2. 병렬처리 :물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한순간에 처리할 수있게 해준다. 둘 이상의 코어에서 동시에 하나 이상의 프로세스가 한꺼번에 진행되는것

 

* 리눅스 커널에서는 프로세스와 스레드를 동일하게 봅니다.

스레드는 사용자 스레드와 커널스레드로 나눈다.

 

 

4 . 요약

  1. 프로세스는 프로그램이 실행된 것이다.
  2. 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이다.
  3. 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리방식(멀티 프로세스, 멀티스레드)이 있다.
  4. 동시에 실행이 되는 것처럼 보이기 위해서 실행단위는 시분할로 cpu를 점유하며 context switching을 한다.
  5. 멀티 프로세스는 독립적인 메모리를 가지고 있지만 멀티 스레드는 자원을 공유한다. 그것에 따른 각각의 장단점이 있다.
  6. 멀티코어는 하드웨어 측면에서 실행 단위를 병렬적으로 처리 할 수 있도록 여러 프로세서가 있는것이다

'* > What I did today' 카테고리의 다른 글

8/31  (0) 2021.08.31
8/29  (0) 2021.08.29
8/28  (0) 2021.08.29
JOIN  (0) 2021.08.21
dto와 entity를 구분해서 구현한 이유  (0) 2021.08.20
Web Server VS WAS  (0) 2021.08.16
스프링 핵심 원리 이해1 - 예제 만들기  (0) 2021.08.06
캡슐화/추상화/다형성  (0) 2021.08.03

+ Recent posts