消息队列是一种进程间通信方式,可以将消息从一个进程发送到另一个进程,异步地处理消息。消息队列有多种实现方式,如 POSIX 消息队列、RabbitMQ 等。
优点:
缺点:
示例代码(Python + RabbitMQ):
- import pika
-
- # 连接 RabbitMQ 服务器
- connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
- channel = connection.channel()
-
- # 声明队列
- channel.queue_declare(queue='hello')
-
- # 发送消息
- channel.basic_publish(exchange='', routing_key='hello', body='Hello, world!')
-
- # 关闭连接
- connection.close()
共享内存是一种进程间通信方式,可以让多个进程共享同一块物理内存。共享内存有多种实现方式,如 System V 共享内存、POSIX 共享内存等。
优点:
缺点:
示例代码(Python + mmap):
- import mmap
- import os
-
- # 打开文件
- with open('data.bin', 'r+b') as f:
- # 创建内存映射
- mm = mmap.mmap(f.fileno(), 0)
-
- # 写入数据
- mm.write(b'Hello, world!')
-
- # 同步到磁盘
- mm.flush()
-
- # 关闭内存映射
- mm.close()
进程间管道是一种进程间通信方式,可以在两个进程之间建立一个管道,实现单向或双向的数据传输。进程间管道有多种实现方式,如匿名管道(Anonymous Pipe)、命名管道(Named Pipe)等。
优点:
缺点:
示例代码(Python):
- import os
-
- # 创建管道
- r, w = os.pipe()
-
- # 创建子进程
- pid = os.fork()
-
- if pid > 0:
- # 在父进程中写入数据
- os.close(r)
- w = os.fdopen(w, 'w')
- w.write('Hello, world!')
- w.close()
- else:
- # 在子进程中读取数据
- os.close(w)
- r = os.fdopen(r, 'r')
- message = r.read()
- print(message)
- r.close()
Socket 是一种基于网络协议的进程间通信方式,可以让多个进程在不同的计算机之间进行通信。Socket 有多种实现方式,如 TCP Socket、UDP Socket 等。
优点:
缺点:
示例代码(Python + TCP Socket):
- import socket
-
- # 创建 Socket 对象
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
- # 绑定 IP 地址和端口号
- server_socket.bind(('localhost', 8888))
-
- # 监听连接
- server_socket.listen(5)
-
- while True:
- # 接受连接
- client_socket, client_address = server_socket.accept()
- print('Client connected:', client_address)
-
- # 接收数据
- message = client_socket.recv(1024)
- print('Received:', message.decode())
-
- # 发送数据
- client_socket.send('Hello, world!'.encode())
-
- # 关闭连接
- client_socket.close()