Study Output for Myself/Computer Science
[CS]스레드와 멀티스레딩
Dahyee
2022. 8. 19. 15:05
스레드란?
스레드는 프로세스(인스턴스)가 실행 가능한 가장 작은 단위(프로세스내 작업의 흐름)
프로세스가 할당받은 자원을 이용하는 실행의 단위
프로세스는 여러개의 스레드를 가질 수 있음
스레드 기준으로 프로세스
- 싱글 스레드 프로세스
- 멀티 스레드 기반 프로세스
- 왜 스레드가 필요한가?(https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html)
- 블록킹 없이 여러 작업들을 해야할 때 필요
- 현대 프로그래밍에서 매우 유용함. 프로세스가 서로 독립적인 여러 작업을 다룰 때 필요
- javascript에서의 스레드, node js는 싱글스레드??모던 JavaScript는 추가적인스레드를 생성하는 방법을 제공, 각 스레드는 독립적으로 동작하면서 서로 커뮤니케이션. 이는 [web worker thread](<https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API>) 덕분
- node.js의 thread하지만, Node.js 자체는 멀티스레드이며 libuv를 통해 숨겨진 스레드(hidden thread)를 제공How To Use Multithreading in Node.js | DigitalOcean핵심? worker-thread인듯
- nodejs의 멀티쓰레딩과 worker threads
- 이런 숨겨진 스레드를 통해서 우리가 작성한 코드들이 main thread 내에서 IO이벤트와 같은 요청에 중단되지 않도록 비동기 method들을 제공함.
- JavaScript를 실행할 때는 물론 싱글 스레드로 실행.
- service worker로 불리는 특정 worker thread의 타입은 유저가 해당 사이트를 사용하지 않아도 실행해주도록 사이트 뒤에서 생성. 예를 들어 이메일 알람 등과 같은 것
- 브라우저 내 main thread ⇒ 하나의 스레드여서 발생하는 문제
스레드와 프로세스를 비교해보기
프로세스 vs 스레드
- 프로세스
- 코드, 데이터, 스택, 힙 독립적으로 각각 생성
- 스레드
- 코드, 데이터, 힙은 스레드끼리 공유, 스택 등 다른 영역은 각각 생성
- 멀티스레딩이란?장점
- 스레드끼리 서로 자원을 공유 ⇒ 효율성 ⬆️
- ex) 요청 처리시 새 프로세스 생성 < 스레드 사용 : 훨씬 적은 리소스, 중단(blocked)돼도 다른 스레드는 실행 상태(running)일 수 있음
- 동시성에서도 큰 장점 → 동시에 처리할 수 있다.
- 동시성 : 서로 독립적인 작업들⇒작은 단위로 나눔⇒동시 실행처럼 보여주는 것동기화, lock 등의 문제
- → 병렬처리
- 멀티프로세싱 vs 멀티스레딩 비교
- 멀티 프로세스 vs 멀티 프로세싱 (or 멀티 스레드 vs 멀티 스레딩)vs +ing : 그걸 기반으로 해서 동작하는 것을 의미
- 멀티 프로세싱(웹 브라우저 내 브라우저 프로세스, 렌더러 프로세스, 플러그인 프로세스, GPU 프로세스)하나의 일 병렬 처리, 한 프로세스 문제 발생해도 대체 가능 ⇒ 신뢰성
- 두가지 이상의 일을 여러개의 프로세스를 통해서 수행할 수 있는 것
- 멀티 스레딩(웹 브라우저의 렌더러 프로세스 내 메인 스레드, 워커 스레드, 컴포지터 스레드, 레서트 스레드 등)스레드끼리 서로 자원을 공유 ⇒ 효율성
- 한 프로세스 내 작업을 여러개의 스레드로 처리하는 기법
- vs
- 멀티 프로세싱 :한 프로세스 문제 생겨도 다른 프로세스 영향 X (공유 메모리 문제 발생시 문제 발생?)
- 여러 프로세스 생성하는 멀티프로세싱은 비용 ⬆️ (IPC)
- 멀티 스레딩 :한 스레드가 망가진다고 다른 스레드가 망가지는 것은 아니지만 영향 O
- 한 프로세스 내 자원 공유, 비용 ⬇️
- 여러개의 프로세스(or 스레드)로 구성된 것(or 프로세스)
- 한 스레드 문제 ⇒ 다른 스레드 영향 ⇒ 스레드 영향 단점
- 프로세스 내 작업을 여러 개의 스레드로 처리하는 기법