프로그램이 동작하는 순서
1.프로그램이 하드디스크에 저장되어있다
2.유저가 OS의 유저UI를 통해 실행 명령을 보낸다
3.해당 프로그램이 메모리(램)에 올라간다
4.메모리에 올라간 프로그램을 프로세스라고 한다
5.각 프로그램은 프로세스 내부의 메모리 공간에서 코드, 데이터, 스택,힙 공간을 할당받는다
5.CPU가 메모리에 올라간 프로그램을 빠르게 읽어들인다 (코드, 데이터, 스택,힙을 빠르게 읽어들인다)
하드웨어적 스레드
1.CPU안에 코어라는 개념이있다
2.하나의 코어는 적어도 하나의 스레드를 가지며 두개의 스레드를 가질수있다
3.아래의 사진과 같이 2코어에 스레드가 4개인 경우는
OS에 스케줄링된 프로세스의 내부의 소프트웨어 스레드를 최대 4개를 동시에 실행할수있다는 것이다
소트프웨어적 스레드
1.하나의 프로세스(프로그램) 안에 스레드가 여러개 존재할수있다
2.예를 들자면 nodejs는 싱글스레드 , 자바는 멀티스레드를 지원한다
3.자바같은 경우는 여러개의 스레드를 생성가능하다
4.하드웨어적 스레드에서 설명한 예시를 이용한 아래의 이미지를 참조한다면
5.자바의 프로세스 내부의 소프트웨어 스레드가 6개라는 가정하에 최대 4개를 동시 실행가능하며
6.그 이외의 2개를 컨텍스트 스위칭으로 빠르게 돌아가며 사용한다
하드웨어 스레드와 소프트웨어적 스레드의 한줄정리
하드웨어 스레드가 4개이고
소프트웨어 스레드(자바)가 100개인 경우
한번에 최대 실행 가능한 자바의 소프트웨어 스레드의 갯수는 4개이다
4개씩 실행하며 100개를 매우 빠른 속도로 번갈아가며 처리한다(컨텍스트스위칭)
그래서 동시적으로 실행되는것으로 보인다
하드웨어 스레드와 소프트웨어적 스레드의 한줄특징
하드웨어 스레드는 병렬실행 // 스레드끼리 서로 독립된 객체로 따로 실행됨
소프트웨어 스레드는 동시실행 // 하나의 하드웨어 스레드가 소프트웨어 스레드를 매우빠른 속도로 번갈아가며 사용하기에 동시에 실행되는걸로 보임(컨텍스트스위칭)
https://badcandy.github.io/2019/01/14/concurrency-01/
하나의 프로세스안에서 소프트웨어 스레드를 여러개 생성함으로써 얻는 특징
여러개의 스레드는 하나의 프로세스 안에서 아래의 자원을 공유한다
공유한다 : 힙영역 , 코드, 데이터영역
공유하지 않는다 : 스택영역
좋은점: 1.데이터영역을 공유하기때문에 변수를 공유가능 (글로벌 변수)
2.각자 스택영역을 가지기때문에 독립적으로 소스코드 실행가능
문제점: 하나의 스레드에 문제가 발생할시 다른 스레드도 먹통이된다
멀티태스킹,멀티스레드,멀티프로세싱
멀티태스킹: cpu가 여러개의 프로세스를 쓰는것(1cpu,2process~)
멀티스레드:하나의 프로세스 안에 스레드가 하나 이상인 경우(1process,2thread)
멀티프로세싱: cpu의 코어에 두개이상인 경우, 두개이상의 프로세스를 동시에(2cpu,2process)
싱글스레드/멀티스레드
싱글스레드란?
하나의 요청 ->하나의 프로세스 -> 하나의 스택영역 (하나의 스레드)-> 하나의 처리
멀티스레드란?
여러개의 요청 ->하나의 프로세스 -> 여러개의 스택영역 (여러개의 스레드)-> 동시에 처리 -> 예를 들면 메인ui보여주는 스레드 , 네트워크 스레드를 분리하여 동시에 동작하는것처럼 보여줌
스레드
자바의 main{}을 실행하기 위해서 하나의 스레드가 필요하다 (이것을 메인스레드라고 부름)
멀티스레드
서버에서 사용자로부터 여러 요청을 받는다는 가정하에
main{}이라는 소스코드를 여러번 실행해야하며 최대한 동시에 많이 작업하기 위해선
많은 스레드가 필요하다
인텔의 cpu/코어/하이퍼스레딩
CPU: 중앙관리장치 메모리들에 시스템 할당하거나함
코어: cpu의 중앙처리장치 갯수
하이퍼 스레딩:하나의 코어가 2개의 스레드를 가지는 경우
클럭이란?
CPU의 core가 동작하기 위해 0또는 1의 전기적 진동을 생성하는데 이를 클럭이라고 부름
이 진동수를 헤르츠(Hz)단위로 표기함
Core 2.8Ghz란? 1초당 28억번을 진동해서 0과 1을 만들어낸다
오버 클록이란?
클럭을 과도하게 설정해서 0과 1의 진동생성을 빠르게해 성능을 높이는것
그대신 과열되서 CPU의 수명이 줄어듬