<CS 지식> Program & Process & Thread

Google 아니고 Joogle·2022년 4월 18일
0

CS 지식

목록 보기
4/22
post-custom-banner

💻Program?

  • 작업을 위해서 실행할 수 있는 '정적인 상태'의 파일 (An executable file)
  • e.g. window의 경우 exe파일

💻Process?

  • 실행되고 있는 컴퓨터 프로그램, 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 프로그램
  • 프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 '프로세스'가 되는 것
    (Computer program in execution)

프로세스의 특징

  • Code, Data, Stack, Heap의 구조로 되어있는 독립된 메모리 영역을 할당 받음
  • 각 프로세스는 별도의 주소 공간에서 실행되며 독자적인 메모리 공간을 갖기 때문에 서로 메모리 공유를 할 수 없음
  • 다른 프로세스 자원에 접근하려면 프로세스간 통신 (IPC)를 사용해야 함
  • 프로세스는 최소 하나 이상의 스레드를 포함

💻Processing

  • Processor : 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛, CPU를 뜻하며 명령어를 해석하는 컴퓨터의 한 부분
  • Multi Processing : 여러 개의 Process를 사용하는 것
  • Multi Tasking : 같은 시간에 여러 개의 프로그램을 띄우는 것

💻Concurrency vs Parallelism

Concurrency

  • 프로세서는 원래 한 번에 하나의 프로세스만 실행시킬 수 있다
  • 동시성은 프로세서가 하나가 프로그램 1,2,3,4 여러 작업을 돌아가며 일부분씩 수행
  • 이렇게 진행중인 작업을 바꾸는 것을 Context Switching

Parallelism

  • 프로세서 하나에 코어 여러 개가 달려서 각각 동시에 작업
  • 듀얼 코어, 쿼드 코어, 옥타 코어와 같은 명칭의 프로세서가 달린 컴퓨터에서 할 수 있는 방식
  • 코어를 여러 개 달아 작업을 분담하게 만드는 것

💻Thread?

  • 프로세스의 실행 단위
    (The unit of execution within a process)
  • CPU의 자원을 시간을 쪼개서 사용하고 있는 것

쓰레드의 특징

  • 각 thread는 독자적인 stack Memory를 가짐
  • process 내에서 각각 stack만 할당받고, code, data, heap영역은 공유
  • 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소공간이나 자원들을 같은 프로세스 내의 스레드끼리 공유하며 실행
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메로리는 서로 읽고 쓸 수 있음
  • 한 스레드가 프로세스 자원을 변경하면 다른 이웃 스레드 (sibling thread)도 그 변경 결과를 즉시 볼 수 있음
  • 스레드는 메모리를 공유하기 때문에 동기화, 데드락 등의 문제 발생 가능

Thread Pool

  • 어플리케이션에서 사용자로부터 들어온 요청을 작업큐에 넣고, 스레드 풀은 작업 큐에 들어온 Task를 미리 생성해놓은 Thread들에게 할당
  • 매번 발생되는 작업을 병렬처리하기 위해 스레드를 생성/수거 하는데 따른 부담은 프로그램 전체적인 퍼포먼스를 저하시킴-> 프로그램 성능 저하 방지
  • 다수의 사용자 요청을 처리하기 위해 사용
  • 메모리 낭비가 발생할 수 있음

💻Multiprocess vs Multithread

Multiprocessing

  • 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리
  • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않음
  • context switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행, 많은 시간이 소모되는 등 오버헤드가 발생
  • IPC로 프로세스는 각각의 독립된 메모리 영역을 할당 받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없음

Multithreading

  • 하나의 응용프로그램을 여러 개의 스레드로 구성, 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것
  • 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하지만 멀티 스레딩을 기본으로 함
  • 웹 서버는 대표적인 멀티스레드 응용프로그램
  • 시스템 자원 소모 감소 (자원 효율성 증대)
  • 시스템 처리량 증거 (처리 비용 감소)
  • 간단한 통신 방법으로 인한 프로그램 응답 시간 단축

💻Python GIL (Global Interpreter Lock)

  • GIL은 interpreter 수준의 잠금
  • 이 잠금은 python interpreter에서 한 번에 여러 thread를 실행하지 못하게 함
  • 실행하려는 각 thread는 다른 thread에서 GIL이 해제될 때까지 기다려야 함
  • 즉, Multi Thread Python 응용 프로그램은 실제로는 single Thread
  • GIL은 여러 thread가 python 객체를 동시에 액세스하는 것을 방지
profile
Born to be happy, Not perfect 🤍
post-custom-banner

0개의 댓글