进程间通信(IPC)作用&为什么要使用进程间通信?

本文探讨了进程和线程的基本概念,重点介绍了如何通过Python的multiprocessing模块实现进程间通信和数据共享,以及如何处理同步问题。通过实例展示了管道(pipe)在进程间数据传输和事件通知中的应用。
摘要由CSDN通过智能技术生成

进程是系统资源分配的最小单元
线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间,多进程和多线程的程序涉及到同步、数据共享的问题,编写起来更复杂)
1)数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
4)资源共享:多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制。
5)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
例子:python pipe方式


from multiprocessing import Process, Queue
import os,time,random

import multiprocessing
import random
import time, os
 
 
def proc_send(pipe):
    while True:
        print("Process (%s) send:" % (os.getpid()))
        pipe.send("11111")
        time.sleep(random.random())
 
 
def proc_recv(pipe):
    while True:
        print("Process (%s) rev: %s" % (os.getpid(), pipe.recv()))
        time.sleep(random.random())
 
 
if __name__ == '__main__':
    pipe = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=proc_recv, args=(pipe[0],))
    p2 = multiprocessing.Process(target=proc_send, args=(pipe[1],))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值