본문 바로가기

CS(ComputerScience)

프로세스, 스레드, 비동기

728x90

프로세스, 스레드, 비동기

 

프로세스와 스레드는 운영체제(OS, Operating System)에서 배우는 개념으로 CPU가 일할 거리를 제공해주는 역할!

HDD 하드 디스크

RAM 메모리(CPU가 일할 수 있도록 프로세스를 적재시키는 책상)

 

프로세스에 대한 정보를 CPU의 Register가 저장하면서 사용.

그 뒤에 비우고 다시 다른 프로세스 메모리 가져와서 사용~

 

OS가 HDD에서 적재할 부분 가져다가 RAM에다가 CPU가 일할 수 있도록 적재시켜줌!


OS

📌 프로세스(Process)

메모리에 적재되어 실행되고 있는 프로그램의 인스턴스

운영체제로부터 시스템 자원을 할당받은 작업의 단위

 

📌 인스턴스란?

설계된 것을 바탕으로 구현된 구체적인 실체로

붕어빵 틀(설계된 것, 클래스) 붕어빵(인스턴스)

 

프로세스는 독립된 메모리를 할당받는데, 할당받은 메모리를 관리하기 위해 Code, Data, Stack, Heap 주소 공간을 나눠 관리합니다.

  • Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
  • Data : 전역변수, 정적변수
  • Stack :  지역변수, 함수 매개변수, 리턴 값(임시 메모리 영역)
  • Heap : 동적 할당 시 사용(new(), malloc() 등)

프로세스마다 최소 1개의 스레드를 가져야 한다.


스레드(Thread)

프로세스 내에서 프로세스 자원을 이용하는 여러 실행 흐름의 단위

스레드는 자신만의 Stack영역을 따로 할당 받는다.

프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간을 공유하면서 일을 하게 됨


멀티 프로세스

하나의 프로그램을 실행시키기 위한 여러 개의 프로세스로 구성.

각 프로세스가 하나의 작업을 처리하도록 하는 것.

 

📌 장단점

  • 장점 : 여러 자식 프로세스 중 하나가 문제가 생겨도 전체에 영향을 주지 않음
  • 단점 : 문맥교환(Context Switching) 할때 오버헤드 발생. 캐쉬메모리 초기화 등 무거운 작업이 진행되서 오버헤드가 발생. 프로세스 간 통신 기법(IPC, Inter Process Comunication)

 

📌 문맥 교환이란? 

하나의 한번에 프로그램만 처리할 수 있는데, 여러 프로세스를 처리해야 하는 상황을 Context Switching이라고 한다.

카톡과 notion이 동시에 진행되는 것 처럼 느껴지지만, 사실 CPU는 굉장히 빠른 속도로 한번에 하나씩만 수행하는 것임.

즉, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 프로세스 제어 블록(PCB)에 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업! (공간 비우고 다시 대기하던 프로세스가 채우고~)

 

📌 프로세스 제어 블록

PCB, Process Control Block 

특정 프로세스에 대한 중요한 정보를 저장하고 있는 커널(CPU의 뇌) 내의 자료 구조.


멀티 스레드이란?

하나의 프로그램을 쪼개서 여러 일꾼(여러개의 스레드)들이 처리

 

📌 장점

  • 프로세스에 비해 작은 메모리 공간을 차지하니, 메모리 공간과 시스템 지원 소모가 줄어든다.
  • 스레드 간 통신 방법이 상대적으로 간단
  • Context switching시 PDB 및 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 더 빠름.

 

📌 단점

  • 서로 다른 스레드가 Data, Heap 영역을 공유하니 엉뚱한 값을 읽어오가나 수정할 수 있게되어 자원 Sync가 안 맞음.
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받게 된다.

 

📌 Thread-safe

멀티스레드 환경에서 여러 스레드가 동시에 사용되어도 안전하다.

공유 자원의 무결정을 보장하는 것!

 


비동기(Asyncronous)

 

 

제어권 : 자신(함수)의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌아간다.

동시성 : 동시에 진행한 것 처럼 보이는 것.

 

📌 block과 non-block

제어권이 누구에게 있는가?

blocking : 함수a가 함수 b를 호출한 뒤, 함수 b의 작업 완료여부를 기다리고 진행

non-blocking : 함수a가 함수 b를 호출한 뒤, 함수 b의 작업 완료여부와 상관없이 진행 

 

📌 sync와 async 개념

호출되는 함수의 작업 완료 여부를 신경쓰는가?

sync : 함수 a와 함수 b를 동시에 호출할때, 함수 a가 함수 b의 리턴값을 확인하면서 신경 쓰는 것

async : 함수 a와 함수 b를 동시에 호출할때, 함수 a가 함수 b의 리턴값을 신경 쓰는 않는 것

 

 

'CS(ComputerScience)' 카테고리의 다른 글

Memory allocation using implicit free block tracking and next-fit method  (0) 2023.04.10
Memory allocation using implicit free block tracking and first-fit method  (0) 2023.04.10
RESTful API  (0) 2022.12.01
HTTP, HTTPS  (0) 2022.11.29
CPU  (0) 2022.11.11