운영체제

[운영체제] 프로세스 간 통신(IPC) 완벽 가이드: 메시지 큐 동작 원리와 Java·Python 예제

CodeCaine Explorer 2024. 12. 18. 09:40
728x90
반응형
SMALL

프로세스 간 통신(IPC, Inter-Process Communication)이란?

컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주고받거나 협력해야 할 때가 있습니다. 이를 프로세스 간 통신(IPC)이라고 해요. 😊

IPC는 운영체제가 프로세스들끼리 정보를 공유할 수 있게 하는 방법이에요.
간단히 말해서, 프로세스들이 서로 대화하거나 파일을 주고받는 방법이에요. 😊


📂 IPC에서 자주 사용되는 개념

  • 파이프 (Pipe): 데이터를 한쪽에서 보내면 다른 쪽에서 받을 수 있는 터널 같은 것!
  • 소켓 (Socket): 네트워크로 연결된 두 프로세스가 통신하는 방식.
  • 공유 메모리: 프로세스들이 같은 메모리 공간을 함께 사용하는 방법.
  • 메시지 큐: 데이터를 보내고 받고 할 수 있는 편지함 같은 구조.

📨 메시지 큐 (Python과 Java)

동작 설명

  1. 메시지 큐는 두 프로세스(또는 스레드)가 데이터를 주고받는 우체통 같은 역할을 합니다.
  2. 하나의 프로세스가 큐에 데이터를 추가하면, 다른 프로세스가 큐에서 데이터를 가져갑니다.
  3. 큐를 사용하면 데이터를 주고받는 순서를 보장할 수 있습니다.

파이썬 메시지 큐 코드 설명

from multiprocessing import Process, Queue

def producer(queue):
    queue.put("안녕하세요! 😊")  # 메시지를 큐에 추가
    print("메시지를 보냈습니다!")  # 전송 알림

def consumer(queue):
    message = queue.get()  # 큐에서 메시지 가져오기
    print("받은 메시지:", message)  # 받은 메시지 출력

if __name__ == "__main__":
    queue = Queue()  # 메시지 큐 생성

    # 프로듀서와 컨슈머 프로세스 생성
    p1 = Process(target=producer, args=(queue,))
    p2 = Process(target=consumer, args=(queue,))

    p1.start()  # 프로듀서 프로세스 시작
    p2.start()  # 컨슈머 프로세스 시작

    p1.join()  # 프로듀서 종료 대기
    p2.join()  # 컨슈머 종료 대기
  • Queue: 메시지를 저장할 수 있는 데이터 구조로, 프로듀서와 컨슈머 간의 통신을 가능하게 합니다.
  • producer: 메시지 "안녕하세요! 😊"를 큐에 추가.
  • consumer: 큐에서 메시지를 가져와 출력.

자바 메시지 큐 코드 설명

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class MessageQueueExample {
    public static void main(String[] args) {
        BlockingQueue<String> queue = new LinkedBlockingQueue<>(); // 메시지 큐 생성

        // Producer (메시지 추가)
        Thread producer = new Thread(() -> {
            try {
                queue.put("안녕하세요! 😊"); // 메시지를 큐에 추가
                System.out.println("메시지를 보냈습니다!");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        // Consumer (메시지 처리)
        Thread consumer = new Thread(() -> {
            try {
                String message = queue.take(); // 큐에서 메시지 가져오기
                System.out.println("받은 메시지: " + message); // 받은 메시지 출력
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        producer.start(); // 프로듀서 시작
        consumer.start(); // 컨슈머 시작
    }
}
  • BlockingQueue: 큐에 데이터를 안전하게 추가/삭제할 수 있는 구조.
  • producer: 메시지 "안녕하세요! 😊"를 큐에 추가.
  • consumer: 큐에서 메시지를 꺼내 출력.

동작 요약 🎉

  1. 공유 메모리
    • 빠르고 효율적이지만, 동기화를 관리해야 함.
    • 프로세스들이 같은 메모리 공간을 공유하며 데이터를 직접 읽고 씀.
  2. 메시지 큐
    • 안전하게 데이터를 주고받을 수 있고, 순서를 보장함.
    • 데이터를 중간 저장소(큐)에 저장하고, 다른 프로세스가 순서대로 가져감.

😊 마무리

  • 소켓: 네트워크 통신.
  • 공유 메모리: 프로세스 간 공용 메모리 공간.
  • 메시지 큐: 메시지를 저장하고 교환하는 우체통.

이 세 가지 모두 다양한 상황에서 강력한 도구가 될 수 있어요! 😊

2024.12.16 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 파이프

 

[쉬운설명]프로세스 간 통신(IPC)이란? : 파이프

프로세스 간 통신(IPC, Inter-Process Communication)이란?컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주

alswnsghd1234.tistory.com

2024.12.17 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 소켓

 

[쉬운설명]프로세스 간 통신(IPC)이란? : 소켓

프로세스 간 통신(IPC, Inter-Process Communication)이란?컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주

alswnsghd1234.tistory.com

2024.12.17 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 공유 메모리

 

[쉬운설명]프로세스 간 통신(IPC)이란? : 공유 메모리

프로세스 간 통신(IPC, Inter-Process Communication)이란?컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주

alswnsghd1234.tistory.com

 

반응형
SMALL