[javascript] 멀티 프로세싱 및 멀티 스레딩

프로그래밍에서 멀티 프로세싱멀티 스레딩은 병렬 처리를 수행하는 중요한 기술입니다. 이 기술을 사용하면 프로그램의 성능을 향상시키고 병렬 작업을 처리할 수 있습니다.

멀티 프로세싱

멀티 프로세싱은 하나 이상의 프로세스를 사용하여 작업을 동시에 처리하는 것을 말합니다. 각 프로세스는 독립적으로 실행되며, 각각의 메모리를 사용합니다. 멀티 프로세싱은 대규모 작업을 여러 부분으로 나누어 병렬로 처리할 때 특히 유용합니다. Node.js의 Cluster 모듈은 멀티 프로세싱을 구현하는 데 도움이 됩니다.

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

if (cluster.isMaster) {
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  http.createServer((req, res) => {
    // 웹 서버 로직
    res.writeHead(200);
    res.end('Hello, World!\n');
  }).listen(8000);
}

멀티 스레딩

멀티 스레딩은 하나의 프로세스 내에서 여러 스레드를 사용하여 작업을 동시에 처리하는 것을 말합니다. 각 스레드는 프로세스 내에서 공유된 자원을 사용하므로, 데이터 공유 및 통신에 대한 주의가 필요합니다. 자바의 java.util.concurrent 패키지는 멀티 스레딩 구현을 지원합니다.

멀티 스레딩은 I/O 및 네트워크 작업을 비동기적으로 처리하거나 병렬로 실행해야 할 때 유용합니다.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
  public static void main(String[] args) {
    ExecutorService executor = Executors.newFixedThreadPool(5);
    for (int i = 0; i < 10; i++) {
      Runnable worker = new WorkerThread("" + i);
      executor.execute(worker);
    }
    executor.shutdown();
    while (!executor.isTerminated()) {
    }
    System.out.println("모든 작업 완료");
  }
}

class WorkerThread implements Runnable {
  private String message;
  public WorkerThread(String s) {
    this.message = s;
  }
  public void run() {
    System.out.println(Thread.currentThread().getName() + " (Start) message = " + message);
    processMessage();
    System.out.println(Thread.currentThread().getName() + " (End)");
  }
  private void processMessage() {
    try {
      Thread.sleep(2000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}

멀티 프로세싱 및 멀티 스레딩을 적절히 활용하면 프로그램의 성능을 최적화하고 병렬 작업을 효과적으로 처리할 수 있습니다.

참고 자료

이 예시 코드들은 Node.js와 Java를 기반으로 합니다.