티스토리 뷰

■프로그램 : 소스코드로 잘 짜여진 틀
: 실행되지 않은 상태.
■프로세스
: 실행된 프로그램.
■쓰레드
: 프로세스 처리 경로.
서버에 관련된 내용을 이해하기 위함
실무에서 잘 쓰진 않지만 알고는 있어야
: 프로세스 안에서 처리하는 경로의 갯수

 

■단일 쓰레드(경로가 1개 / 비효율적), 멀티 쓰레드(경로가 여러 개)
- 단일 쓰레드(싱글 쓰레드)
처리 경로를 한 개만 가지고 있기 때문에 직렬적이다.
동시에 많은 양을 처리하기 힘들기 때문에 상대적으로 비효율적이다.(하나씩 처리)
하지만 하나의 작업에 문제가 발생하더라도 다른 작업에는 영향을 끼치지 않는다.(각각의 작업이 독립적)
따라서 안정성이 보장되고 설계 시 멀티 쓰레드에 비해 쉽다.
- 멀티 쓰레드(다중 쓰레드)
하나의 프로세스를 동시에 처리하는 것처럼 보이지만 사실은 매우 짧은 단위로 분할해서 차례로 처리한다.
여러 개의 처리 경로를 가질 수 있도록 하며, 동시 작업이 가능해진다.
설계하기 굉장히 어려우며, 하나의 쓰레드 문제 발생 시 모든 쓰레드에 문제가 발생하게 된다.
JAVA 웹 서버가 대표적인 멀티 쓰레드이다. 멀티 쓰레드로 설계했다면, 처리량 증가, 효율성 증가,
처리비용 감소의 장점이 있기 때문에 단점을 감수하고 설계하는 편이다.

 


■멀티 쓰레드 구현 방법
핵심 : run()메소드 재정의

1.Thread 클래스 상속
2. Runnable 인터페이스 지정


단일, 멀티 쓰레드 속도 비교X 이론상 똑같다
인터넷 빠른 데가 빠름
처리할 수 있는 양에 대해서만 논의, 한번에 하냐, 여러개 하냐,

쓰레드에서는 속도 X >> 처리할 수 있는 양에 대한 비교를 한다.(한번에 하느냐, 동시에 하느냐)

 

자바 웹서버 자바스크립트 서버
멀티 쓰레드 단일 쓰레드
  단순입출력 
결제,주문,배송 넷플릭스, SNS, 채팅
블락킹 논블락킹
(내부적 단일처럼)
여러 요청
하나 응답
여러 응답
  single page application -> instagram
   


운영체제가 멀티쓰레드 하겠다는 것을 알아야 함. > 스케줄링
실무에서 Runnable을 더 많이 씀, 인터페이스는 여러개 지정받을 수 있으니까

 

run{자원}
쓰레드는 항상 자원에 접근한다.

■join() 
사용한 객체의 쓰레드가 모두 종료되어야 다른 쓰레드가 실행된다.
이미 start()된 쓰레드는 영향을 받지 않는다.
만약 나중에 실행하고자 하는 쓰레드가 있다면, join() 다음에 start()를 실행해야 한다.
---------------------------------------------------------------------

■동기화(Synchronized)
하나의 쓰레드가 자원에 접근 중일 때 다른 쓰레드가 동시에 같은 자원을 접근하지 못하게 막는 것.
즉, 자원 공유 문제를 해결할 수 있다.

■동기화 문법
- 블럭 : synchronized(mutex){...}
동기화 블럭이라고 부르며, 일부 소스코드만 동기화를 걸어준다.
- 키워드 : synchronized
영역 전체에 동기화를 걸어주며, 메소드 리턴 타입 앞에 작성하면
해당 메소드 전체에 동기화가 걸린다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함