728x90
반응형
SMALL
프로세스 간 통신(IPC, Inter-Process Communication)이란?
컴퓨터에서 프로그램은 각각 독립적으로 실행되는 프로세스라는 단위로 나뉘어요. 하지만 때로는 한 프로세스가 다른 프로세스와 데이터를 주고받거나 협력해야 할 때가 있습니다. 이를 프로세스 간 통신(IPC)이라고 해요. 😊
IPC는 운영체제가 프로세스들끼리 정보를 공유할 수 있게 하는 방법이에요.
간단히 말해서, 프로세스들이 서로 대화하거나 파일을 주고받는 방법이에요. 😊
📂 IPC에서 자주 사용되는 개념
- 파이프 (Pipe): 데이터를 한쪽에서 보내면 다른 쪽에서 받을 수 있는 터널 같은 것!
- 소켓 (Socket): 네트워크로 연결된 두 프로세스가 통신하는 방식.
- 공유 메모리: 프로세스들이 같은 메모리 공간을 함께 사용하는 방법.
- 메시지 큐: 데이터를 보내고 받고 할 수 있는 편지함 같은 구조.
📨 메시지 큐 (Python과 Java)
동작 설명
- 메시지 큐는 두 프로세스(또는 스레드)가 데이터를 주고받는 우체통 같은 역할을 합니다.
- 하나의 프로세스가 큐에 데이터를 추가하면, 다른 프로세스가 큐에서 데이터를 가져갑니다.
- 큐를 사용하면 데이터를 주고받는 순서를 보장할 수 있습니다.
파이썬 메시지 큐 코드 설명
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
: 큐에서 메시지를 꺼내 출력.
동작 요약 🎉
- 공유 메모리
- 빠르고 효율적이지만, 동기화를 관리해야 함.
- 프로세스들이 같은 메모리 공간을 공유하며 데이터를 직접 읽고 씀.
- 메시지 큐
- 안전하게 데이터를 주고받을 수 있고, 순서를 보장함.
- 데이터를 중간 저장소(큐)에 저장하고, 다른 프로세스가 순서대로 가져감.
😊 마무리
- 소켓: 네트워크 통신.
- 공유 메모리: 프로세스 간 공용 메모리 공간.
- 메시지 큐: 메시지를 저장하고 교환하는 우체통.
이 세 가지 모두 다양한 상황에서 강력한 도구가 될 수 있어요! 😊
2024.12.16 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 파이프
2024.12.17 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 소켓
2024.12.17 - [운영체제] - [쉬운설명]프로세스 간 통신(IPC)이란? : 공유 메모리
반응형
SMALL
'운영체제' 카테고리의 다른 글
[운영체제] 생산자-소비자 문제 완벽 이해: 세마포어와 뮤텍스를 활용한 동기화 예제 코드 (0) | 2024.12.18 |
---|---|
[운영체제] 프로세스 간 통신(IPC) 완벽 가이드: 파이프(Pipe) 개념과 Java·Python 구현 (1) | 2024.12.18 |
[운영체제] 프로세스 간 메모리 격리 완벽 이해: Java·Python 예제 코드와 원리 설명 (0) | 2024.12.18 |
[운영체제] 프로세스 동기화 완벽 정리: Mutex, Semaphore 개념과 자바·파이썬 예제 (0) | 2024.12.18 |
[운영체제] 프로세스 구성 요소 완벽 가이드: 메모리 구조와 역할 쉽게 이해하기 (0) | 2024.12.18 |