본문 바로가기

내일배움캠프/Today I Learned

[내배캠] 나의 열다섯번째 회고록

 

 

 

프로세스(Process), 스레드(Thread), 비동기(Asyncronous)에 대한
기본적인 개념 잡기

 

 

 

※ 프로세스, 쓰레드, 멀티프로세스, 멀티쓰레드

■ 프로세스 (Process)

프로그램과 프로세스의 차이 ? 실행 중인지 아닌지로 프로그램과 프로세스가 나뉘게 된다. 

-> 프로세스란? 실행 중인 프로그램을 의미한다. 

 

프로그램 자체는 프로세스가 될 수 없다.

프로그램은 명령어 리스트 내용으로 디스크에 저장되어 있는 '수동적인 존재'이다. 

이와 대조적으로 프로세스는 다음에 실행할 명령어를 지정하는 프로그램 카운터레지스터, 프로세스 상태 등이 함께 존재하는 집합을 가진 '능동적인 존재'이다. 

 

■ 스레드 (Thread)

 

 

▲ 스레드의 구조

 

스레드란? 프로세스 내에서 실행되는 흐름의 단위 or CPU 스케줄링의 기본 단위라고 할 수 있다.

 

스레드의 특징 - 스레드는 각자 자신의 Stack영역을 보유하고 있다(최소한 자신의 레지스터 상태를 보유한다)- 스레드는 프로세스 내에서 Code, Data, Heap영역을 공유한다. - 스레드는 생성하고 Switching하는 것은 inexpensive(비싸지않은)하다

 

스레드와 프로세스의 차이점?

 

- 프로세스는 각자 프로세스 간의 통신에 IPC가 필요하다 그러나 스레드는 통신에 IPC가 필요하지 않다.

- 각 프로세스는 Code, Heap, Stack 영역을 각자 보유한다 스레드는 Code, Data, Heap영역은 공유하고 Stack영역만 각자 보유한다.

- 프로세스는 생성과 context switching에 많은 비용이 들어간다 스레드는 생성과 context switching에 적은 비용이 들어간다. 

 

※ 여기서 잠깐!

   IPC(InterProcess Communication)는 프로세스 간 통신을 말한다 

   실행 프로세스 간에 통신을 가능케하는 메커니즘 
   - > 프로세스 간에 서로 통신하는 규칙에 관한 문제
   
   IPC 전통적인 주요 기법 둘
   
     - 공유 메모리 기법 (Shared Memory)
        . 협력적 프로세스들이 공유 메모리 영역을 통해 데이터 교환
           . 주로, 전역 변수, 공유 변수, 공유 파일을 통해 통신을 이룸
        . 충돌 가능성은 있으나, 일반적으로 더 빠르고 커널 도움이 거의 필요 없음
           .. 즉, 고속 통신이 가능하나, 통신 책임이 응용 프로세스에 있고, 
           .. 운영체제는 단지 공유 메모리 만 제공 함
           
     - 메세지 전달 기법 (Message Passing)
        . 협력적 프로세스 간에 메세지 교환
        . 충돌하지 않으나, 적은 양의 데이터 교환 위주
        . 통신 책임 및 수단이 운영체제에 의해 제공됨
        

 @ 정보 출처 : http://www.ktword.co.kr/test/view/view.php?no=302

 

 

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

- 멀티 프로세싱은 여러 개의 프로세스가 각자 하나의 작업(task)을 맡아 처리하는 것을 뜻한다.

- 멀티 쓰레딩은 여러 개의 쓰레드가 각자 하나의 작업(task)을 맡아 처리하는 것을 뜻한다.

 

  • 멀티 프로세싱 
    • Context Switching이 발생하면 캐시에 존재하는 모든 데이터를 리셋 하고 다시 캐시 정보를 불러와야한다. 즉 Context Switching의 오버헤드(overhead)가 커서 비용이 크다.
    • 프로세스간의 통신에 복잡한 IPC를 사용하여 통신해야 한다. 
    • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스에만 이상이 생기고 다른 프로세스에는 영향을 주지 않는 장점도 존재한다.
  • 멀티 쓰레딩
    • 시스템 자원 소모가 감소한다. 프로세스를 생성하는 system call이 줄어들어 자원을 효율적으로 관리할 수 있다.
    • 시스템 처리량(Througput)이 증가한다. concurrency와 parallelism을 얻을 수 있기 때문에 효율적이다.
    • 프로세스 내의 Data, Code, Heap 영역을 공유하기 때문에 쓰레드 간의 통신이 간단하다. 
    • 쓰레드 간의 자원을 공유하기 때문에 동기화 문제(Synchronize problem)가 발생할 수 있다.
    • 디버깅이 까다롭다.

 

 

들어가기 전..

 

동기와 비동기 프로세스의 수행 순서 보장에 대한 매커니즘

블록킹과 논블록킹 프로세스의 유휴 상태에 대한 개념

 

처리해야 할 작업들을 어떠한 '흐름'으로 처리 할 것인가에 대한 관점
호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐, 안따르느냐 관심사

 

 

■ 동기(Synchronous) VS 비동기(Asynchronous)

 

동기란?

- 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작

- 호출하는 함수 A가 호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태이라면 작업 완료 여부를 스스로 계속 확인하며 신경쓰면 Synchronous

(* 함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것)

 

비동기란?

- 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음

- 함수 A 함수 B를 호출할 때 콜백 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다.

함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다. Asynchronous

 

동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 시각의 차이로서,

동기는 추구하는 같은 행위(목적)이 동시에 이루어지며, 비동기는 추구하는 행위(목적)이 다를 수도 있고, 동시에 이루어지지도 않는다. 

 

● 장점과 단점

동기 : 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 있음

비동기 : 동기보다 복잡하지만 결과가 주어지는데 식나이 걸리더라고 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있는 장점이 있음

 

 

Blocking(블로킹)과 Non-blocking(논블로킹)

 

블로킹과 논블로킹은 A 함수가 B 함수를 호출했을 때, 제어권을 어떻게 처리하느냐에 따라 달라진다.

 

제어권 : 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.
 - 결과값을 기다린다는 것 : A 함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부를 의미한다.

 

 

블로킹이란?

자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것

 

자료출처 : https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

 

  1. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
  2. 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다.
  3. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.

 

논블로킹이란?

다른 주체의 작업에 관련없이 자신의 작업을 하는 것

 

자료출처 : https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

 

  1. A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
  2. A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.

 

 

자료출처 : https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

 

👩‍💻 동기 & 비동기 / 블로킹 & 논블로킹 💯 완벽 이해하기

동기 & 비동기 vs 블로킹 & 논블록킹 개념 이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들이 서로 뭔가 연관이 있는 것으로 오해하기 쉽다. 아무래도 동기와 블록킹,

inpa.tistory.com

자료 출처 : https://code-lab1.tistory.com/43

 

[운영체제] 쓰레드(Thread)란? | 쓰레드 프로세스 차이 | 멀티프로세스 멀티쓰레드 차이

쓰레드란(Thread)란? 쓰레드(Thread)란 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위 라고 할 수 있다. 쓰레드는 다음과 같은 특징을 가지고 있다. 쓰레드는 각자 자신의 Stack

code-lab1.tistory.com

⭐https://bowbowbow.tistory.com/16

 

 

[운영체제] 프로세스가 뭐지?

[운영체제] 프로세스가 뭐지? 목차 [운영체제] 프로세스가 뭐지? 개요 프로세스란 단어를 본적있나요? 프로세스란? 프로그램과 뭐가 다르지? 어떻게 여러 개의 프로세스가 동시에 실행될 수 있을

bowbowbow.tistory.com

 

⭐위 글을 보면서 프로세스에 대한 이해가 더욱 쉽게 다가왔다

너무 어려운 용어들에 머리가 아프신 분들은 이 글을 한번 추천해드리고 싶다.