[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를 기반으로 합니다.