프로세스와 스레드 2

Kyu·2021년 1월 21일
0
  1. 멀티 태스킹이 되기 전까지는 컴퓨터에서 하나의 작업만 가능했다. 예를 들어 게임을 다운로드 한다고하면 다운로드 다 받을때까지 컴퓨터로 다른 작업을 하지 못했다.
  2. 컴퓨터에서 .exe는 실행파일, 그리고 컴퓨터가 그것을 실행하고 있는 상태를 프로세스라고 한다.
  3. 동시적 , 병렬적
  4. 동시성(Concurrency)은 프로세스하나가 여러개의 작업을 조금씩 일부분씩 진행하는 것
  5. 여러개의 작업이 굉장히 빠른 속도로 돌아가기때문에 동시적으로 작업을 하는것처럼 보인다
  6. 진행중인 작업을 바꾸는 것을 Context Switching이라고 한다
  7. 병렬성(Parallelism)은 프로세스 하나에 코어여러개가 달려서 각각 동시에 작업들을 수행하는 것
  8. 듀얼코어 옵타코어 등 이런 명칭이 붙은 멀티코어 프로세서가 달린 컴퓨터에서 할수있는 방식
  9. CPU의 속도가 발열 등 물리적 제약 때문에 예전만큼 빠르게 발전하지 못하자 그 대안으로 코어를 여러 개 달아서 작업을 분담할수있도록 한것.
  10. 하지만 이걸로 부족하다
  11. 한 프로세스 내에서도 여러갈래의 작업들이 동시에 진행될 필요가 있다는 것. (예시: 크롬의 탭들)
  12. 이 갈래를 스레드라고 한다
  13. 프로세서는 요리사, 이 내에서 끊임없이 요리를 만들어내는 하나하나가 프로세스
  14. 컴퓨터는 프로세스마다 자원을 분할해서 할당한다
  15. 김밥마는 섹션, 라면끓이는 섹션, 햄버거를 만드는 섹션 등
  16. 요리사 혼자 돌아다니면서 동시에 하든, 요리사 여럿이서 병렬적으로 하 이 메뉴들을 계속해서 만들어내는 것
  17. 햄버거를 만드는 섹션에서는 패티를 굽는동안 빵에 소스를 뿌리고 야채를 올리는 스레드도 진행될 수 있을것이다
  18. 패티는 저쪽에서, 야채는 이쪽에서 하면 같은 조리대에서 작업하는것보다 일하기 더힘들것이다
  19. 프로세스들은 컴퓨터의 자원을 분할해서 쓰지만 스레드는 프로세스마다 주어진 전체 자원을 함께 사용하는거죠, 속도와 효율면에서 굿.
  20. 단점도 있다. 프로세스 안에서 공유되는 변수에 스레드 두개가 동시에 손을 댄다면 에러 발생할 확률이 높다.

▶️프로세스는 뭐고 스레드는 뭔가요?


프로세스란?


1. “컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램”
2. 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
3. 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
4. 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
5. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
6. 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
- Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용

스레드란?

https://gmlwjd9405.github.io/images/os-process-and-thread/thread.png
1. 프로세스 내에서 실행되는 여러 흐름의 단위
2. 프로세스가 할당받은 자원을 이용하는 실행의 단위
3. 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
4. 스래드는 한 프로새스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
5. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.


멀티프로세스

  1. CPU(프로세서)는 한순간에 하나의 프로세스만 실행할 수 있음
  2. 작업관리자에 보면 스레드와 프로세스의 갯수를 확인할수있다. 스레드 몇천개가 동시에 작업을 하는것같아보인다.
  3. 그 이유는 운영체제가 짧은 시간 동안 여러 프로세스들을 교체하면서 작업을 하고 있기 때문에 동시에 여러가지 작업을 하고 있다고 느끼는 것.
  4. 운영체젝 ㅏ각 프로세스들을 스위칭하면서 작업을 하기 위해서는 프로세스의 상태를 알 수 있어야함.

Context switching

  1. CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching라 한다
    https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
  2. 현실세계에서 자기가 여러작업을할때마다 이 작업이 무엇인지 그리고 어떤 과정으로 진행 해야 되는지에 대해 생각할 시간이 필요하다. 컴퓨터도 마찬가지다
  3. 예를들어, Task 1 과 Task 2가 있다면, 태스크1이 진행상태이다가 레디상태로 빠진다는 정보와 어디까지 진행됐는지, 태스크2가 어디부터 시작하면 되는지 정보에 대해서 로딩할 시간이 필요하고 그 순간을 바로 컨텍스트 스위칭 이라고 한다.
  1. 위와 같은 구조를 가진다
  2. 작업 흐름이 여러 갈래가 생기는 경우, 여러개의 프로세스로 하나의 작업을 구성할수있음
  3. 각 프로세스로 하나의 작업을 구성할수있지만, 각 프로세스마다 메모리 영역을 따로 가지고 있기 때문에 비효율?이 발생한다.
  4. 예를들어 프로세스1을 진행하는 동안에 Stack, Heap, Data, Code 영역이 실제로 일을 하는 코어로 로딩되게 된다
  5. 그런데 그 다음 프로세스2로 넘어갈떄 Context switching이 되면서 스택, 힙, 데이터, 코드 영여긍ㄹ 따로 가지고 있기때문에, 프로세스1에서 기존에 쓰던걸 내리고 다른 코드들을 로딩하는 작업이 필요하게 된다. -> 첫번쨰 비효율?
  6. 두번째는 예를들어 같은 작업을 하기 위해서 만든 두 프로세스가 있을때 각각의 영역을 따로 가지기 때문에 다른 프로세스에 있는 정보를 가지고 통신이 필요하게 된다 -> 두번쨰 비효율
  7. 스레드로 가기

스레드

  1. 이런 비효율들로 스레드라는 개념이 탄생하게 된다
  2. 프로세스1,2 를 하나의 프로세스안에 두개의 프로세스로 만든다
    https://gmlwjd9405.github.io/images/os-process-and-thread/thread.png
  3. 그림과 같이 코드, 데이터, 힙영역을 공유하기때문에 나중에 context switching 시에 코드, 데이터, 힙영역은 기존에 존재하기때문에 컨텍스트 스위치가 발생하지 않을것이다.

▶️10분 우테코톡 Process vs Thread

profile
TIL 남기는 공간입니다

0개의 댓글