티스토리 뷰
프로세스
운영체제 입장에서 하나의 작업 단위
프로그램을 실행하면 그 프로그램은 -> 프로세스가 된다.
(더 정확히는 메모리에 올라감+프로세스 제어 블록(PCB)이 동시에 생성)
프로그램 - 저장장치에 저장되어 있는 정적인 상태
프로세스 - 메모리에 올라온 동적인 상태
프로세스끼리는 약하게 연결되어 있음
스레드
프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위
스레드끼리는 강하게 연결되어 있음
스레드는 별도의 Stack을 가지고 있음 ( Code, Data, Heap은 공유)
멀티태스크 vs 멀티스레드
멀티태스크 - 워드프로세서와 프린터 스풀러의 관계, 출력이 필요할 때만 데이터 주고받음(IPC:Inter Process Communication)
멀티스레드 - "워드프로세서"의 프로세스 내의 문서 편집, 문서 입출력, 맞춤법 검사 같은 스레드들이 동시에 작업. 워드프로세스가 종료되면 프로세스 내의 스레드도 강제 종료
멀티스레드 - 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄임
멀티태스킹 - 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법. 이를 시분할 시스템이라 하고, 운영체제가 CPU에 전달하는 작업은 프로세스가 아니라 스레드
멀티프로세싱 - CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경. 여러 개의 CPU 혹은 하나의 CPU 내 여러 개의 코어
CPU 멀티스레드 - 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬처리기법 (프로세스의 멀티스레드와 구분!!)
멀티스레드
워드프로세서를 여러 개 띄워 놓고 여러 작업을 하면, 코드 일부, 프로세스 제어블록, 공유 변수가 메모리에 중복되어 낭비됨
스레드는 멀티태스킹의 낭비 요소를 제거하기 위해 사용
멀티스레드의 장점
응답성 향상 : 한 스레드가 작업이 진행되지 않더라도 다른 스레드가 작업을 계속 할 수 있음
자원 공유 : 프로세스가 가진 자원을 공유
효율성 향상 : 불필요한 자원의 중복을 막음으로써 효율 향상
다중 CPU 지원
멀티스레드의 단점
인터넷 익스플로러가 멀티스레드, 구글 크롬은 여러개의 프로세스
인터넷 익스플로러는 멀티 탭 하나가 문제 생기면 전체 프로세스에 영향을 미쳐 꺼진다.
프로세스의 상세 구조
(-----정적 할당 영역-----) (----동적 할당 영역----)
[코드 영역] [데이터 영역] [힙 영역] ..... [스택 영역]
코드영역
프로그램 본체가 있는 곳
데이터 영역
변수와 데이터가 있는 곳 (전역변수, static변수)
힙 영역
프로그램이 실행되는 동안 할당됨 (during runtime)
필요할 때 메모리를 차지햇다가 필요 없을 때 메모리를 반환
클래스의 인스턴스 같은 참조 타입은 힙에 할당됨
힙은 메모리 효율이 낮다.
스택 영역
모든 값 타입은 스택에 할당됨 (arrays, strings, dictionaries, structs, enums 등)
함수 호출 시 두가지 작업 구현
1. 함수가 종료되면 함수를 호출하기 전 코드로 되돌아와야 하는데 되돌아올 메모리의 주소를 스택에 저장
2. 특정 함수에서만 사용할 수 있는 지역변수를 스택에 저장, 함수가 종료되면 자동으로 반환
스레드가 작동하는 동안 추가되거나 삭제되는 동적 할당 영역(during compile time)
스택 영역의 크기는 스레드가 진행됨에 따라 커지기도 하고 작아지기도 한다.
LIFO (Last In First Out)
스택을 최소화하면 빨라진다 -> 오류찾기 어렵고, 재사용 어려움
참고
m.yes24.com/Goods/Detail/62054527
heartbeat.fritz.ai/memory-management-in-swift-heaps-stacks-baa755abe16a
'iOS' 카테고리의 다른 글
[iOS] MVVM이란? (0) | 2021.05.26 |
---|---|
[iOS] ARC, weak와 unowned (0) | 2021.05.05 |
[iOS] NotificationCenter로 키보드 처리하기 (0) | 2021.04.09 |
[iOS] FoundationKit에는 무엇이 있을까? (0) | 2021.04.09 |
[iOS] UIView.animate 애니메이션 만들기 (0) | 2021.02.23 |