0. 개요
- 프로세스 : 운영체제로부터 자원을 할당 받은 작업의 단위
- 스레드 : 프로세스가 할당 받은 자원을 이용하는 실행 흐름의 단위
1. 프로세스
프로그램이란?
- 컴퓨터에서 실행할 수 있는 파일 (*.exe, *dmg...)
- 파일을 실행하지 않은 상태를 정적 프로그램이라고 한다.
- 자바, C언어와 같은 프로그래밍 언어의 코드로 작성된 코드 덩어리이다.
프로세스란?
- 정적 프로그램을 실행 시켜 동적 프로그래밍으로 변해 컴퓨터가 작업 중인 프로그램을 의미한다.
- 모든 프로그램은 운영체제가 실행하기위해 메모리 공간을 할당해 주어야 하기 때문에 프로그램이 실행되는 순간 메모리에 올라가게 된다.
- 운영 체제는 시스템 자원 (CPU)를 할당받아 프로그램 코드를 실행시킨다.
프로세스의 한계
- 과거에는 프로그램을 실행할 때 하나의 프로세스만을 사용해도 괜찮았지만 프로그램이 복잡해지고 다채로어 지면서 프로세스 하나 만으로 작업을 수행하기 어려워 졌다.
- 예를들어 과거에 파일을 다운 받을 때면 완료될 때까지 하루 종일 기다려야 했다. 여러 프로세스에 동일한 프로그램을 실행시키면 그만큼 메모리와 중복된 CPU 자원 할당이 이루어 졌다.
- 스레드는 이러한 프로세스의 한계를 해결하기 위해 탄생했다.
2. 스레드
스레드란?
- 프로세스 내에서 동시에 진행되는 흐름의 단위, 작업 갈래를 말한다.
- 예를들어 크롬 브라우저가 실행되면 하나의 프로세스가 생성된다. 브라우저에서 온라인 쇼핑을 하면서 파일을 다운 받을 수 있듯이 하나의 프로세스 안에서 여러가지 작업 흐름이 동시적으로 진행된다.
- 이러한 일련의 작업 흐름을 스레드라고 하며 여러 개인 경우 멀티 스레드라고 한다.
3. 프로세스, 스레드와 메모리
하나의 프로세스가 실행됨에 따라 메모리에는 Code, Data, Stack, Heap 공간으로 구성된 주소 공간이 생성된다.
스레드는 프로세스가 할당 받은 메모리 자원을 이용하는 실행 단위이며 프로세스의 자원을 공유한다.
스레드는 Stack만 할당 받아 복사하고 나머지 Code, Data, Heap은 다른 스레드들과 공유한다.
스택은 함수 호출 시 전달되는 매개변수, 반환 주소값, 지역 변수를 저장하는 메모리 공간이다.
독립적인 스택을 지녔다는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가 된다는 의미이다.
즉, 스레드는 독립적인 스택 영역을 가짐으로서 독립적인 실행 흐름을 가진다.
4. 프로세스의 자원 공유
프로세스는 기본적으로 별도의 메모리 주소 공간을 할당 받아 실행되기 때문에 한 프로세스가 다른 프로세스의 변수, 자료구조에 접근할 수 없다.
프로세스와 다른 프로세스 사이의 자원 공유하는 방법은 다음과 같습니다.
- IPC (Inter-Process Communication) : 프로세스 간 통신 -> 파이프, 소켓, 메세지, 큐,,,
- LPC (Local inter-Process Communication)
- 별도의 공유 메모리를 만들어 정보를 주고 받도록 설정
하지만 프로세스의 자원 공유는 단순히 CPU 레지스터의 교체 뿐만 아니라 RAM과 CPU 사이 캐시 메모리 초기화도 되기 때문에 자원 부담이 크다는 단점을 가지므로 다중 작업이 필요한 경우 스레드를 이용하는 것이 훨씬 효율적이다.
현대 컴퓨터 운영체제는 다중 프로세싱을 지원하지만 다중 스레딩을 기본으로 한다.
5. 동시 실행의 원리
우리가 웹 서핑을 하고 음악을 들으며 메신저를 확인할 수 있는건 컴퓨터가 내부적으로 멀티 태스킹 기술을 적용하고 있끼 때문이다.
동시 처리는 단순히 프로그램을 동시에 실행하는 것이 아닌 내부적으로 복잡한 원리에의해 처리된다. 그리고 이는 운영체제 이론의 핵심 원리이기도 하다.
멀티 코어와 스레드 (하드웨어적 스레드)
- CPU 한 개는 여러 개의 코어를 가질 수 있다. CPU 코어 유닛은 명령어를 메모리에서 가져와 해석하고 실행하는 물리적 반도체 유닛을 의미한다.
- 쓰레드는 논리적 코어의 갯수를 말한다. 4코어 8쓰레드는 물리적으로 4개의 CPU 코어를 가지고 있지만 하나의 코어가 두 개 이상의 스레드를 동시 실행 가능하다는 의미이다. 즉, 운영체제는 8개의 작업을 동시에 처리 할 수 있으며 이를 하이퍼 스레딩 기술이라 말한다.
- 고작 몇 개 안되는 논리적 스레드만으로도 수십개의 프로그램을 처리할 수 있는건 CPU의 병렬성, 동시성 원리에 의해 가능하다.
6. CPU의 작업 처리 방식
병렬성 : 메모리로부터 전달된 명령어를 해석하고 실행하는 반도체 유닛인 여러 개의 코어에 맞춰 여러 개의 프로세스와 스레드 작업을 병렬로서 물리적으로 동시에 수행한다.
동시성 (Concurrency) : 둘 이상의 작업이 동시에 실행 되는 것을 의미한다. 이 때의 '동시'는 실행에 있어 동시에 가깝게 하다는 의미이다. 한 개의 코어는 여러 작업을 계속 번갈아 가며 조금씩 처리해 마치 프로그램이 동시에 실행되는 것처럼 보이게 한다. 프로세스는 매우 빠른 속도로 번갈아가며 처리하기 때문에 동시에 처리되는 것처럼 보인다.
- 번갈아가며 실행할 작업을 아주 잘게 나누고 아주 조금씩만 수행하는 식으로 동작한다.
- 진행중인 작업을 번갈아 바꾸는 것을 Context Switching이라 부른다.
동시성의 필요성
- 하드웨어적 한계 : CPU 발열로 인해 코어의 성능을 올리는 대신 여러 개의 코어를 넣고 있으나 그 갯수는 제한적이므로 수십수백 개의 프로세스를 처리하기 위해서는 동시성이 필요하다.
- 논리적 효율 : 만약 4코어 8스레드의 CPU 환경에서 16개의 작업을 하고 있다고 했을 때 8개는 오래 걸리는 작업이고 나머지 8개는 빨리 끝나는 작업이다. 논리적으로 8개의 코어이니 최대 8개까지 동시 실행 할 수 있지만 최악의 경우 오래 걸리는 8개 작업을 먼저 동시처리 한다면 나머지 8개는 짧은 시간이 소요 됨에도 현재 처리 중인 작업이 다 끝날 때까지 기다려야 한다. 따라서 작업을 아주 작게 나눠 번갈아 처리하는 동시성 개념을 적용한다.
즉, 멀티 스레딩 기술에는 적절한 병렬성과 동시성을 섞어 적용한다.
7. 프로세스와 스레드의 생명주기
프로세스 스케쥴링 :
- 프로세스 스케쥴링은 운영체제에서 프로세스를 선택하고 CPU를 할당하는 작업을 의미한다.
- 프로세스의 우선순위와 작업량을 고려하여 효율적으로 배치한다.
- 시스템의 전반적 성능 향상과 관련되어 있기 때문에 멀티 태스킹 작업을 구현하는데 핵심적이다.
- 스케쥴링을 구현하는 알고리즘으로는 대표적으로 FCFS, SJF, Priority, RR, Multilevel Queue 등이 있다.
프로세스 상태 :
- 생성 : 프로세스가 생성 되었으나 아직 준비되지 않은 상태
- 준비 : 프로세스가 실행하기 위해 기다리는 상태, CPU를 할당받을 수 있으며 언제든 실행할 수 있다.
- 실행 : 프로세스가 CPU를 할당받아 실행되는 상태
- 대기 : 프로세스가 특정 이벤트가 발생하여 대기하는 상태, CPU를 할당받지 못하며, 다시 준비 상태로 전환될 때까지 대기한다.
- 종료 : 프로세스가 실행을 완전히 종료하고 메모리에서 제거된다.
프로세스 상태 전이 :
- 프로세스의 상태는 OS에의해 변경된다.
- 운영체제는 프로세스 상태를 감시하고 이를 기반으로 프로세스 스케쥴링을 통해 프로세스의 관리 및 제어를 수행한다.
- Admitted (new -> ready) : 생성을 승인 받음
- Dispatch (ready -> running) : 준비 상태의 프로세스들 중 하나가 스케쥴러에 의해 실행됨
- Interrupt (running -> ready) : 타임아웃, 이벤트 발생 등으로 현재 실행중인 프로세스를 준비 상태로 전환, 끼어든 작업을 먼저 수행
- I/0 or Event wait (running -> waiting) : 실행 중이던 프로세스가 입출력이나 이벤트 처리를 위해 해당 입출력과 이벤트가 끝날 때까지 대기 상태로 전환
- I/0 or Event completion (wating -> ready) : 입출력 또는 이벤트 처리가 완전 끝난 프로세스를 다시 준비 상태로 만들어 스케쥴러가 선택할 수 있는 상태로 전환
프로세스 컨텍스트 스위칭 :
- 컨텍스트 스위칭은 CPU가 한 프로세스에서 다른 프로세스로 전환되는 일련의 과정을 말한다.
- 컨텍스트 프로세싱은 동작중인 프로세스가 대기하고 이를 보관한다. 다음 순서의 프로세스가 동작하면서 이전에 보관한 프로세스 상태를 복구하는 작업을 의미한다.
- 스케쥴러는 컨텍스트 스위칭이 일어날 때 다음 실행할 프로세스를 결정한다.
PCB
- Process Control Block : 프로세스 제어 블록은 운영체제가 프로세스를 관리하기 위해 해당 프로세스의 상태 정보를 담은 자료구조이다.
- PCB는 프로세스 스케쥴링을 위해 프로세스와 관련된 모든 정보를 임시로 저장한다.
- 포인터 : 프로세스의 위치를 저장한다.
- 프로세스 상태 : 생성, 준비, 실행, 대기, 종료 상태를 저장한다.
- 프로세스 아이디 : 프로세스 식별자
- 프로그램 카운터 : 프로세스가 다음에 실행될 명령어의 주소를 포함한 카운터를 저장한다.
- 레지스터 : 누산기, 베이스, 레지스터, 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보
- 메모리 제한 : 운영체제의 메모리 관리 시스템과 관련된 정보
- 열린 파일 목록 : 프로세스를 위해 열린 파일 목록
CPU 동작 상태
- idle : 대기
- executing : 실행
Context Switching Overhead:
- 컨텍스트 스위칭은 사용자에게 빠른 반응성과 동시성을 제공하나 프로세스 변경 과정에서 프로세스 상태, 레지스터 값 등 저장되고 불러오는 작업이 수행되어 시스템에 부담을 주게 된다.
- Context Switching 과정에서 완전히 CPU가 idle 되는 순간 발생하는 간극을 컨텍스트 스위칭 오버헤드라고 한다.
- 즉, 프로세스 A에서 B로 Context Switching을 할 때 A 정보 저장, B정보 복원에 필요한 간극을 컨텍스트 스위칭 오버헤드라고 한다.
컨텍스트 스위칭 오버헤드의 원인
- PCB 저장 복원 비용
- CPU 캐시메모리 무효화 비용
- 프로세스 스케쥴링 비용
보통 멀티 스레드 기능은 여러 개의 스레드가 동시에 돌아가기 때문에 무조건 적으로 프로그램이 상승할거라 예상하지만 컨텍스트 스위칭 오버헤드로 인해 오히려 멀티스레드가 싱글 스레드보다 성능이 떨어질 수도 있다.
스레드 스케쥴링
- 프로세스 스케쥴링과 마찬가지로 운영체제가 CPU를 사용할 스레드를 선택하고 CPU를 할당하는 작업을 의미한다.
- 스레드의 우선순위, 실행시간, 입출력 요청등의 정보를 고려해 CPU가 사용할 스레드를 선택한다.
- 스레드 구현 알고리즘 : Round Robin, Priority-based scheduling, Multi-level Queue scheduling
- 프로세스 스케쥴링과 달리 하나의 프로세스 내에서 다수의 스레드가 동작하는 형태이기 때문에 스레드 간 상호작용 문제와 동기화 문제를 고려해야 한다.
스레드 상태
- NEW : 스레드가 생성되었으나 아직 호출되지 않은 상태
- RUNNABLE : 스레드가 실행되기 위해 기다리는 상태 언제든지 CPU를 할당받아 실행할 준비가 되어있다.
- BLOCKED : 특정 이벤트가 발생해 대기하는 상태, CPU를 할당 받지 못하며 다시 RUNNABLE 상태로 전환될 때까지 기다린다.
- TERMINATED : 스레드가 실행을 완전히 종료되고 메모리에서 제거된 상태
스레드 컨텍스트 스위칭 :
- 멀티 스레딩 환경에서 스레드 간 실행을 전환한다.
프로세스 컨텍스트 스위칭과 달리 스레드 컨텍스트 스위칭은 하나의 프로세스 내 스레드를 교환한다.
TCB
- TCB : Thread Control Block, 스레드 제어 블록은 PCB 처럼 스레드에대한 정보를 담은 자료구조이다.
- TCB는 PCB에 담겨 있다.
- 스레드 상태정보, 아이디, 우선순위, 스케쥴링 정보를 저장한다.
- TCB는 운영체제에 의해 생성되고 스레드와 생명주기를 함께한다.
- 스레드 간 자원 공유, 동기화 작업을 TCB를 사용해 관리된다. 뮤텍스, 세마포어와 같은 동기화 기법을 사용할 때 TCB에서 해당 스레드의 뮤텍스, 세마포어 정보를 관리하고 접근 권환을 획득하고 반납할 때 TCB 정보를 업데이트 한다.
8. 프로세스 컨텍스트 스위칭 VS 스레드 컨텍스트 스위칭
프로세스 컨텍스트 스위칭과 스레드 컨텍스트 스위칭 모두 멀티 태스킹 환경에서 여러 프로세스 혹은 스레드를 동시적으로 실행하기위한 기술이다.
- TCB 는 PCB보다 가볍다 : 스레드 컨텍스트 스위칭은 프로세스 컨텍스트 스위칭보다 빠르다. 스레드들은 프로세스 내에서 text, data, heap 영역 메모리를 공유하고 TCB에는 stack, register pointer 정보만 저장되기 때문에 가볍고 빠르게 읽고 쓸 수 있다.
- 캐시 메모리 초기화 : CPU 캐시 메모리는 CPU와 메모리 사이에 위치해 CPU가 한 번 이상 읽은 메모리의 데이터를 저장해 다시 그 메모리의 데이터가 필요한 상황에서 메인 메모리를 거치지 않고 곧바로 데이터를 전달해준다. 그런데 프로세스 컨텍스트 스위칭은 다른 프로세스의 실행으로 인해 CPU가 새로 명령어와 데이터를 로드해야 함으로 CPU 캐시 메모리가 초기화되어야 한다. 반면 스레드 컨텍스트 스위칭은 프로세스 내에서 스레드의 스택, 레지스터 값 등의 일부 정보만 변경되므로 CPU 캐시 메모리가 초기화 되지 않는다. 다만 스레드가 다른 CPU 코어에서 실행될 때 새로 스레드 컨텍스트 정보가 로드 되어야 하므로 초기화 될 수도 있다.
- 자원 동기화 문제 : 스레드 컨텍스트 스위칭이 발생하고 서로 다른 스레드가 Heap 영역의 공유 데이터에 접근하고 지나간 경우 동기화 문제가 발생할 수 있다. 이를 스레드 간 경쟁 조건이라 한다. 프로세스 역시도 기본적으로 독립된 공간이지만 IPC와 같은 공유 자원을 사용하는 경우 경쟁 조건이 발생할 수 있다. 여러 개의 프로세스가 동시에 파일 시스템에 접근해 파일을 수정하려 할 때 컨텍스트 스위칭이 발생하면 다른 프로세스가 그 파일에 접근해 해당 파일 내용이 손상될 수 있다. 이를 해결하기 위해 각 상화에 적절한 공유 자원의 동기화 매커니즘을 필요로 한다 .
9. 멀티 프로세스와 멀티 스레드
멀티 프로세스와 멀티 스레드는 한 어플리케이션에 대한 처리 방식이다. 프로세스와 스레드를 다중으로 적용하기 때문에 성능 향상을 기대할 수 있으나 이로인한 부가적 문제가 발생할 수도 있다. 따라서 각각의 장단점을 파악해 적재적소에 사용하는 것이 요구된다.
- 프로그램 안정성 : 멀티 프로세스는 각 프로세스 별로 독립적인 메모리 공간을 가지기 때문에 비정상적인 프로세스의 종료가 발생하더라도 다른 프로세스에 영향을 주지 않아 프로그램 전체의 안전성을 확보할 수 있다. 하지만 멀티 스레드의 경우 하나의 스레드에서 문제가 발생하면 다른 스레드에도 영향을 받아 프로그램 전체가 종료될 수 있다. (스레드 에러가 발생한 경우 적절한 예외 처리를 하고 스레드 풀에서 잔여 스레드를 가져오는 식으로 문제를 해결할 수 있으나 추가 비용이 발생한다. )
- 프로그램 병렬성 : 멀티 프로세스는 여러 개의 CPU 코어를 활용해 병렬적으로 각 프로세스를 실행 함으로써 성능 향상을 기대할 수 있다. 멀티 스레드는 멀티 프로세스보다 훨씬 효율적이고 빠른 방식으로 분산 처리를 가능케 한다.
- 시스템 확장성 : 멀티 프로세스는 각 프로세스 별로 독립적이기 때문에 새로운 기능 혹은 모듈을 추가 및 수정을 할 때 다른 프로세스에 영향을 주지 않아 쉽게 시스템의 규모를 확장할 수 있다. 예를들어 네트워크 서버의 로드 밸런서는 대규모 요청 처리를 동시에 처리하기위해 클라이언트의 트래픽을 여러 서버 컴퓨터에 분산 시킨다. 이 때의 서버는 여러 대의 컴퓨터 혹은 여러 개의 서버 프로세스를 의미한다. 백엔드 개발자가 클러스트를 구성해 서버 프로세스를 띄워 요청을 ㄹ분산 시키는 것이 이에 해다된다. (node.js의 PM2) 이처럼 멀티 프로세스를 사용해 여러 대의 서버 요청을 분산시켜 처리 함으로서 시스템 규모를 쉽게 확장시키고 부가적으로 서버 장애나 다운 타임을 최소화한다.
- 컨텍스트 스위칭 오버헤드 : 멀티 태스킹을 구성하는 핵심 기술인 컨텍스트 스위칭 과정에서 성능저하가 발생한다. 특히 프로세스 컨텍스트 스위칭의 경우 다음 작업을 위해 메모리를 검색하고 CPU 캐시 메모리를 초기화하고 컨텍스트를 저장 및 불러오기를 해야 하기 대문에 비용이 발생한다. 따라서 멀티 프로세스 환경에서 오버헤드를 줄이기위해 적절한 프로세스 수 유지, I/O 바운드 작업이 많은 프로세스 분리, CPU 캐시 효율적 활용 등의 방법을 고려해야 한다. 반면 스레드 컨텍스트 스위칭은 프로세스 컨텍스트 스위칭보다 가벼워 훨씬 빠르다. 멀티 스레드는 공유 자원을 기본적으로 내장하고 있어 내장한 데이터 용량이 작아 생성, 제거 할 때 훨씬 빠고 프로세스 내에서 여러 개의 스레드가 생성되기 때문에 캐시 메모리를 초기화 하지 않아도 되어 상대적으로 스위칭 비용이 낮다. 따라서 멀티 스레드는 스레드 간 통신, 자원 공유가 더 용이하고 프로세스보다 작고 가벼워 컨텍스트 오버헤드도 작아 응답 시간이 빠르다.
- 자원 공유의 효율성 : 멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 가지기 때문에 결과적으로 메모리 사용량이 증가한다. 만약 프로세스 간 자원 공유가 필요한 경우 IPC 통신 기법을 사용해야 한다. 이를 위해 파이프, 소켓, 메세지, 큐 등 다양한 방법이 사용된다. 하지만 IPC 자체로 오버헤드가 발생한다. 파이프나 소켓 같은 IPC 기법은 데이터 복사 및 버퍼링 과정에서 성능저하를 발생시키고 코드의 복잡성을 증가시킨다. 반면 멀티 스레드의 경우 하나의 프로세스 내에서 여러 개의 스레드가 생성되기 때문에 Heap 영역과 같은 공유 메모리에서 스레드 간 자원 공유가 가능하다. IPC를 사용하지 않고도 데이터를 공유할 수 있기 때문에 자원의 효율적 활용이 가능하고 자원 소모가 줄어든다.
- 동기화로 인한 성능저하 : 멀티 스레드는 공유 자원에 동시에 접근할 수 있어 동기화 문제가 발생한다. 동시에 하나의 공유 자원에 접근하면 의도치 않은 자원 손상이 발생할 수 있다. 따라서 스레드 간 동기화는 데이터 접근 제어를 위해 필수적인 기술이다. 동기화 작업은 여러 스레드가 자원에 접근하는 순서를 통제하는 것이다. 이를 통해 동시 접근으로 인한 동시 수정 문제를 방지한다. 하지만 동기화 작업은 여러 스레드 접근을 제한하는 것이기 때문에 병목 현상이 일어나 성능 저하의 문제를 가지고 있다. 병목 현상을 해결하기위해 임계영역에 대한 뮤텍스, 세마포어 방식을 활용한다. 멀티 프로세스는 기본적으로는 독립적인 메모리 공간을 사용하나 IPC와 같은 방식으로 공유 자원을 사용할 경우 멀티 스레드와 마찬가지로 병목 현상이 발생할 수 있다.
임계 영역 (Critical Section) : 멀티 스레드 프로그래밍에서 임계 영역은 공유 자원의 접근하는 코드 영역을 의미한다. 전역 변수나 heap 메모리 영역을 들 수 있다.
뮤텍스 (Mutex) : 공유자원의 접근을 제어하기위한 상호 배제 기법 중 하나로서 임계 영역 진입 전 락을 획득하고 임계 영역을 빠져나올 때 락을 해제하여 다른 스레드들이 접근할 수 있도록 한다. 오직 하나의 스레드 만이 공유자원에 접근할 수 있도록 제어한다.
세마 포어 (Semaphore) : 동시에 접근 가능한 스레드의 갯수를 지정한다. 세마포어 값이 1이면 뮤텍스이다. 값이 2 이상인 경우 동시에 접근 가능한 스레드 수를 제어할 수 있다. 스레드는 임계 영역에 진입하기 전 세마 포어 값을 확인하고 허용된 범위의 값인 경우에만 락을획득한다.
데드락 (교착 상태) : 다수의 프로세스나 스레드가 서로 자원을 점유하고 다른 프로세스와 스레드는 무한히 점유된 자원을 기다리는 상황에서 발생하는 현상을 교착 상태라고 한다. 예를들어 스레드1이 자원 A를 점유하고 있는 상황에서 자원 B를 필요로 하고 있고 스레드2는 자원 B를 점유하면서 A를 필요로 하는 경우를 들 수 있다. 스레드 1은 자원 B를 필요로 하면서 자원 A를 빌려줄 수 없고 스레드 2는 자원 A를 필요로 하면서 B를 빌려줄 수 없다. 이처럼 다수의 스레드가 같은 락에 동시에 다른 명령에의해 획득하려 할 때 무한정 기다리는 상황을 의미한다. 이러한 현상은 공유 자원에 대한 동시 엑세스로 인해 발생하는 문제로서 이를 방지하기 위해 상호배제(Mutual Exclusion), 점유와 대기(Hold and Wait), 비선점(No Preemption), 순환대기 (Circular Wait) 등의 알고리즘으로 해결한다.
데드락 회피(Avoidance) : Safe Sequence, Safe State, 시스템의 프로세스들이 요청하는 자원에 데드락을 발생시키지 않으면서 차례로 모두에게 할당할 수 있다면 안정 상태에 있다고 한다. 이를 가능케 하기 위해서 순서대로 프로세스들에게 자원을 할당, 실행, 종료 하는 작업을 하여 데드락이 발생하지 않는 순서를 찾았다면 이를 안전 순서(Safe Sequence)라 합니다.
- 디버깅의 어려움 : 여러 스레드의 동시 실행은 각 스레드의 동작 추적을 어렵게 한다.
10. 참고
👩💻 완전히 정복하는 프로세스 vs 스레드 개념
한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아
inpa.tistory.com
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-process-multi-thread
👩💻 멀티 프로세스 vs 멀티 스레드 비교 💯 완전 총정리
멀티 프로세스와 멀티 스레드는 한 어플리케이션에 대한 처리방식 이라고 보면 된다. 단순히 프로그램을 여러개 띄워놓는 것이 멀티 프로세스가 아니라 이 둘은 언제 어느때에 어떤 방식으로
inpa.tistory.com
'ETC' 카테고리의 다른 글
[취준 꿀팁] 잡다로 역량검사를 JOBDA (1) | 2023.06.20 |
---|---|
기술면접 대비 (0) | 2023.05.12 |
자바에서 스택과 힙 (0) | 2023.05.12 |
메모리의 구조 (0) | 2023.05.12 |
오버헤드, 스택 오버 플로우 (1) | 2023.05.12 |