💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶🔹C++🔹Liunx
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍
一、什么是进程间通信
进程间通信(Inter-Process Communication,IPC)是指操作系统或计算机系统中,不同进程之间进行数据交换和通信的机制或技术。由于进程是操作系统中独立运行的程序实例,而进程间通信允许这些独立的进程之间相互协作、共享资源和进行数据交换。
二、为什么要进行进程间通信
- 根据我们前面讲的,进程间是相互独立的,进程具有独立性啊,那通信不就不独立了吗?
- 进程通信的确会破坏进程的完全独立性,因为进程通信的目的是为了实现进程之间的数据共享、同步和协作。通过进程通信,各个进程可以相互交互和共享资源,这意味着它们不再完全独立,而是具有一定的相互依赖性和关联性。
- 尽管进程通信破坏了进程的完全独立性,但这种破坏是有意义且必要的。在实际的计算机系统和操作系统中,进程往往需要协同工作、共享资源和交换数据才能完成复杂的任务。进程通信提供了一种机制,使得不同进程之间可以进行必要的协作和交流,并提供了相应的同步和保护机制来确保数据的正确性和一致性。
- 所以这是一种权衡和折中的方案,但大部分情况下进程是相互独立的。
三、进程间通信作用:
- 数据传输:一个进程需要将它的数据发送给另一个进程。
资源共享:多个进程之间共享同样的资源(包括本地共享和远程资源共享)。 - 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
- 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
四、进程间通信的本质理解
-
1.我们知道进程具有独立性,是通过虚拟地址空间 + 页表映射的方式来保持独立性的,所以通信起来成本会比较高。
-
2.既然通信,那么前提是一定要让不同的进程看到同一块“内存”(特定的结构组织),这块"内存"不能隶属于任何一个进程,而更应该强调共享。
五、 进程间通信的方式
大体上可以分为3种通信方式:
1 .管道
匿名管道pipe
命名管道
2 .System V IPC
System V消息队列
System V共享内存
System V信号量
System V只能用于单机通信(本地通信).
3.POSIX IPC
消息队列
共享内存
信号量
互斥量
条件变量
读写锁
POSIX IPC可以在单机通信的基础上,进行网络通信(远程资源共享)。
以上所提到的方式,我会在后面的章节逐一讲解,这个是进程间通信的方式.