본문 바로가기
학교 공부/분산 및 병렬처리

[분산 및 병렬처리 시스템] 스레드 구현

by 그적 2020. 11. 15.

일반 시스템에서 스레드를 어떻게 구현할 수 있을까?

 : Thread Implementation -> thread package

 

Thread Package 구현 방식

1) User Level Thread

우리가 자바 언어를 사용할 때 이클립스에 있는 라이브러리를 import 해서 사용하는데, 이클립스에서는 Thread Package가 라이브러리로 구현되어 있는 것이다. 이처럼 user level에 있는 스레드 하나를 사용할 때, user process는 스레드를 생성/소멸시킬 수 있는 형태로 구현된 것이 User Level Thread이다.

- 장점 : 하나의 프로세스 안에서 스레드 간에 context switching이 일어날 때, CPU 상에 register 값을 스택에 옮겨둘 때 굉장히 가볍다. (=conext switching 비용이 커널 레벨보다 적게 든다.) 또한 스레드 생성/소멸 비용이 적게 든다.

- 단점 : 스레드가 I/O를 위한 시스템 콜을 부를 경우, 해당 프로세스는 I/O 시스템 콜이 끝날 때까지 아무 동작을 하지 않는다.  user level일 경우에는 스레드를 공유하면서 프로세스를 사용할 수 있는데, I/O 시스템 콜이 불려지면 I/O 시스템 콜을 부른 스레드를 담고 있는 프로세스가 이를 호출했다고 생각하기 때문이다.

 

 

2) Kernel Level Thread

 운영체제에서 프로세스를 관리를 하는데, 이 관리 범위가 커널 레벨 thread까지 해당한다.

- 장점 : 스레드가 운영체제에서 관리되기 때문에, 프로세스 단위로 스레드를 갖고 있다. 따라서 하나의 스레드가 I/O 시스템 콜을 호출할 경우에는 다른 프로세스가 CPU를 넘겨받아 작업한다.

 

 

 

위의 두 가지는 분산 시스템에서가 아닌, 일반 시스템에서의 스레드 구현 방식이다. 분산 시스템에서 스레드 개념을 도입시키게 되면, 더 좋은 성능을 발휘할 수 있다. 특히나 웹 사이트 client-server 구조에서 중요하다.

어떻게 브라우저 서버는 클라이언트들에게 더 빠르게 전송할 수 있을까?

그것은 스레드가 A, B, C가 존재한다면, 페이지 object들을 불러오는 Thread A, 통신을 위한 Thread B, Thread C는 다른 일을 하는 스레드로 구성되는 것이다. 이와 같이 스레드를 기능 별로 분리시키거나 독립적인 스레드 3개를 묶어서 병렬로 처리할 수 있도록 하는 것이다. 

 

Concurrent Server

: ready queue에 쌓인 client의 request를 서버단에서 처리하는 것이 아닌, fork를 통해 자식 프로세스를 생성하고 호출하여 처리를 맡기는 것이다. request를 받아와 다른 프로세스들에게 전달해주는 것은 dispatcher의 역할이다. (팀장 역할) 

 fork로 생성된 자식 프로세스들은 부모 프로세스의 상태를 copy 하여 가져 간다. 새로운 영역에 복사본을 가져감으로써 프로세스의 차별성을 가지고 있다. (팀원 역할) 따라서 프로세스 여러 개가 생성되는 것이 아니라, 여러 개의 스레드로 분리시킬 수 있다.

 

Multithreaded Server model 종류와 특징

1) Thread 모델 : Parallelism, blocking system call  -> Iterative Server

2) Single-threaded Process : No Parallelism, blocking system call  -> Concurrent Server

3) Finite-state Machine : Parallelism, nonblocking system cal  -> Concurrent Server

  // Finite-state Machine은 파일을 읽으려고 할 때, 파일 프로세스가 운영체제에게 nonblocking system call을 요청한다.

    프로세스는 바로 return을 하고, waiting을 하지 않는다. 만약 waiting이 생기는 부분은 기록하여 테이블에 넣어두어 병렬성을 가진다.

 

 

댓글