멀티 태스킹
멀티태스킹은 OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위이다.
이를 통해 여러 응용 프로그램을 동시에 열고 작업을 할 수 있다(음악을 들으며 웹서핑 하고, 메신저 하기)
하나의 프로세스는 4가지 구조로 되어 있다.
- 코드 영역(code area) : 프로그래머가 작성한 프로그램이 코드 영역에 작성된다
- 데이터 영역(data area) : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있다.
- 스택 영역(stack area) : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할때 사용된다.
- 힙 영역(heap area) : 동적으로 할당되는 데이터들을 위해 존재하는 공간이다. ex) malloc
위의 특징 외에도 코드 영역과 데이터 영역은 선언할 때 그 크기가 결정되는 정적 영역이지만,
스택 영역과 힙 영역은 프로세스가 실행되는 동안 크기가 늘어났다 줄어들기도 하는 동적 영역이다.
서로 다른 프로세스간의 메모리 공간 접근은 허용되지 않는다
여러 프로세스가 동시에 실행되고 관리되는 것 처럼 보이지만 사실 한가지씩 처리되는 것이다.
cpu가 완전 빠르기 때문에 프로세스들이 번갈아가며 실행되고 관리하는 것이 동시에 처리되는 것 처럼 보이는 것이다.
프로세스
메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
운영체제로부터 자원을 할당받는 작업의 단위
스레드
할당 받은 자원을 이용하는 실행의 단위
어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
일반적으로
하나의 프로그램은 하나이상의 프로세스를 가지고 있고,
하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다
즉 프로세스를 생성하면 기본적으로 하나의 스레드가 생성된다
스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.
Multi Process / Multi Thread
멀티프로세스
하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
장점
- 안전성이 좋다(여러개의 자식 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않는다
- 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당된다
단점
- 메모리 사용량이 많다
- 스케쥴링에 따른 Context Switch가 많아지고 성능 저하의 우려가 있다
멀티 스레드
하나의 애플리케이션을 여러 개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것
장점
- 응답성이 좋다(프로그램의 일부분(자식스레드)가 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 수행된다.
- 자원공유가 쉽다(스레드들은 부모 프로세스의 자원과 메모리를 공유할 수 있다.
- 프로세스보다 비용이 적게 든다
- 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
단점
- 구현 및 테스트, 디버깅이 어렵다
- 너무 많은 스레드 사용은 오버헤드를 발생시킨다.
- 동기화 그리고 교착상태가 발생하지 않도록 주의해야 한다.
- 자식 스레드 중 하나에 문제가 생긴경우 전체 프로세스에 영향을 줄 수 있다.
Thread Safe
Context Switching
출처 : https://brunch.co.kr/@babosamo/100, https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4
'STUDY > CS' 카테고리의 다른 글
TCP / UDP (0) | 2023.01.05 |
---|---|
동기 / 비동기 (0) | 2023.01.05 |
Base64 인코딩 (0) | 2023.01.05 |
자료구조(해시테이블) (0) | 2023.01.04 |
자료구조 (스택 / 큐, 리스트/배열) (0) | 2023.01.04 |
댓글