코딩요
쉬운코드 기술 블로그
코딩요
전체 방문자
오늘
어제
  • 분류 전체보기 (54)
    • 개발자로 성장하기 (11)
    • 컴공 (25)
      • 운영체제 (12)
      • 알고리즘 (1)
      • 데이터베이스 (11)
      • 네트워크 (1)
    • 쉬운코드 (15)
      • 쉬운코드 소개 (6)
      • 쉬운코드 영상 보는 법 (3)
      • 쉬운코드 정정 보고서 (1)
      • 쉬운코드 스토리 (4)
      • 기타 이것저것 (1)
    • 면접 tip (3)

공지사항

  • 아이폰 앱에서는 슈퍼땡스 보내지 말아주세요ㅠㅠ
  • 쉬운코드 멤버십을 소개합니다
  • 쉬운코드 운영 철학

인기 글

hELLO · Designed By 정상우.
글쓰기 / 관리자
코딩요

쉬운코드 기술 블로그

프로세스와 스레드 차이 많이 헷갈려 하는 포인트
컴공/운영체제

프로세스와 스레드 차이 많이 헷갈려 하는 포인트

2022. 10. 8. 12:04

 

프로세스와 스레드는 독립적인 존재가 아니다

 

프로세스(process)와 스레드(thread)를 독립적으로 따로 존재하는 개념으로 인식하는 경우가 꽤 있는 것 같다

 

예를 들어 프로세스 A가 있고, 그 프로세스에 속한 스레드 x가 있을 때

 

A와 x 둘 다 독립적으로 CPU 코어에서 실행 가능한 존재로 인식하는 것처럼 말이다

 

오늘은 이 부분을 정리하고자 한다

 

 

 

 

 

 


 

 

 

프로세스와 스레드와 CPU의 관계

 

프로세스는 메모리에 올라가서 사용자에 의해 컴퓨터 상에서 '실행 중인 프로그램'을 의미하며

 

그 프로세스의 실행 정보나 상태(메모리 주소 공간, 프로세스 ID, .. etc)는 OS에 의해 관리된다

 

하지만 실제로 CPU 코어에서 실행되는 것은 스레드다 (이게 매우 중요한 개념 !!)

 

 

 

그렇기 때문에 하나의 프로세스가 CPU 코어에서 실행되기 위해서는 최소한 한 개의 스레드를 반드시 가져야 한다

 

그래서 C언어를 처음 배울 때 main 함수에서 hello world를 출력하는 코드를 짜서 실행하게 되면

 

따로 명시적으로 스레드를 만드는 코드를 작성하지 않았음에도

 

기본적으로 스레드 하나가 생성되고 그 스레드를 통해 해당 코드가 실행되는 것이다

 

 

 

 

 


 

 

어떤 경우에 프로세스 혹은 스레드라고 써야 할까?

 

하나의 스레드가 다른 스레드와 데이터 공유를 한다고 해보겠다

 

만약 이 두 개의 스레드가 같은 프로세스 소속이라면

 

'두 스레드가 데이터를 공유한다'라고 얘기할 수 있다

 

하지만 만약 두 개의 스레드가 각각 서로 다른 프로세스 소속이라면

 

이 경우에 보다 정확한 표현은 '두 프로세스가 데이터를 공유한다'라고 얘기하는 게 좋다

 

 

 

비슷한 예를 들어보면,

 

CPU 코어에서 컨텍스트 스위칭이 되는 대상은 언제나 스레드다

 

왜냐하면 CPU 코어에서 실행되는 것은 스레드이기 때문이다

 

이때 같은 프로세스 속한 스레드들끼리 컨텍스트 스위칭이 발생한다면

 

이건 스레드 컨텍스트 스위칭이라고 불러야 하고

 

서로 다른 프로세스 속한 스레드들 사이에서 컨텍스트 스위칭이 발생한다면

 

이 경우엔 프로세스 컨텍스트 스위칭이라고 불러야 한다

 

 

 

 

일반적으로 같은 프로세스에 속한 스레드들 사이에서 발생한 일을 얘기할 때는 스레드로 표현하고

 

그게 아니라 서로 다른 프로세스에 속한 스레드들 사이에서 발생한 일을 얘기할 때는 프로세스로 표현하는 것이

 

더 명확한 표현이라고 볼 수 있겠다

 

 

 

 


 

 

 

핵심은

 

 

프로세스는 '컴퓨터에서 실행 중인 프로그램'이라는 관점에서 인식하는 게 좋고

 

스레드는 프로세스가 CPU 코어에서 실제로 실행되기 위한 기준 단위로 인식하는 것이 좋다

 

 

 

결국 중요한 포인트는

 

실제로 CPU 코어에서 실행되는 것은 언제나 스레드다

 

 

 

 

 

 

p.s. 

 

윈도우에서는 예외적인 경우에 스레드 없는 프로세스가 존재한다고 들었다

 

하지만 이때는 정상적인 동작이 불가능하기 때문에 무시해도 괜찮을 것 같다

 

 

 

 

 

쉬운코드는 본질에 충실합니다

 

 

 

 

👉 쉬운코드 채널에서 다양한 컴공 영상들을 만나보세요

 
저작자표시 비영리 변경금지 (새창열림)
    '컴공/운영체제' 카테고리의 다른 글
    • 프로세스와 스레드의 관계를 바라보는 두 가지 세계관
    • 프로세스는 최소한 하나의 스레드를 가진다 (맥북에서 확인하기)
    • CPU 도움 없이는 스레드 동기화가 어려운 이유
    • 운영체제에서 락(lock)을 배우는 이유
    코딩요
    코딩요
    8년차 백엔드 개발자가 이해하기 쉽게 설명합니다. 배워서 남주는 블로그! 이해하기 쉬운 기술 블로그! 쉬운코드입니다 :)

    티스토리툴바