✅ 핵심내용
멀티태스킹
빅데이터를 다루기 위해서는 컴퓨팅 자원을 최적화 하는 방법, 즉 병렬 컴퓨팅, 분산 컴퓨팅 등의 개념을 알아야한다.
- 동시성(Concurrency) : 하나의 processor가 여러 가지 task를 동시에 수행하는 개념
- 병렬성(Parallelism) : 유사한 task를 여러 processor가 동시에 수행하는 개념
- 동시성과 병렬성을 동시에 적용하면 여러 개의 프로세스가 1개의 task를 여러 개의 subtask로 쪼개어 동시에 병렬적으로 수행하여 효율을 극대화
-
동기(Synchronous) : 어떤 일이 순차적으로 실행됨, 요청과 요청에 대한 응답이 동시에 실행됨 (따라서 요청에 지연이 발생하더라도 계속 대기)
-
비동기(Asynchronous) : 어떤 일이 비순차적으로 실행됨, 요청과 요청에 대한 응답이 동시에 실행되지 않음. 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하며, 중간에 실행되는 코드는 주로 콜백함수로 연결하기도 함
프로세스, 스레드, 프로파일링
-
프로세스(Process)
- 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위
- 하나의 프로그램을 실행할 때, 운영체제는 한 프로세스를 생성한다.
- 파이썬에서는
os
라는 모듈에서 프로세스 관련 정보를 얻을 수 있다.
-
스레드(Thread)
- 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
-
프로파일링
- 코드에서 시스템의 어느 부분이 느린지 혹은 어디서 RAM을 많이 사용하고 있는지를 확인하고 싶을 때 사용하는 기법
- 애플리케이션에서 가장 자원이 집중되는 지점을 정밀하게 찾아내는 기법
- 코드의 병목(bottleneck)을 찾아내고 성능을 측정해 주는 도구
profile
모듈, cProfile
모듈과 line_profiler
패키지를 이용하면 높은 수준의 프로파일링이 가능함
Scale Up, Scale Out
- 스케일 업 (Scale Up)
- 한 대의 컴퓨터의 성능을 최적화시키는 방법
- 단일 서버(하드웨어)의 성능을 증가시켜서 더 많은 요청을 처리하는 방법
- 단일 하드웨어의 성능을 높이기 위해 CPU, 메모리, 하드디스크 등을 업그레이드하거나 추가하는 것을 의미
- 스케일 아웃 (Scale Out)
- 여러 대의 컴퓨터를 한 대처럼 사용하는 것
- 동일한 사양의 새로운 서버를 추가하여 성능을 증가시키는 방법
- 서버가 증설됨에 따라 여러 대의 서버가 트래픽을 나누어 갖게 되고, 각각의 서버가 이를 처리
멀티스레드, 멀티프로세싱을 파이썬에서 구현한 예시 과정을 아래의 GitHub 에 정리하였다.
GitHub Link : Multi-tasking