티스토리 뷰
■프로그램 : 소스코드로 잘 짜여진 틀
: 실행되지 않은 상태.
■프로세스
: 실행된 프로그램.
■쓰레드
: 프로세스 처리 경로.
서버에 관련된 내용을 이해하기 위함
실무에서 잘 쓰진 않지만 알고는 있어야
: 프로세스 안에서 처리하는 경로의 갯수
■단일 쓰레드(경로가 1개 / 비효율적), 멀티 쓰레드(경로가 여러 개)
- 단일 쓰레드(싱글 쓰레드)
처리 경로를 한 개만 가지고 있기 때문에 직렬적이다.
동시에 많은 양을 처리하기 힘들기 때문에 상대적으로 비효율적이다.(하나씩 처리)
하지만 하나의 작업에 문제가 발생하더라도 다른 작업에는 영향을 끼치지 않는다.(각각의 작업이 독립적)
따라서 안정성이 보장되고 설계 시 멀티 쓰레드에 비해 쉽다.
- 멀티 쓰레드(다중 쓰레드)
하나의 프로세스를 동시에 처리하는 것처럼 보이지만 사실은 매우 짧은 단위로 분할해서 차례로 처리한다.
여러 개의 처리 경로를 가질 수 있도록 하며, 동시 작업이 가능해진다.
설계하기 굉장히 어려우며, 하나의 쓰레드 문제 발생 시 모든 쓰레드에 문제가 발생하게 된다.
JAVA 웹 서버가 대표적인 멀티 쓰레드이다. 멀티 쓰레드로 설계했다면, 처리량 증가, 효율성 증가,
처리비용 감소의 장점이 있기 때문에 단점을 감수하고 설계하는 편이다.
■멀티 쓰레드 구현 방법
핵심 : run()메소드 재정의
1.Thread 클래스 상속
2. Runnable 인터페이스 지정
단일, 멀티 쓰레드 속도 비교X 이론상 똑같다
인터넷 빠른 데가 빠름
처리할 수 있는 양에 대해서만 논의, 한번에 하냐, 여러개 하냐,
쓰레드에서는 속도 X >> 처리할 수 있는 양에 대한 비교를 한다.(한번에 하느냐, 동시에 하느냐)
자바 웹서버 | 자바스크립트 서버 |
멀티 쓰레드 | 단일 쓰레드 |
단순입출력 | |
결제,주문,배송 | 넷플릭스, SNS, 채팅 |
블락킹 | 논블락킹 |
(내부적 단일처럼) 여러 요청 하나 응답 |
여러 응답 |
single page application -> instagram | |
운영체제가 멀티쓰레드 하겠다는 것을 알아야 함. > 스케줄링
실무에서 Runnable을 더 많이 씀, 인터페이스는 여러개 지정받을 수 있으니까
run{자원}
쓰레드는 항상 자원에 접근한다.
■join()
사용한 객체의 쓰레드가 모두 종료되어야 다른 쓰레드가 실행된다.
이미 start()된 쓰레드는 영향을 받지 않는다.
만약 나중에 실행하고자 하는 쓰레드가 있다면, join() 다음에 start()를 실행해야 한다.
---------------------------------------------------------------------
■동기화(Synchronized)
하나의 쓰레드가 자원에 접근 중일 때 다른 쓰레드가 동시에 같은 자원을 접근하지 못하게 막는 것.
즉, 자원 공유 문제를 해결할 수 있다.
■동기화 문법
- 블럭 : synchronized(mutex){...}
동기화 블럭이라고 부르며, 일부 소스코드만 동기화를 걸어준다.
- 키워드 : synchronized
영역 전체에 동기화를 걸어주며, 메소드 리턴 타입 앞에 작성하면
해당 메소드 전체에 동기화가 걸린다.
'2022 > java 2' 카테고리의 다른 글
day17[date,calendar,파일입출력,MVC모델] (1) | 2022.08.23 |
---|---|
day16[Thread,Singleton] (0) | 2022.08.19 |
day14[Collection Framework_HashSet,Iterator,HashMap,Stream] (0) | 2022.08.18 |
day13[ArrayLIst 실습,빠른for문] (0) | 2022.08.18 |
day12[hashCode,Wrapper Class,Collection Framework_ArrayList] (0) | 2022.08.14 |