1 minute read

Thread는 light-weight process라고 쉽게 이해할 수 있는데 process는 아니면서 task를 수행할 수 있는 개념이다. 한 process에서 여러개의 thread가 생길 수 있다.
사용되는 사례로 web browser는 동시에 내용도 보여주고 네트워크에서 데이터를 받아오기도 하는데 이때 사용되는것이 thread이다. 다른 예시로는 linux system은 부팅시 여러 kernel thread가 생성되고 device manage, memory manage 등 다른 작업을 수행한다.
single-thread는 우리가 아는 single core와 같고 multi-thread는 code, data, file은 공유하되 thread마다 register, stack, PC 가 존재한다.

이점

  • Responsiveness
    blocking 상황이나 긴 작업에서 계속 수행될 수 있다.
  • Resource Sharing
    Shared memory나 message passing등 IPC 없이 데이터를 공유할 수 있다.
  • Economy
    Context Switching에 드는 시간이 절약된다.
  • Scalability
    core수를 넘어서 확장이 가능하고 동시에 수행될 수 있다.

Multicore Programming

multicore를 효율적으로 동시에 사용할 수 있게 해주는 기법. $\to$ efficient, concurrent
Singlecore에서는 concurrent하다는 것이 interleaving을 의미하지만, Multicore에서는 parallel하게 여러 작업을 수행할 수 있다는 것이다.

Challenges

  • Identifying tasks
    task에서도 나누어 실행할 부분을 찾아야 한다.
  • Balance
    각 task가 비슷한 강도의 작업을 해야한다.
  • Data Splitting
    Data는 여러 core에서 실행되기 위해 나누어 접근, 처리되어야 한다.
  • Data Dependency
    split된 데이터이기 때문에 여러 core에 대해 dependency를 확인해야한다.
  • Testing and debugging
    concurrent하게 실행되기 때문에 debugging이 어렵다.

Parallelism

  • Data Parallelism
    core마다 한 data를 나누어 작업할 수 있게 하는 것.
  • Task Parallelism
    task를 여러 core에 나누어 작업하는 것.

Amdahl’s Law

application에서 serial하게 실행되어야 하는 부분을 S라 하고 N개의 core에서 실행할 때, $ speedup \le \frac{1}{S+\frac{(1-S)}{N}}$ 이다. 즉 코어의 개수가 아무리 많아도 $\frac{1}{S}$ 까지밖에 speedup이 불가능하다.

Multithreading Models

threading model

User Thread

일반 User도 thread를 생성, 관리할 수 있다.
이때 User level thread switching은 kernel 권한을 필요로 하지 않고 어떤 OS에서도 실행가능하며 생성과 관리가 빠르다.
하지만 한 user thread가 blocking(e.g. syscall)되었을 때 모든 process가 멈춘다.
또한 multiprocessing의 이점을 그대로 사용할 수 없다.

Kernel Thread

OS에 의해 직접 관리되는 thread.
kernel thread는 다른 processor에도 schedule될수 있고 thread가 blocking되어도 process는 계속 실행된다.
하지만 kernel mode로의 switch가 필요하고 kernel thread는 user thread에 비해 수백배 느리다.

Many-to-One model

many-to-one
multicore의 장점을 살리지 못해 별로 사용되지 않는다.

One-to-One model

One-to-One
many-to-one model에 비해 더 나은 concurrency를 지원한다. 하지만 너무 많은 kernel thread가 생성되어 performance가 떨어질 수 있다.

Many-to-Many model

Many-to-many
many-to-one과 one-to-one의 단점을 모두 없앤 방식.

Categories:

Updated: