Classic vs Multi-threaded


Classic View - Single Point of Execution within a program, 하나의 프로그램에는  단일 실행 포인트.

-> 하나의 프로그램 안에는 명령어를 가져오고 실행하는 Single Program Counter(단일 PC)만이 존재했다.

 

Multi-threaded program - 멀티 스레드 프로그램은 하나 이상의 실행 포인트가 존재한다.

스레드들은 같은 주소공간을 공유한다. (same Page Table) -> 같은 데이터에 접근할 있다.

하지만, 각각의 스레드는 own private set of registers(including PC) 레지스터 set 스레드별로 각자 가지고 있다.

 

스레드를 T1에서 T2 전환할 TCB(Thread Control block) switch하지만, address space 그대로 남는다.(, page table 전환할 필요가 없다.)

 

 

 

 

스레드를 쓸까?


1. parallelism : 병렬성 때문에 쓴다. 병렬적 실행이 가능해진다. 예를 들어, CPU 하나당 하나의 스레드를 갖고, 멀티 프로세서 시스템에서 여러 프로세서가 동시에 프로그램을 실행한다면 프로그램의 실행 속도가 향상될 것이다.

 

2. I/O overlapping : 느린 I/O 때문에 프로그램의 진행이 block되는 것을 피할 있다.

While one thread in your program waits (blocked waiting for I/O). , 프로그램에서 하나의 스레드가 I/O 기다리며 blocked상태인 동안 CPU 스케줄러는 다른 스레드로 전환하여 그동안 프로그램에서 무언가를 실행할 있다.

 

3. 스레드 대신에 멀티 프로세스를 사용할 수도 있지만, 스레드들은 address space 공유하므로 데이터를 공유하기가 쉽다. 다만, 논리적으로 분리된 task 관해서는 multi process 사용하는 것이 나은 선택이다.

 

 

오늘날 멀티 스레드 프로그램의 예시


오늘날 대부분의 어플리케이션은 멀티스레드이다. 스레드들은 어플리케이션 내에서 실행된다. 어플리케이션 내의 여러 개의 tasks(작업들)은 분리된 스레드들에 의해서 구현될 있다.

 

-디스플레이 업데이트

-데이터 가져오기

-맞춤법 체크

-네트워크 요청에 응답

등등

 

프로세스 생성보다 스레드를 생성하는 것이 가볍다(비용이 적게 든다.)

코드를 단순화해 효율을 높일 있다.

커널은 일반적으로 멀티스레드화되어있다.

 

멀티 스레드(multi-threaded)의 장점 4가지


뛰어난 반응성/응답성(Responsiveness)

프로세스의 일부가 blocked상태여도 실행을 계속하는 것이 가능하다. 이는 특히 유저 인터페이스에 있어 중요하다.

 

자원 공유(Resource Sharing)

스레드들은 프로세스의 리소스들을 공유하므로, 이는 메시지를 전달하거나 메모리를 공유하는 것보다 쉽다.

 

경제성(Economy)

스레드를 생성하는 것이 프로세스를 생성하는 것보다 비용이 적게 들며, thread switching(스레드 전환) context switching(컨텍스트 전환, 프로세스 전환)보다 오버헤드가 적다.

 

확장성(Scalability)

프로세스가 멀티 프로세서 구조의 이점을 적극적으로 활용할 수 있다. 즉, 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.

 

+ Recent posts