1.1.2 进程间的通信方式
多进程犹如多个人,需要互相交流协调配合。但是,在操作系统的看管下(安全等的需要),进程间是彼此间独立的。
独立的个体相互通话,可以一个喊(广播),别人听(侦听);也可以由甲给乙挂个电话(共享文件、管道);或者发个短信什么的(信号);再者,写封信什么的给对方,都是可以的,具体采取什么方式,还得根据具体需要而定:如只是通知状态,短小的信号比较好;如不便打扰对方,管道、信箱等比较好;如果大规模的交换“思想”,消息队列、共享内存可能就是首选;这些,不一而足,因实际确定。
进程间通信没有什么了不得的;编程也没有什么了不得之处,他们其实多是现实生活的模拟,外加一些抽象后得出的解决问题的模型、规律。程序就是人类思维方式的模拟器,生活中怎么解决问题,通常的程序设计就怎么编写,这很有点“仿生”的味道,姑且称为“仿人仿事”如何?只是编写程序需要频繁考虑细节,用一种过程化的单调思维方式模拟多维的现实世界(似乎很有点“自不量力”,现代的软件业界,编程之思维方式不对,制约着我们构造大型复杂代码过程工程;题外话:编程思维)。这些人类的思维方式,决定了我们赋予计算机的行为模式。明白理解了这个,编程就不再那么难了。其实,在写代码这个领域,困难的是那些细节,是思维、理念差异造成的系统差异,以及实现不同系统时一些选择的偏差。这些差异,越是来自底层(操作系统、数据库、网络程序等),越会消耗掉我们更多的精力。
题外话
编程思维:
思维方式决定编程的难易。
编程应该借鉴生物的构造,摆脱简单的线性思维模型,即摆脱顺序化的思维,然后才有可能向着体系结构复杂的仿生进军。
在一个生物体内,系统构成是极为复杂的。各个组织、结构、系统等各司其职,密切有效的构成了单体生物这个大型复杂系统。
我们有脑,产生思维。
我们有副交感神经系统,负责自我调节身体里的生态环境。
我们有血液体系,负责营养的运输。
分工,计算机仿生之道。所幸的是,我们已不再懵懂不知,程序员们已经在摆脱以简单思维作为编程之路的道路上前进了一步。
让我们简单回顾一下编程的历史。
入门时,我们学到了顺序化、条件判断、循环这三大基本结构。这三大结构,小觑不得。他们有效地抽象了现实世界的内在结构模型,为我们描述问题提供了可逐步求解的手段。可惜的是,我们初始只是呀呀学步,教科书只是用一些小例子来说明这三种结构的用法,似乎很有些举重若轻的味道。我们有了固定的概念,“结构化”、“过程化”。但是,在我们继续深入学习时,系统的计算机教育对于思维的训练嘎然而止,不能帮助我们在思维上更进一步。
这种状况,直到“面向对象编程”出现后,局面才有所改观。
面向对象的提出,是一种思维的革新,以“封装”概念强调了“完整个体”,使得个体的行为和属性共存一体。这样,把事物的界限划分清晰,从而有利于事物的归类,实际上有利于在编程实现中把握“分离点[1]”和“耦合[2]”的关系,有利于我们做设计时有效实现解耦。这就是说,面向对象编程的思维方式,能有效降低思维的复杂度,使得程序员以有限精力去致力于解决更大更复杂的问题。
当今,架构师、系统分析师等等称呼风靡一时,表面上看,似乎编程的思维又有了新的发展,重视体系结构的设计与规划,确实是一大进步。我们先来了解一下何为“软件体系结构”:“软件体系结构定义了软件的局部和总体计算部件的构成,以及这些部件之间的相互作用关系。部件包括诸如客户、服务器、数据库、过滤器、程序包、过程、子过程等一切软件的组成成分。相互作用关系包括诸如过程调用、共享变量访问、消息传递等。相互作用也包括具有十分复杂的语义和构成的关系,诸如客户/服务器的访问协议、数据库的访问协议、网络的传输协议、异步事件的映射等。”[3]
生命体的每一个组织或器官,都有自己相对独立的功能。我们可以设想一下,有效的、完整的个体组合,如血肉般组合,以一个个微小的内核(内核,相对有自己的独立控制能力)组合成的具有独立功能的部件协调工作,才能构成一个复杂的生命体。微核技术为下一步创新积聚力量。
本文探讨了进程间通信的不同方式及其应用场景,并介绍了编程思维的重要性。通过类比现实生活中的沟通方式,文章解释了多种进程间通信机制的特点。此外,还讨论了从顺序化思维到面向对象编程思维的发展。

被折叠的 条评论
为什么被折叠?



