프로세스가 할당받은 자원을 이용하는 실행의 단위

공장3에 각각 스레드1
공장1에 각각 스레드2
프로세스 내에서 하나의 메인스레드만으로 작업을 처리한다

컨텍스트 스위칭 작업 없음
컨텍스트 스위칭 작업 비용이 발생하지 않는다
동기화 필요 없음
오직 하나의 스레드가 혼자 자원을 사용하기 때문에 다른 스레드에 의해 값이 바뀔 일 이없음
단순 CPU만 사용하는 작업일때 추천
모든 작업을 하나의 스레드에서만 진행하고 컨텍스트 스위칭 작업이 일어나지 않기 때문에, 작업전환(context switching)시간이 적게 소요된다
쉬운 난이도와 적은 메모리 사용
프로그래밍 난이도가 쉽고, CPU, 메모리를 적게 사용한다 (코스트가 적게 든다)
여러개의 CPU사용 불가
프로세서를 최대한 활용하기 위해선 여러개의 프로그램 인스턴스를 실행시키거나 외부에서 여러 개의 프로그램 인스턴스를 실행시키는 방법을 사용해야 한다.
이러한 방법의 문제는 다수의 프로그램 인스턴스가 어떻게 상태를 공유할 것인가의 문제
순차적인 작업 수행
연산량이 많은 작업을 해야하는 경우, 앞선 작업이 완료되어야 다른 작업을 수행할 수 있다
ex) 싱글스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 다운로드하는 동안 유저는 아무 액션도 취하지 못한다
낮은응답성
에러발생 시 처리를 하지 못하고 멈추는 경우가 생긴다
자바스크립트
node.js
자바스크립트는 싱글스레드 환경
자바스크립트에서 비동기는 어떻게?
자바라면 기존 흐름을 이어가던 스레드가 작업을 하다 비동기 작업을 만나면 새로운 스레드가 기존 스레드와 동시에 작업한다.
node.js는 싱글스레드를 효율적으로 사용할 수있는 이벤트 루프 방식을 선택함
두개 이상의 스레드를 갖는 프로세스 (프로그램을 둘 이상 실행 시킴)

A스레드에서 다음 B스레드로 이동이 컨텍스트 스위칭을 통해 일어난다 > 스위칭이 일어나면서 부분적으로 조금씩 각각의 스레드에 대한 작업을 끝냄
응답성
프로그램의 스레드 중 하나가 중단되거나 긴 작업을 수행하더라도 프로그램 수행이 계속 되어 사용자 응답성이 증가한다
ex) 멀티스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 다운로드하는 동안, 다른스레드에서 검색 혹은 영상 플레이 가능
경제성
프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 자원소모가 줄어든다.
스레드 간 통신이 필요한 경우에도 쉽게 데이터를 주고 받을 수 있고, 프로세스의 컨텍스트 스위칭과 달리 스레드간 컨텍스트 스위칭은 캐시 메모리를 비울필요가 없기 때문에 더 빠르다.
멀티프로세서의 활용
다중CPU(프로세서) 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다
느린 생산시간
컨텍스트 스위칭, 동기화 등의 이유 때문에 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드로 작용해 단일 스레드보다 느리가
동시성 이슈
멀티스레드는 레지스터와 스택을 제외한 코드, 데이터, 파일 자원(데이터, 힙영역)을 공유하기 때문에 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
때문에 동기화 작업을 통해 작업 처리 순서를 컨트롤하고 동시에 같은 자원에 대한 접근을 막아야해야한다.
이로 인해 데드락 현상이 발생하여 성능이 저하 될 수 있다는점 주의 !
운영체제 지원
멀티스레딩을 위해서 운영체제의 지원이 필요하다
높은 난이도
프로그래밍의 난이도가 높다. 또한 스레드 수만큼 자원을 많이 활용한다
C언어, Java, Python


프로세스 > 프로세서로 움직이고 > 프로세스 내에서의 움직임 단위가 스레드가 됨
시스템 자원에 대한 요구가 뒤엉킨 상태를 나타낸다
즉, 스레드가 여러개 있다보니 특정 스레드는 자신이 작업을 진행할 기회를 얻지 못해 죽어버림
데드락 예방

*임베디드: 기계나 기타제어가 필요한 시스템에 대해, 제어를 위한 특정 기능을 수행하는 컴퓨터 시스템으로 장치 내에 존재하는 전자시스템이다
*런타임: 어떤 프로그래밍 언어가 동작할 수 있는 프로그램
자바스크립트 동작원리