[CS] 동시성과 병렬성

Vorhandenheit ·2022년 9월 27일
0

Computer Science

목록 보기
6/6

[CS] 동시성과 병렬성

I/O Bound vs CPU Bound

  • I/O Bound : 입력과 출력이 완료되기까지 대기하는 시간에 의해 작업시간이 결정되는 일
  • CPU Bound : 처리 시간에 따라 작업 시간이 결정되는 일을 말함

1. 동시성과 병렬성

동시성

  • 서로 독립적인 작업을 작은 단위로 나누고 번갈아가면서 연산하는 것을 말합니다.

병렬성

  • 물리적으로 동시에 여러 가지 작업을 연산하는 것을 말합니다.
  • 병렬성은 작업 병렬성과 데이터 병렬성으로 구분되어지는데
    - 작업 병렬성 : 작업을 병렬화해서 동시에 2가지 이상의 작업을 처리하는 걸 말합니다.
    - 데이터 병렬성 : 데이터 병렬화해서 여러 개의 cpu에서 다른 데이터에 같은 작업을 처리하는 걸 말합니다.

동시성과 병렬성

병렬성의 경우 하드웨어 의존도가 높고
동시성의 경우에는 소프트웨어에 대한 고민, 작업을 어떻게 나눌지, 어떻게 분배할지에 대한 고민이 필요합니다.

2. Process & Thread

위에 것과 프로세스, 스레드와 연결이 되어집니다
동시성은 싱글 코어에서 멀티 스레드를 동작시키기 위한 방식을 말하고 멀티 태스킹을 위해서 여러 개의 스레드가 번갈아면서 실행되는 걸 말합니다.
병렬성은 멀티 코어에서 멀티 스레드를 동작시키는 방식을 말합니다.

Process

프로세스는 운영체제로부터 자원을 할당받아서 프로그램을 실행하는 최소 단위를 말합니다.

  • 커널 레벨(운영체제)
  • 유저레벨
    프로세스 간의 정보를 교환하기위해서 별도의 통신채널이 필요 IPC (Inter-Process Communication)
    socket character device, sharde memory

Thread

스레드는 프로세스가 할당받은 자원을 이용하여 프로그램의 명령을 실행하는 최소 단위를 말합니다.
이 스레드는 프로세스 생성하는 비용을 줄기위해서 고안된 개념입니다. 프로세스는 만들어서 작업을 처리할려면, 프로세스에 자원을 할당하고, 서로 다른 프로세스 간의 정보를 교환하기 위해 IPC를 구현하고, 이를 통해서 정보를 교환해야하기 떄문에 이는 자원 소모로 이어집니다.

이 두개는 모두 동시성을 위해 고안된 개념

3. Multiprocessing & Multithreading

멀티프로세싱

프로세서는 CPU의 일종이며, 프로세스와 다른 개념입니다. 각 프로세서가 자원을 공유하면서 프로세스를 처리하기 떄문에, 하나의 프로세서가 고장나도 작업은 정지되지 않습니다.

멀티 프로세싱의 장점은 하나의 프로세서가 고장이 나더라도 해당 프로세서가 진행 중인 작업은 다른 프로세서에서 수행하고 있기 떄문에 작업이 정지되지 않습니다.

멀티 프로세싱에는 두 가지 종류가 있습니다.

  • SMP(Symmetric Multiprocessing)
    공유 메모리 구조를 가지고 있고 cpu가 동일한 처리를 하는 대칭 구조의 멀티 프로세싱 모델입니다.

  • ASMP(Asymmetric Multiprocessing)
    공유 메모리구조를 뜻하며 각각 프로세서가 하는 일이 다릅니다.
    한쪽 cpu에서만 os를 전담해서 처리할 수 있고, 특정 프로세스를 한쪽 cpu에서 전담하도록 처리하도록 합니다.

멀티 태스킹

TASK란 운영체제에서 처리하는 작업의 단위 또는 정해진 일을 수행하기 위한 명령어 집합을 뜻합니다. 멀티 테스킹은 TASK를 OS의 스케쥴링에 의해 TASK를 번갈아가면서 수행하는 걸 의미합니다.

우선 순위에 의해서 제어권을 선점하여 처리하는 선점형 멀티테스킹과 작업이 끝날때까지 기다린느 비선점형 멀티테스킹이 있습니다.

멀티 스레딩

하나의 cpu나 멀티코어 cpu에서, 하나의 코어가 동시에 여러개의 프로세스나 스레드를 처리하는 걸 말합니다.
하나의 프로세스를 다수의 스레드로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 걸 말합니다.

Hyper-threading

SMT(Simultaneous Multithreading) 기술로 cpu코어는 1개인데 이를 여러개로 보이도록 만드는 기술

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글