일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Preview
- rendering
- CI/CD
- 스파르타코딩클럽
- 비동기
- 접근 제한 라우팅
- FileReader
- react
- 라우팅
- previousState
- qwe
- Github Actions
- routing
- Redux
- route
- 항해99
- socket.io
- imagePreview
- setstate
- updater
- 후기
- 동기
- 개발
- 미리보기
- useEffect
- 배포
- 브라우저 렌더링
- S3
- 채팅방
- 7기
- Today
- Total
삐옹
[항해톡 2주차]프로세스와 스레드 본문
1주차 REST Api 발표에 이어서 2주차 프로세스와 스레드를 신청하게 되었다.
나는 컴퓨터 사양을 전혀 볼 줄 모르는 컴퓨터까막눈이다. 아 램다익선..
인텔이랑 m1, 코어에 뭐 숫자가 붙어있고, 램이 몇이다 어쩌구저쩌구.
뼛 속까지 문돌이인 내게는 너무나 생소히게 느껴지는 용어들이라.
대체 뭘 나타내는걸지 궁금증을 항상 갖고있었는데..(그렇다고 찾아본 적은 없다)
그런 부분에 있어 이 주제가 조금은 도움이 되지 않을까 싶어
프로세스와 스레드를 맡아 준비하게 되었다.
목차
- 용어정리
- 프로세스
- 프로세스 상태(작업 흐름)
- 프로세스 구조
- 멀티 프로세스
- 스레드
- 스레드 구조
- 멀티 프로세스 vs 멀티 스레드
- 멀티코어
- 멀티스레딩
- 요약정리
용어 정리
프로그램
: 실행되기 전의 실행파일. 어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일. 웹브라우저, 워드, 카톡, vsc 등
프로세스
: 운영 체제 위에서 실행 중인 프로그램. 프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 실행 대기중인 상태.
프로세스는 기본적으로 하나의 프로그램만 실행할 수 있다.
프로세서
: 프로세스가 동작될 수 있도록 하는 하드웨어(=cpu)
*동작: 프로그램의 자원이 메모리에 올라오고, 실행 되어야 할 코드의 메모리 주소를 CPU의 레지스터로 올리는 것.
Context Switching
- CPU는 기본적으로 하나의 프로그램만 실행할 수 있다.
- CPU가 여러 프로세스를 돌려가면서 작업을 진행하는 것을 context switching 이라고 한다.
- 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.
ㄹ
이 context switching를 하기위해서 CPU는 다음의 프로세스의 상태와 진행 정보를 알아야 한다.
프로세스의 상태
준비 -> 실행 -> I/O작업 -> 대기 -> 준비 -> ... -> 실행 -> 프로세스 종료
프로세스의 구조
code - 프로그램의 코드
data - 전역변수
heap - 동적으로 생긴 데이터 ex) new Object()
stack - 호출된 함수, 리턴값, 지역 변수 등 임시 데이터
멀티프로세스
장점
- 독립된 구조로 안전성이 높은 장점이 있다.
- 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업속도가 느려지는 손해정도는 생기지만 정지되거나 하는 문제는 발생하지 않는다.(google chrome)
- 여러개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴하다.
문제점
- 독립된 메모리 영역이기 때문에 작업량이 많을수록( Context Switching이 자주 일어나서 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능저하가 발생 할 수 있다.
- Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다.
멀티스레드
장점
- 메모리 낭비가 적다(공유 자원, 효율 up)
- 통신 비용이 적다(공유 자원)
- context switching 비용이 적다.
문제점
- heap, data, code의 자원을 공유하기 때문에 동기화 작업이 필요하다.
- 스레드들이 긴밀히 연결되어 있기때문에 하나의 스레드에서 장애가 발생하면 전체 스레드에도 문제가 생긴다.(IE 에러창)
요약
- 프로세스는 실행되고 있는 파일을 나타낸다.
- 프로세스와 스레드에 의해 context switching이 일어나며 작업을 동시에 수행할 수 있다.
- 멀티 프로세스와 멀티 스레드는 하나의 작업을 동시에 처리하기 위한 다른 처리방식이다.
- 멀티 프로세스는 독립된 자원을 갖고, 자원을 공유하지 않기에 자원이 소모되고 메모리가 낭비되며 context switching 비용이 크다.. 필요한 자원을 공유하기 위한 통신이 필요하다. 대신 동기화 작업은 필요없다.
- 멀티 스레드는 공유되는 자원을 갖는다. 그래서 동기화 작업이 필요하다. context switching ,메모리 낭비, 통신비용이 적다. 스레드 간 긴밀하게 연결되어 있기에 한 프로세스(스레드?)에 장애가 생겼을 때 전체 프로세스(?)에 영향을 주는 것은 멀티스레드이다.(???)
[두 처리 방식의 장단점]