lang/py

Book 파이썬답게 코딩하기 - 동시성과 병렬성

C/H 2020. 1. 13. 08:30

동시성과 병렬성

파이썬답게 코딩하기

  • 무어의 법칙(Moore's law): 반도체 직접회로의 성능이 2년마다 2배로 증가하고 그에 따른 성능이 향상된다.
  • 암달의 법칙(Amdahl's law): 작업 시간 효율을 개선할 때 그 작업이 전체에서 차지하는 시간에 따라 전체 성능 향상률이 달라진다.

컴퓨터 아키텍처 설계 원칙

  • 무어의 법칙을 위한 설계(Design ofr Moore's law)
  • 간단한 설계를 위한 추상화(Use abstraction to simplify design)
  • 많이 사용하는 것을 빠르게 해라(Make the common case fast)
  • 병렬성을 이용한 성능 향상(Performance via parallelism)
  • 파이프라인을 이용한 성능 향상(Performance via pipelining)
  • 예측을 이용한 성능 향상(Performance via prediction)
  • 메모리 계층을 이용(Hierarchy of memories)
  • 복수의 장치를 이용한 신뢰성 향상(Dependability via redundancy)

I/O Bound vs CPU Bound

  • I/O Bound: 입력(Input)/출력(Output)의 영향을 받는 작업으로 소켓(socket)과 파일 입출력 관련 작업
  • CPU Bound: CPU 처리 시간에 따라 시간이 결정되는 작업으로 암/복호화 연산이나 수학 연산 작업

병렬성, 동시성

병렬성

2가지 이상의 구분된 작업을 수행한다.

동시성

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

Process & Thread

Process

OS로부터 자원을 할당 받아서 프로그램을 실행하는 작업의 최소 단위이다.
프로세스는 서로 독립적인 메모리와 주소 공간을 할당 받는다.
프로세스간 정보 교환을 위해서는 별도의 통신 채널이 필요하고 이 통신 채널을 IPC(Inter-Process Communication)라고 부른다.
예로는 socket, character device, shared memory등이 있다.
shared memory와 같이 메모리를 공유하는 IPC는 무결성과 동기화에 대해서 처리해야 한다.

Thread

프로세스 안에서 프로세스가 할당받은 자원을 이용하여 프로그램의 명령을 실행하는 최소 단위이다.
스레드는 한 프로세스 내의 주소 공간, 메모리같은 자원을 프로세스 내의 다른 스레드와 공유할 수 있다.
IPC와 같은 별도의 통신 채널은 필요가 없지만 자원의 무결성과 동기화를 보장하기 위한 별도의 처리가 필요하다.

Multiprocessing & Multithreading

Multiprocessing

2개 이상의 CPU가 서로의 메모리나 기타 입력 장치들을 공유하는 구조, 혹은 메카니즘이 컴퓨팅 시스템

SMP(Symmectric Multiprocessing)

SMP(대칭적인 멀티프로세싱)는 메인보드에 2개 이상의 CPU를 장착할 수 있고, 이 CPU들이 대칭ㅇ을 이루는 구조

ASMP(Asymmetric Multiprocessing)

ASMP(비대칭적 멀티프로세싱)는 CPU마다 다른 물리적 공간을 가질 수 잇고, 특정 프로세스는 특정 CPU에서만 동작하도록 있도록 설계할 수 있다.

  • 모바일 프로세스

Multithreading

하나의 CPU, 멀티코의 CPU에서 하나의 코어가 동시에 여러개의 프로세스나 스레드를 처리하는 것을 말한다.
CPU들이 메모리를 공유하고 있었다면, 멀티 프로세싱은 CPU와 코어 안의 작업이 메모리를 공유하는 개념이다.
프로세서, 스레드가 SW 부분이라면, 멀티스레딩은 HW, SW가 결합된 부분으로 HW, OS가 이를 지원해야 한다.
종류로는 tempolral multithreading과 SMP(simultaneous multithreading)이 있다.

Hyper-threading

인텔이 구현한 SMT(Simultaneous Multithreading)기술 상품명이다.
물리적 한개의 CPU를 여러 개로 보이도록 만드는 기술로 논리 코어로 부른다.
물리 코어와 같은 개수의 논리 코어를 만드는 기술로 논리 코어를 물리 코어의 2배로 만드는 기술이다.

Multi-tasking

동시에 하나의 일을 처리하는 것이라고 말할 수 있다(동시성).
작업을 나누어 처리해서 프로세서의 개수보다 동시에 많은 일을 처리하는 기술이다.

Preemptive Multitasking(선점형 멀티테스킹)

작업의 선점이 허락되는 멀티태스킹 밥법이다.
인터럽트(Interrupt) 메카니즘에서 우선순위에 따라 현재 실행 중인 작업을 중지하고 작업을 먼저 처리하도록 결정할 수 있다.
인터럽트 메커니즘에 의해 작업의 제어권이 변경된다.
인터럽트에 의해 프로세스가 중단될 수 있기 때문에 사용하는 자원에 대한 무결성을 보장하기 위한 동기화 처리를 해야 한다. 그래서 프로그램 구현이 어렵고, 문제 발생시 추적이 어렵다.

Cooperative Multi-tasking(협력형 멀티테스킹)

작업 제어권을 프로세스가 가지고, 자신의 유휴 상태이거나 특정 법위 작업 후에 제어권을 양보한다.
인터럽트에 의해 제어권이 넘어갈 일이 없기 때문에 동기화 처리가 필요하지 않기 때문에 제어권 양보 시점만 조율하면 된다.
버그나 문제 발생시 작성된 로직으로만으로 파악이 가능하므로 문제파악이 쉽다.

반응형