본문 바로가기

Back/Java

[JAVA/멀티스레드] JAVA멀티스레딩 - 개요와 운영체제기초

멀티스레드 공부 시작
Udemy 강좌로 시작~~~



멀티스레드 필요이유

1. 응답성 향상 (빠른 반응)

특히 유저인터페이스가 있는 프로그램의 경우.
사용자가 어떤 요청을 해서 실행시간이 길어지면
다음요청에 대해서는 이전요청의 실행이 끝날때까지 기다려야함.
동시에 여러작업을 병행하기위해 멀티스레드가 필요.

2. 성능

병행성(동시성)으로 여러작업을 동시에 수행하는 것처럼 보인다
싱글코어, 하나의 코어만으로도
같은 시간안에 더 많은일을 할수 있다.



스레드는 무엇???

시스템의 기본적인 작동 방식

- 컴퓨터를 켜면 ‘운영체제’라는 특별한 프로그램이
디스크에서 메모리로 로드됨
- 운영체제는 애플리케이션 개발자(나)를 대신해 간섭하고 나와 하드웨어 사이의 상호작용을 돕는다
- 모든 애플리케이션(메모장,웹브라우저 등)은 파일형태로 디스크에 저장된다. 이미지나 문서처럼
- 사용자가 애플리케이션을 실행하면, 운영체제는 디스크에 있던 프로그램을 메모리로 가져와 프로그램의 인스턴스를 생성한다. 이 인스턴스를 ‘프로세스’ 또는 ‘애플리케이션 컨텍스트’ 라고 한다.
- 각 프로세스는 시스템에서 실행되는 다른 프로세스와 완전 별개!!!


프로세스 안의 메타데이터

- 프로세스아이디(PID) : 애플리케이션이 읽고 쓰기 위해 여는 파일
- 코드 : CPU에서 실행되는 프로그램의 명령어
- 힙 : 애플리케이션에 필요한 모든 데이터가 있음
- 스레드 : 기본으로 메인 스레드, 그외 스레드는 있을수도 없을수도
- 각각의 스레드는 자체적으로 '스택과 명령어 포인터'를 가짐. 그러나 프로세스 내의 나머지 컴포넌트는 모든 스레드가 공유

스레드 내부

- stack(스택) : 지역변수가 저장되고, 기능이 실행되는 영역
- instruction pointer(명령어 포인터) : 스레드가 실행할 다음 명령어의 주소를 가리키는 포인터 역할
- 각각의 스레드는 특정순간에 서로다른 함수를 이용해 다른명령어를 수행한다. 그렇기때문에 각각의 스레드는 스택과 명령어포인터를 별도로 가진다.