본문 바로가기

과거공부모음

멀티스레딩과 멀티프로세싱

멀티스레딩과 멀티프로세싱은 컴퓨터 프로그램이 여러 작업을 동시에 수행할 수 있도록

하는 두 가지 병렬처리 기술입니다.

그러나 각각의 기술은 다른 방식으로 동작하며 서로 다른 환경과 요구 사항이 있다.

멀티스레딩과 멀티프로세싱이란?

멀티스레딩(Multithreading)

멀티스레딩은 하나의 프로세스 내에서 여러 개의 스레드를 생성하여 병렬 처리를 수행하는 기술

이러한 스레드들은 동일한 메모리 공간을 공유하며 자원을 효율적으로 사용할 수 있다.

멀티스레딩은 주로 I/O작업이 많이 포함된 프로그램에 적합하며 빠른 응답 시간이 필요한 상황에서

유용하다. 그러나 스레드들이 공유하는 자원으로 인해 동기화 및 데이터 경쟁 문제가 발생할 수 있다.

사용 예) 웹 서버, 그래픽 사용자 인터페이스, 동영상 편집 소프트웨어

멀티프로세싱(Multiprocessing)

멀티프로세싱은 여러 개의 프로세스를 생성하여 병렬 처리를 수행하는 기술이다.

각 프로세스는 독립적인 메모리 공간을 가지고 실행되며 프로세스 간의 데이터 공유가 제한적이다.

멀티프로세싱은 주로 CPU 집중적인 작업에 적합하며 복잡한 계산이나 오래 걸리는 작업을

병렬 처리할 때 유용하다. 데이터 공유와 동기화 문제는 멀티스레딩에 비해 상대적으로 적지만

프로세스 간 통신(IPC)에 추가적인 시간과 리소스가 필요하다.

사용 예) 과학적 계산, 데이터베이스 서버, 비디오 인코딩/디코딩

node.js에서 멀티스레딩, 멀티프로세싱 동작하기

node.js는 기본적으로 싱글 스레드 기반으로 동작한다.

하지만 멀티 스레딩을 활용하는 방법도 제공한다.

Worker threads

worker_threads 모듈을 사용하여 node.js 애플리케이션에서 멀티 스레딩을 구현할 수 있다.

Worker threads는 CPU 집중적인 작업을 백그라운드에서 실행하면서 메인 스레드가 비동기

I/O 작업에 집중할 수 있도록 도와준다.

Worker threads를 사용하려면 모듈을 불러와서 사용하면 된다.

const { Worker, isMainThread, parentPort } = require('worker_threads');

Cluster

cluster모듈은 마스터 프로세스와 여러 개의 워커 프로레스를 생성하여 멀티프로세싱 방식으로

애플리케이션을 확장할 수 있게 한다. 이러한 워커 프로세스는 독립적인 싱글 스레드로 실행되며

마스터 프로세스와 통신한다. Cluster 모듈은 여러 CPU 코어를 활용하여 애플리케이션 성능을

향상하는데 도움을 준다.

Cluster 모듈을 사용하려면 모듈을 불러와서 사용하면 된다.

const cluster = require('cluster');
const numCPUs = require('os').cpus().length;

Worker threads를 사용하면 싱글 스레드가 어떻게 멀티 스레드로 바뀔까?

Worker threads를 사용해도 node.js 애플리케이션은 여전히 싱글 시레드 기반이다.

Worker threads는 메인 스레드와 별도로 실행되는 추가 스레드를 생성하여 애플리케이션에서

병렬 처리를 가능하게 한다.

Worker threads는 메인 스레드와 독립적인 스레드에서 코드를 실행할 수 있는 도구를 제공한다.

메인 스레드는 주로 이벤트 루프와 비동기 I/O 작업을 처리한다.

Worker threads는 CPU 집중적인 작업을 수행하는데 사용한다.

Worker threads를 사용하여 멀티 스레딩을 구현하면 메인 스레드와 별도로 실행되는 추가 스레드가

만들어진다. 이러한 각 스레드는 자체 실행 컨텍스트와 메모리 공간을 가지며 메시지 패싱을 통해

메인 스레드와 통신할 수 있다.

'과거공부모음' 카테고리의 다른 글

정규 표현식(Regular Expression)  (0) 2023.04.25
클라우드 컴퓨팅  (0) 2023.04.24
테스트(Testing)  (0) 2023.04.21
호이스팅  (0) 2023.04.20
실행 컨텍스트와 스코프  (0) 2023.04.20