공부한 내용을 정리한 글입니다
내용에 오류가 있거나 더 좋은 의견이 있다면 댓글로 남겨주세요.
배움에 큰 도움이 됩니다. 🖋
Program, Process, Thread
Program
- 실행 가능한 파일(실행 가능하지만 아직 실행중이지 않은 파일)
- 어떤 작업을 처리할 수 있도록 올바른 수행 절차를 표현해 놓은 명령어 집합
- 크롬, 엑셀, 카카오톡 등
Process
- 실행중인 Program(작업)
- 운영체제로부터 메모리를 할당 받은 Program
- 각 Process는 전용 메모리 영역을 사용한다.
- 기본적으로 다른 Process의 변수나 자료구조를 공유하지 않는다. 협력이 필요할 경우 Process 간의 통신(Inter Process Communication)을 통해 접근한다
Code : 프로그램 실행을 위한 코드
Data : 전역변수나 정적변수 할당
Heap : 변수를 선언해 문자, 객체 등을 할당 할 때 그것이 저장되는 공간. 동적으로 할당된 변수를 저장
Stack : 함수의 실행 순서, 함수 종료 후 돌아갈 곳 등에 대한 정보를 할당
Thread
- Process 안에서 실행되는 흐름의 단위
- Process에 할당된 메모리를 이용해 실행 된다
- 기본적으로 Process 하나에 Thread 하나(Thread가 여러개인 경우도 존재)
- 하나의 Program을 위해 일하기 때문에 공통의 데이터 자원(Code, Data, Heap)을 Process에서 공유해 접근하고 업데이트 한다. 그러나 일의 흐름을 기억하는 Stack은 Thread마다 개별 할당된다.
Chrome Browser
- 크롬은 하나의 Tab에 하나의 Renderer Process 를 할당한다. 그덕에 음악을 듣던 Tab에 오류가 발생해 강제 종료 되어도
검색, 구글 스프레드시트 등을 이용하던 다른 Tab은 정상 작동 할 수 있다. Tab 갯수가 메모리의 수용 범위를 넘어갈 경우 하나의 Renderer에서 합쳐서 운영되기도 한다. - 다른 process들과 긴밀하게 연결되어 크롬 브라우저의 전체적인 내용을 담당하는 Browser process, 인터넷 통신을 하는 Network process, HTML을 받아 실제 화면을 렌더링하는 Renderer pocess 등으로 구성되었다.
Javascript
위에서부터 코드를 한 줄씩 읽으며 한 번에 하나의 작업만 시행하는 Single-Thread 방식이다(동기적). 그러나 Javascript가 돌아가는 Browser 환경은 Multi-Thread 이므로 런타임에 이벤트 루프를 이용해 비동기 작업이 가능하다.
동시성
Program 하나가 여러 작업을 시분할로 조금씩 돌아가며 진행하는 것. 시분할사용. 작업의 전환 속도가 굉장히 빠르기 때문에 사람들이 느끼기에는 마치 동시에 진행되는 것처럼 보인다.
참고
https://developer.chrome.com/blog/inside-browser-part1/
https://developer.chrome.com/blog/inside-browser-part2/
https://kicksky.tistory.com/105
https://prohannah.tistory.com/59
https://d2.naver.com/helloworld/2922312
https://d2.naver.com/helloworld/9274593
https://velog.io/@wonhee010/Process-vs-Thread-feat.-크로미움-브라우저
댓글