동기식 입출력(synchronous I/O)
구현 방법 1
구현 방법 2
*두 경우 모두 I/O의 완료는 인터럽트로 알려줌
입출력이 끊나는걸 보고나서 인터럽트를 실행하면 동기식 입출력
입출력을 요청을 해놓고 나서 바로 인터럽트를 실행하면 비동기식 입출력
쓰레드의 구성
쓰레드가 동료 쓰레드와 공유하는 부분(=task)
전통적인 개념의 heavyweight process는 하나의 쓰레드를 가지고 있는 task로 볼 수 있다.
프로세스 하나에 CPU수행 단위만 여러 개 두는게 쓰레드다.
쓰레드는 프로세스 하나에서 공유 할 수 있는건 최대한 공유하고 별도로 가지고 있는것은 CPU수행에 관련된 프로그램 카운터, 레지스터, 스택이다.
다중 쓰레드로 구성된 테스크 구조에서는 하나의 서버 스레드가 blocked(waiting)상태인 동안에도 동일한 테스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다.
동일한 일을 수행하는 다중 쓰레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
스레드를 사용하면 병렬성을 높일 수 있다.
웹페이지를 읽어오는 작업도 I/O작업이다.
웹페이즈를 읽어오는 동안에는 오래 걸리기 때문에 웹브라우저는 blocked상태이므로 아무것도 못하게된다. (사용자는 답답함, 만약에 웹브라우저를 여러개 쓰레드를 사용해서 프로그램을 만들어 놓게 되면 하나의 쓰레드가 멀리 네이버 웹서버에서 그림을 불러오는 동안에 이 프로세스를 블럭 시키지 않고 또다른 쓰레드가 이미 읽어온 텍스트라도 화면에 디스플레이를 해주면 사용자 입장에서는 결과를 빨리 볼 수 있기 때문에 답답함이 덜하다.)
응답성
빠르다. 웹 브라우저라는 하나의 프로그램이 쓰레드를 여러개 가지고 있게 되면 하나의 쓰레드가 블럭이 되더라도 다른 쓰레드가 데이터를 가져온다.
자원을 공유함.
똑같은 일을 하는 프로그램이 여러개 있는데 그것을 별도의 프로세스로 사용하기 보다는 하나의 프로세스를 만들고 그 안에 CPU수행단위만 여러 개를 두 개 된다면 자원을 효율적으로 사용 할 수 있게 된다.
경제성(빠르다.)
프로세스를 하나 만드는 것은 오버헤드가 크지만 쓰레드를 하나 추가 하는 것은 간단하다(그렇게 오버헤드가 크지 않다).
프로세스를 생성하고 CPU스위칭을 하는 거 보다 쓰레드를 생성하고 CPU스위칭을 하는게 더 오버헤드가 적다.
Utilization of MP Architectures