多进程与多线程(三)

1.1.2 进程间的通信方式

多进程犹如多个人,需要互相交流协调配合。但是,在操作系统的看管下(安全等的需要),进程间是彼此间独立的。

独立的个体相互通话,可以一个喊(广播),别人听(侦听);也可以由甲给乙挂个电话(共享文件、管道);或者发个短信什么的(信号);再者,写封信什么的给对方,都是可以的,具体采取什么方式,还得根据具体需要而定:如只是通知状态,短小的信号比较好;如不便打扰对方,管道、信箱等比较好;如果大规模的交换“思想”,消息队列、共享内存可能就是首选;这些,不一而足,因实际确定。

进程间通信没有什么了不得的;编程也没有什么了不得之处,他们其实多是现实生活的模拟,外加一些抽象后得出的解决问题的模型、规律。程序就是人类思维方式的模拟器,生活中怎么解决问题,通常的程序设计就怎么编写,这很有点“仿生”的味道,姑且称为“仿人仿事”如何?只是编写程序需要频繁考虑细节,用一种过程化的单调思维方式模拟多维的现实世界(似乎很有点“自不量力”,现代的软件业界,编程之思维方式不对,制约着我们构造大型复杂代码过程工程;题外话:编程思维)。这些人类的思维方式,决定了我们赋予计算机的行为模式。明白理解了这个,编程就不再那么难了。其实,在写代码这个领域,困难的是那些细节,是思维、理念差异造成的系统差异,以及实现不同系统时一些选择的偏差。这些差异,越是来自底层(操作系统、数据库、网络程序等),越会消耗掉我们更多的精力。

题外话

编程思维:

思维方式决定编程的难易。

编程应该借鉴生物的构造,摆脱简单的线性思维模型,即摆脱顺序化的思维,然后才有可能向着体系结构复杂的仿生进军。

在一个生物体内,系统构成是极为复杂的。各个组织、结构、系统等各司其职,密切有效的构成了单体生物这个大型复杂系统。

我们有脑,产生思维。

我们有副交感神经系统,负责自我调节身体里的生态环境。

我们有血液体系,负责营养的运输。

分工,计算机仿生之道。所幸的是,我们已不再懵懂不知,程序员们已经在摆脱以简单思维作为编程之路的道路上前进了一步。

让我们简单回顾一下编程的历史。

入门时,我们学到了顺序化、条件判断、循环这三大基本结构。这三大结构,小觑不得。他们有效地抽象了现实世界的内在结构模型,为我们描述问题提供了可逐步求解的手段。可惜的是,我们初始只是呀呀学步,教科书只是用一些小例子来说明这三种结构的用法,似乎很有些举重若轻的味道。我们有了固定的概念,“结构化”、“过程化”。但是,在我们继续深入学习时,系统的计算机教育对于思维的训练嘎然而止,不能帮助我们在思维上更进一步。

这种状况,直到“面向对象编程”出现后,局面才有所改观。

面向对象的提出,是一种思维的革新,以“封装”概念强调了“完整个体”,使得个体的行为和属性共存一体。这样,把事物的界限划分清晰,从而有利于事物的归类,实际上有利于在编程实现中把握“分离点[1]”和“耦合[2]”的关系,有利于我们做设计时有效实现解耦。这就是说,面向对象编程的思维方式,能有效降低思维的复杂度,使得程序员以有限精力去致力于解决更大更复杂的问题。

当今,架构师、系统分析师等等称呼风靡一时,表面上看,似乎编程的思维又有了新的发展,重视体系结构的设计与规划,确实是一大进步。我们先来了解一下何为“软件体系结构”:“软件体系结构定义了软件的局部和总体计算部件的构成,以及这些部件之间的相互作用关系。部件包括诸如客户、服务器、数据库、过滤器、程序包、过程、子过程等一切软件的组成成分。相互作用关系包括诸如过程调用、共享变量访问、消息传递等。相互作用也包括具有十分复杂的语义和构成的关系,诸如客户/服务器的访问协议、数据库的访问协议、网络的传输协议、异步事件的映射等。”[3]

生命体的每一个组织或器官,都有自己相对独立的功能。我们可以设想一下,有效的、完整的个体组合,如血肉般组合,以一个个微小的内核(内核,相对有自己的独立控制能力)组合成的具有独立功能的部件协调工作,才能构成一个复杂的生命体。微核技术为下一步创新积聚力量。



[1] Separation of Concerns,即不同无关的责任应该在事物中分离开,让他们出现在不同的部分中

[2] 强调对象模块之间的特征

[3] 《软件体系结构的原理、组成与应用》,万建成、卢雷编著,第1章概述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值