kimmy.log
로그인
kimmy.log
로그인
<CS 지식> Program & Process & Thread
Google 아니고 Joogle
·
2022년 4월 18일
팔로우
0
0
CS 지식
목록 보기
4/22
💻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 객체를 동시에 액세스하는 것을 방지
Google 아니고 Joogle
Born to be happy, Not perfect 🤍
팔로우
이전 포스트
<CS 지식> Framework vs Library
다음 포스트
<CS 지식> SQL vs NoSQL
0개의 댓글
댓글 작성