1. Process vs Thread
테코톡에 올라온 Thread 관련 영상들을 싹 시청했다.
Process : 자원 할당 단위
Thread : 작업 단위
실행 단위 : cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념 (하나의 cpu core에 한순간에 적재되는 그 것!)(부연 설명이 없는) 프로세스 : 단일 스레드 프로세스
📍 Program vs Process vs Processor
Program
- 실행 되기 전
- 명령어, 코드 및 정적인 데이터의 묶음
Process
- 실행 중인 Program
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
Processor
- CPU
Program이 Process가 되려면?
- 1) Process가 필요로 하는 재료들이 Memory에 올라감
- Code 영역 + Data 영역 + Heap 영역 + Stack 영역
- 2) 해당 Process의 정보를 담고 있는 PCB 블록 생성
📍 Context Switching
하나의 프로세스만 사용하기보다는 여러 프로세스를 동시에 사용 (ex. chrome, slack, kakaotalk, intellij 등)
-> 하나의 프로세스가 cpu를 점유하면 다른 프로세스 작동 못함
-> 여러개의 프로세스를 짧은 텀으로 반복하면서 실행
📍 Process
- 자원 할당 단위
- 각 프로세스는 독립적
Process를 통째로 Context Swtiching하는건 피곤하고 힘든 작업 (Code, Data, Heap, Stack 몽땅 들고 올라갔다 내려갔다)
경량화된 Process인 Thread 등장!
📍 Thread
- 작업 할당 단위 (한 프로세스 내에서 구분되어진 실행 단위) (CPU이용 기본 단위)
- 스레드간 자원 공유 (Process의 Code, Data, Heap 영역 공유 + 각 Thread마다 Stack 영역 따로)
=> 공유되는 자원이 있기 때문에 Context Switching 비용 절감
📍 Multi Process vs Multi Thread
"하나의 어플리케이션에 대한 2가지 처리방식"
한 어플리케이션이 여러 요청을 처리해야하는 상황에서
(ex. 여러 사용자의 로그인 요청)(ex. 인텔리제이에서 소스코드를 수정하며 테스트 코드를 돌리고, 코드 추천도 받고 등)
1. Multi Process
부모 프로세스는 fork해서 자식 프로세스 여러개 만들어서 일 처리.
자식 프로세스는 부모와 별개의 메모리 영역 확보.
- 각 프로세스는 독립적
- IPC를 사용한 통신
- 자원 소모적, 개별 메모리 차지
- Context Switching 비용 큼
- 동기화 작업 필요 없음
2. Multi Thread
- Thread끼리 긴밀하게 연결되어 있음
- 공유된 자원으로 통신 비용 절감
- 공유된 자원으로 메모리 효율적
- Context Switching 비용 작음
- 공유 자원 관리를 해야함
실행단위는 프로세스일 수도 있고 스레드일 수도 있다.
- 만약 프로세스에 여러개의 스레드가 있지 않으면 단일 스레드 하나로 프로세스 실행 -> 실행 단위는 프로세스 그자체 (해당 프로세스의 하나밖에 없는 스레드가 실행 단위)
- 프로세스에 여러개의 스레드가 있다면 각각의 스레드가 프로세스 실행 -> 실행 단위는 스레드
📍 Multi Thread가 무조건 좋을까?
여러 탭 띄우고 작업하는 경우~
인터넷 익스플로러 : Multi Thread
- Thread끼리 긴밀하게 연결되어 있음
- 한 Thread(= 한 탭)에 문제 생기면 다 죽음
구글 크롬 : Multi Process
- 각 Process는 독립적
- 한 Process(=한 탭)에 문제 생겨도 다른 탭 영향 덜 받음
📍 Multi Core
Multi Process&Multi Thread는 '처리 방식'에 가깝다 = S/W
Multi Core = H/W
Core
- Thread의 작업을 수행하는 Processor
1. 단일 Core
- 동시성 : 하나의 코어에서 하나 이상의 실행단위가 번갈아서 진행되지만 동시에 진행되는 것처럼 보이는 것
- 짧은 순간에 cpu의 시간을 분할해서 동시에 하는 것처럼 보이도록
- 동시에 여러가지를 진행하기 위해서 여러 실행 단위를 번갈아 실행
2. Multi Core
- 병렬처리 : 둘 이상의 코어에서 동시에 하나 이상의 실행단위가 한꺼번에 진행되는 것
- 물리적으로 여러 코어를 사용해 다수의 실행 단위를 동시에 처리할 수 있도록
2. 구구의 [HTTP Cookie&Session, Thread] 강의를 들었다.
3. 구구의 [ThreadTest]를 기반으로 Thread에 대해 매우 살짝.. 학습했다.
thread 왜이리 어려워~~
4. 톰캣 미션 리뷰 반영
session관련 부분 빼고 수정 끝!
세션 관련 부분은 내일 머리 맑을 때 수정해야겠다~~
감정회고
- 이번 시즌에 취준 할지말지 고민하고 있었는데, 어제 새벽에 결론을 내렸다!
- 오늘 아침에 분명 홀가분하고 상괘했는데.. 한 4시부터 점점 영혼이 나갔다 😇
- 정말 간만에 11시까지 남았다.
- 할 일이 정말 많다.. 미션 + 플젝 고도화 + 개인 공부
- 요새 좀 심신미약인 것 같다..