冒号课堂§2.4:并发范式 - 编程入门网
的,但大大提高了用户体验,是软件人性化的表现。再举一例,媒体播放器一般都会提供暂停、快进、倒退、快放、慢放等按钮,如果不采用多线程,它们将形同虚设。此处并发式编程的作用在于提高了软件的响应能力,也改善了用户体验——有谁愿意驾驶一辆启动后不能刹车、不能倒车、不能变速、油尽方停的汽车呢?”
“岂止是不愿意,简直是恐怖!”叹号加重了语气。 “对于操作系统、各种实时系统和诸如数据库、网络服务器等基于服务的系统来说,在响应用户请求的时间上和资源的合理分配上有着极高的要求,并发式编程更是不可或缺。”句号接着补充。 问号随即又问:“并发式编程还有其他用处吗?” 冒号应道:“不同编程范式采用不同的视角和方法来设计和开发软件。并发式编程以进程为导向(Process-Oriented)、以任务为中心将系统模块化。我们都知道,模块化在编程中是个好东西。” 引号心存疑惑:“过程式中引入了函数模块,对象式中引入了对象模块,但并发式似乎没有在语法上引入新型模块,比如C和Java中的线程其实不过是函数或方法的包装而已。” “我猜你的意思是:在定义一个线程之前,其主函数已经模块化了,不能把功劳记在并发式编程上,对吧?”冒号笑问,“你不能孤立静止地看待每个模块,还要考虑到模块之间的相互关联和作用。相比串行式,并发式在模块之间引入了新的通讯和控制方式。也就是说,原先的一些模块的定义和划分一定是建立在线程机制的基础上的。如果失去线程的支持,它们的合理性自然会打上问号,说不定整体设计都会受到牵连。这也体现了编程范式的渗透性和全局影响力。” 教室上空弥漫的疑云一消而散。 冒号进一步指出:“除了用户主观上的需求和硬件客观上的可能外,并发式显得格外重要的另一深层原因是:许多程序是现实世界的模拟,而我们生活的世界不折不扣是并发式的。从某种意义上看,并发式的模拟比对象式的模拟更贴近世界。” 引号再次提问:“并发式编程在设计上有什么要求?” “并发式编程以资源共享与竞争为主线——又是对当今世界形势的一个逼真模拟。这意味着程序设计将围绕进程的划分与调度、进程之间的通讯与同步等等来展开。合理的并发式设计需要诸多方面的权衡考量。”冒号说着,放出一段幻灯片—— 软件易于重用、维护、测试 公平有效地利用资源,优化程序性能如增大吞吐量、减少响应时间、提高效率等 保障进程安全,防止竞态条件(Race Condition) 保持进程活性,避免死锁、饥饿、活锁、资源枯竭等 减少锁开销、上下文切换等带来的性能损失 妥善处理多进程在算法、调试等方面带来的复杂性 叹号蹙眉:“并发式编程好是好,就是太复杂。” “天下没有免费的午餐。有所得,必有所失。” 冒号淡淡地说,“并发式编程当然不容易,但也并非难以掌握。最重要的是,作为一个程序员,你不得不面对它。即使你不直接用并发式编程,你依赖的代码和依赖你的代码也可能用到;即使现在没有用并发式,将来也可能用到。如果采取避而不理的鸵鸟政策,早晚会被人点中你的死穴。虽然目前不会对并发式编程作更深入的探讨,但希望能引起你们足够的重视。” 句号谈及他的感受:“相比OOP在语言上得到的支持,并发式的支持力度好像很不够。” 冒号点头称是:“这是由并发式的复杂性和成熟度决定的。另外,在究竟是在语言级别上支持并发、还是交由操作系统处理的问题上,仁者见仁,智者见智。Ada、Java和C#等选择前者,在语法上对并发式编程有一定的支持;C和C++等选择后者,除了关键字volatile外,主要靠库函数支持。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |