스레드
Jul 30, 2024
스레드
스레드는 프로그램 내에서 실행되는 독립적인 작업의 단위, 여러 스레드를 통해 동시에 여러 작업을 수행할 수 있다. JAVA에서는 멀티스레딩을 지원하여 프로그램이 동시에 여러 작업을 수행할 수 있게 함. 이를 통해 응답성을 높이고, CPU 자원을 효율적으로 사용할 수 있다.
나이테를 예로 들면 한 바퀴에 1초가 걸리면 100바퀴는 100초 수평핀이 자료를 찾는데 추가로 시간이 들기 때문에 100+A초
- 프로세스 -
운영체제로부터 자원을 할당받아 실행 중인 프로그램을 의미합니다. 프로세스는 최소한 하나의 스레드를 가지고 있으며, 여러 개의 스레드를 생성할 수도 있습니다.
하드디스크의 프로그램을 실행하면 메모리가 뜬다 이 과정을 프로세스라고하고 이를 실행시키는 게 프로세서(CPU)라고 한다.
- 프로세서 - 프로세스를 관리하는 곳
일을 하는 순간 논리적으로 스레드 물리적으로는 프로세스
스레드는 CPU의 분신과도 같은 존재
CPU가 하나의 스레드가 된다
멀티스레드 스레드가 두 갈래이상으로 나뉘는 것
전후 사정을 알아야(메모리를 기억해 놔야) 두 갈래의 스레드가 서로 왕복할 수 있다.
컨텍스트 스위칭이 느려지는 게 동시에 하는 것을 속이기 위함
멀티스레드는 CPU의 자식
CPU는 스레드를 무한대로 만들 수 있다.
운영체제의 스레드를 자바가 임대해서 쓴다(NATIVE)
운영체제를 통해서 바로 작동시키는 것- NATIVE CALL(SYSTEM CALL)
스레드의 장점 - 컴퓨터의 속도가 빨라지는게 아니라 유저의 경험이 늘어난다
스레드는 두 개의 스레드를 왔다갔다 하지만 우리의 눈에는 동시에 실행되는 것 처럼 보인다.
- 모든 프로세스는 1개의 스레드를 가진다
CPU를 하드에 저장하는 것 인풋(INPUT)이라 한다
반대로 하드디스크의 데이터를 CPU로 끌어올리는 것 아웃풋(OUTPUT)
CPU는 램과 하드디스크가 I/O를 하는 동안 웨이트(WAIT)를 하게 된다
- CPU실행(스레드 실행)
- CPU실행(스레드 실행)
- 서브 스레드 실행
- 메인 스레드 실행
- 메인 스레드 실행
- 프로세스가 동시에 실행되는 것 처럼 보이지만 실은 스레드가 계속 왔다갔다를 반복하는 것이다.
- 모든 프로세스는 1개의 스레드를 가진다
CPU를 하드에 저장하는 것 인풋(INPUT)
프로세스에서 동기화는 일이 순서대로 처리가 되는 것
일의 순서가 마무리가 안되있는 상황에서 다른 일을 처리하는것 비동기적
비동기적일 때 알고리즘이 들어간다
예를 들어 어떤 순서대로 먼저 일을 처리하느냐
- 라운드 로빈 : 여러 개의 작업이 실행 될 때 공평하게 CPU시간을 할당 받는 방식
처리를 순서대로 FI(FIRST IN)/FO(FIRST OUT)
결국 웨이팅 시간을 줄이는 것
이런 알고리즘들은 OS를 공부하면 된다.
비동기적(효율적) 으로 일을 수행하는 것 이것을 스레드라고 한다
선풍기가 풀파워로 돌면 그 사이를 지나갈 수 없다
단, 잠깐의 틈이 있다면 비집고 들어갈 수 있다 이를 SLEEP이라고 한다
잠깐동안 쉬게 만들어 주는 것이다.
멀티스레딩
멀티스레딩은 하나의 프로세스 내에서 여러 스레드를 동시에 실행하여 작업을 병렬로 수행하는 기술이다. 멀티스레딩을 사용하면 CPU 사용률을 극대화하고 응답성을 향상시킬 수 있으며, 특히 I/O작업에서 효율적이다
멀티스레딩 특징
- 병렬 처리: 여러 스레드가 동시에 실행되어 작업을 병렬적으로 처리한다. 이를 통해 프로그램 성능을 향상 시킬 수 있다.
- 리소스 공유: 같은 프로세스 내의 스레드는 힙 메모리, 전역 변수 등을 공유한다. 이를 통해 스레드 간 데이터 공유는 용이하나 데이터 경쟁이 발생
- 응답성 향상: 멀티스레딩을 사용하면 하나의 스레드가 블로킹 상태에 있더라도 다른 스레드가 실행 될 수 있어, 전체 프로그램의 응답섭 향상
- 컨텍스트 스위칭: CPU가 여러 스레드를 번갈아가면서 실행하는 과정에서 컨텍스트 스위칭이 발생한다. 이는 CPU 레지스터와 프로그램 카운터를 저장하고 복원하는 작업으로, 일정한 오버헤드가 발생
Share article