Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- window
- Swift
- github
- 한글
- FLUTTER
- Python
- 개발자
- Firebase
- Xcode
- IOS
- darkmode
- view
- JPA
- Realm
- Notification
- Apple
- Git
- SwiftUI
- rxswift
- appstore
- mac
- iOS16
- 웹뷰
- UIButton
- Session
- stack
- MacOS
- error
- Code
- Archive
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
CS ) 쓰레드와 프로세스 - EEYatHo iOS 본문
반응형
프로그램 (Program)
- 파일시스템에 존재하는 실행 파일
- 어떤 작업을 수행하기 위해 실행할 수 있는 파일
- 저장장치에 저장되어 있는 정적인 코드 덩어리
프로세스 (Process)
정의
- 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스
- OS 로부터 시스템 자원을 할당받는 작업의 단위
- CPU 시간
- 운영되기 위해 필요한 주소 공간 (링크 : 메모리 영역)
Detail. 특징
- 프로세스는 최소 1개의 쓰레드를 가짐 (메인 쓰레드)
- 각 프로세스는 별도의 주소 공간에서 실행
- 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
( ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용 )
쓰레드 (Thread)
정의
- 프로세스 내에 포함되어있는, 여러 실행 흐름의 단위
- 프로세스의 특정한 수행 경로
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
Detail. 특징
- 쓰레드는 독립된 Stack만 가지고, 자신이 포함된 프로세스의 Code, Data, Heap 영역을 다른 쓰레드들과 공유함.
- 함수 콜 스택 관리를 통한 독립적인 실행 흐름이 필요하기에 Stack을 가짐
- Code, Data, Heap 은 다른 쓰레드와 공유하기에, 동시 접근을 주의해야함
- 쓰레드가 프로세스 자원을 변경하면, 다른 이웃 쓰레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.
프로세스 vs 쓰레드
- 프로세스는 다른 프로세스들과 자원을 공유하지 않는다
- 쓰레드는 다른 쓰레드들과 자원을 공유한다
하나의 애플리케이션이 멀티 태스킹을 지원하는 방법
- 멀티 프로세스
- 멀티 쓰레드
멀티 프로세스
- 여러 프로세스를 가지고 하나의 애플리케이션을 운영
- 하나 프로세스가 죽어도 다른 프로세스에 영향이 가지 않음 = 높은 안정성
- 프로세스간 독립된 자원을 사용하기에 설계와 디버깅이 쉬움 = 크리티컬 섹션 관리를 하지 않아도됨
멀티 쓰레드
- 쓰레드간 통신이 프로세스간 통신보다 빠름 ( 프로세스는 IPC 통신을 해야하고, 쓰레드는 공유하고 있는 자원을 통해서 통신가능 )
- 쓰레드간 전환시 Stack 만 전환하면 되기에, Context-Switching 이 빠름
'CS' 카테고리의 다른 글
CS ) SOLID 원칙 ( 객체지향 설계 5원칙 ) - EEYatHo iOS (0) | 2022.12.30 |
---|---|
CS ) 메모리 영역 (Code, Data, Stack, Heap) - EEYatHo iOS (0) | 2022.12.28 |
CS ) URL fragment (0) | 2021.11.01 |
CS ) 공개키 개인키 - EEYatHo iOS (0) | 2021.08.30 |
CS ) 메모리, 가상 메모리 - EEYatHo iOS (0) | 2021.04.04 |
Comments