Backend에 대해 공부하면서 가장 공부해보고 싶은 내용이 부하 분산 이다. 다양한 아키텍쳐, 프레임워크 등이 있지만 그들의 핵심적인 내용은 '서버에 몰리는 트래픽 부하를 어떻게 처리할 것인가'이다.따라서 부하 분산과 관련해서 공부하면서 알게된 내용을 정리하는 시리즈
분산 시스템에서 가장 중요한 것은 바로 데이터의 병렬 및 동시 처리다. 이를 병렬성과 동시성이라고 하는데 가장 쉽게 공부할 수 있는 방법이 바로 Thread와 Process에 대해 공부하고 다뤄보는 것이다.따라서 이번 포스팅에서는 Thread와 Process의 개념에
스레드 사용을 위한 threading 라이브러리와 스레드 작업 확인 시간 체크를 위한 logging과 time 라이브러리를 사용했다.결과를 살펴보면 메인 스레드가 서브 스레드를 실행시킨 후 바로 종료가 된다. 그러나 서브 스레드는 자기 작업을 끝낸 후 종료가 된다. 그
Thread pool 스레드를 비롯한 모든 객체의 생성은 자원 소모가 크다. 그렇기 때문에 미리 만들어놓고 필요에 따라 가져오는 방식을 사용할 수 있다. 이를 Thread pool이라고 한다. 스레드 풀의 장점은 객체의 생성과 제거에 드는 자원 소모를 줄여주기 때문
스레드는 Stack을 제외하고 공유된 자원을 사용한다. 이때 하나의 자원에 여러 개의 스레드가 동시에 접근할 경우 문제가 생긴다. 그 중 가장 대표적인 문제가 DeadLock이다.데드락은 프로세스가 자원을 획득하지 못해 다음 처리를 하지 못하는 무한 대기 상황(교착 상
큐(queue)는 컴퓨터의 기본적인 자료 구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식을 말한다. 영어 단어 queue는 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을
Parallelism은 동시성을 뜻한다. Concurrent와 다르게 Multiple Core 환경에서 사용 가능하며 멀티 프로세스의 기본이다.완전히 동일한 타이밍에 태스크를 실행하여 다양한 파트로 나눠서 실행한다. 예를 들어 딥러닝을 위한 데이터 전처리에서 T1은
멀티 프로세스로 작업하면 각 프로세스를 구분할 수 있어야 한다. 이때 PID를 통해 구분할 수 있지만 이는 운영체제를 통해 랜덤으로 부여되기 때문에 사용하기가 어렵다.이에 프로세스의 name 파라미터를 줘서 프로그래머가 각각의 프로세스를 구분할 수 있는 값을 매길 수
프로세스는 각각의 개체가 메모리를 할당받아 독립적인 Code, Data, Stack, Heap 영역을 가진다. 만약 1~1000까지 숫자를 더해야 하는데 총 10개의 프로세스에게 일을 맡기고 싶다면 어떻게 해야할까?기본적으로 프로세스는 값을 공유하지 않기 때문에 1번
Thread에서 생산자 소비자 패턴을 학습할 때 처음으로 Queue를 사용했다. 간단하게 복습하면 Queue는 선입선출 방식의 자료구조로 주로 데이터를 전달할 때 많이 사용되며 멀티프로세스에서도 사용 가능하다파이프라인은 프로세스 간의 통신을 할 수 있도록 통로를 열어주
Concurrency(동시성)는 CPU 가용성 극대화 위해 Parallelism 의 단점 및 어려움을 소프트웨어(구현)레벨에서 해결하기 위한 방법이다.1개의 코어는 한번에 한가지의 작업만 처리 할 수 있다. 이때 1개 Core에서 시분할을 통해 2개 이상의 작업을 번갈
동기 방식은 작업 A가 작업 B에게 작업 요청을 하고 작업 A가 작업 B가 작업을 끝낼 때까지 관심을 가지는 방식이다. 여기서 말하는 관심은 작업이 끝이 났는가에 대한 확인이다.비동기 방식은 작업 A가 작업 B에게 작업 요청을 하고 작업 A가 작업 B가 작업을 끝낼 때
CPU Bound는 프로세스가 진행될 때, CPU 사용 기간이 I/O Wating 보다 많은 경우다. 주로 행렬 곱이나 고속 연산을 할 때 나타나며 CPU 성능에 의해 작업 속도가 결정된다.반면 I/O Bound는 프로세스가 진행될 때, I/O Wating 시간이 많은
이번 시간에는 CPU Bound Application과 I/O Bound Application을 만들어서 Multi Processing, Multi Threading, Async를 사용했을 때 어떤 방식이 더 효율이 좋은 지 비교해볼 것이다.CPU Bound Appli