对于软件开发者来说,无论是做前端、WEB、中间件、底层,还是其他,掌握进程相关的知识都是非常重要的。最近有人问我一个问题:进程间通信有哪几种方式?作为多年开发者,一时答不上来(相当尴尬)。后来上网查了相关资料,对这个问题有了大概的了解。在这篇文章中,我将根据我找到的资料,介绍进程和进程间通信的方式,供大家复习一下基础知识。也希望大家在从事开发工作的时候不要忘记加强自己的基础知识。流程简介流程的概念已经存在了半个多世纪。它最早在1960年代初在MIT的MULTICS系统和IBM的CTSS/360系统中引入。过程的定义有广义和狭义之分。狭义的进程是指正在运行的程序的实例;广义上的进程是指具有一定独立功能的程序在一定数据集上的运行活动,是操作系统动态执行的基本单位。关于进程有两点需要注意:第一,进程是一个实体,每个进程都有自己的地址空间;其次,进程是一个“正在执行的程序”(只有当操作系统执行它的时候,它才能成为一个活动实体)。进程间通信有8种方式:第一种,无名管道(pipe):它是一种半双工的通信方式,数据只能单向流动,只有当进程间使用亲和力(affinityof进程通常是指父子进程关系)。第二种,高级流水线(popen):在当前程序进程中启动另一个程序作为一个新进程,然后将其视为当前程序的子进程,这种方法称为高级流水线方法。具体程序执行可以参考这篇文章:http://blog.csdn.net/zhouzhaoxiong1227/article/details/50403299。第三种,namedpipe:也是一种半双工的通信方式,但是它允许不相关的进程进行通信。第四种,消息队列(messagequeue):是一种存储在内核中的数据结构,由消息队列标识标识;它克服了信号传输信息不足、管道只能承载未格式化的字节流和缓冲区大小有限等缺点。具体的队列操作可以参考这篇文章:http://blog.csdn.net/zhouzhaoxiong1227/article/details/52186663五、信号量(semaphore):是一个计数器,可以用来控制多个进程访问到共享资源;它通常用作锁定机制,以防止其他进程在一个进程访问共享资源时访问该资源。因此,它主要用作进程之间以及同一进程内不同线程之间的同步手段。第六,信号(signal):是一种比较复杂的通信方式,用来通知接收进程某个事件已经发生。第七种,共享内存(sharedmemory):是程序映射的一块内存,可以被其他进程访问。此共享内存由一个进程创建,但多个进程可以访问它;它是为其他进程的通信方式而设计的,运行效率较低,常与其他通信机制(如信号量)结合使用,以实现进程间的同步和通信。第八种,套接字(socket):也是一种进程间通信机制。与其他通信机制不同,它可以用于不同机器之间的进程通信。具体的socket消息流程可以参考这篇文章:http://blog.csdn.net/zhouzhaoxiong1227/article/details/46416555。【本文为专栏作家“周兆雄”原创文章,作者微信公众号:周氏逻辑(logiczhou)】点此阅读更多本作者好文
