浅谈多线程---全新的软件编程范型?(转载)

syf7901 2007-03-21 12:01:15


的确,paradigm(范型)是过去十年间流行的“商业用语”(例如 Macarena 和 Beanie Babies )之一。不过它最早起源于昆虫学领域。计算的起源也很早。如果在 20 世纪之前的词典中查找“computer”,它的定义是做计算的人。无论是计算军事领域的弹道、保险公司的精算图表还是海员用的潮汐表,“computer”都是指那些处理一组特定公式得出答案的人。不过现在,“computer”是指执行明确定义的重复性计算。

在过去的 100 多年中,computer(计算机)发生了天翻地覆的变化,所用的编程方法也得到了飞速发展。第一代电子计算机之一 ENIAC 使用跳接线和电线 通过不同的组件、表格和计算引擎传送存储的数据。当人们意识到计算机的程序也可以像数据那样进行处理和存储时,就产生了“存储程序 ”计算机的构想并最终将其变成现实。这在今天看来可能不算什么,但在 1948 年可是一个了不起的突破。

如果程序也能像数据一样存储在内存中,那么该如何将程序的指令编码到机器中呢?最初采用的是以二进制代码编写和输入的机器语言。之后出现了汇编语言,它只是用一组助记符代替了二进制机器指令。对于程序员而言,掌握“ADD”这类指令执行的操作要比记住执行同样操作的“01101110”这类指令容易得多。用于汇编语言的汇编程序执行明确定义的重复性过程,将汇编指令转换为机器语言。

工程师、物理学家、化学家以及其他领域的科学家们很早就认识到了计算机给他们的科研和工作带来的便利。但是,汇编语言就像是来自消失的亚特兰蒂斯大陆的某种神秘语言。科学家们研究了各种数学方法,最后开发出了第一个计算机高级语言 FORTRAN (FORmula TRANslation)。采用高级语言时,需要编译器,这样计算机才能执行明确定义的重复性过程,将人类可以(较容易)看懂的程序转换为机器语言。自从 FORTRAN 问世后,高级编程语言 与技术又经历了巨大的发展。最近,该领域的发展已经步入面向对象的编程以及可管理运行时环境阶段。

上述发展历程说明了什么?我们知道,编程领域的每个创新发展都是一次范型转变(90 年代的流行专业用语 中有该词)。从跳接线到二进制机器指令、汇编语言、高级语言再到面向对象的编程,这些发展进步都证明了这一点。现在,随着多核处理器的出现,软件领域下一次范型转变将会是基于线程的并发编程。

我们的身体和大脑无时无刻不在进行“并行处理”(心跳、呼吸、思考、散步以及嚼口香糖都在同时进行)。不管我们认为自己执行多任务的能力有多高,想象如何完成并行处理还是相当困难。不过,这是成功实现这种全新的编程范型必备的技能。然而,这真是一种全新的范型吗?不是!还记得前面提到的所有那些计算人员吗?那就是一个并行处理的例子:每位计算人员都被安排了一部分工作,所有人员同时做着工作,当所有工作完成以后,再把结果汇总到一起。听起来挺简单的。那么,在应用程序中实现多线程操作真的可以这么简单吗?

(多年以来,工程师和科学家们一直在使用并行计算和高性能计算 (HPC)。在利用 HPC 的情况下,计算机科学家们一直致力于采用并行架构实现自己的范型转变、发展 MPI 以及对分布式算法和并行算法进行研究。不过,我不太确定这对使用线程的程序员有多大用处。)

多核处理器让大众知道了并行执行的概念。因此,虽然并发编程和并行处理的范型虽然可能不是新生事物,但也只是从现在才开始普及开来。您是否会顺应潮流使用双核和四核处理器?不过这里有一个需要考虑的问题,即您是否确实需要?您在多线程编程上投入的时间和精力是否值得?您周围其他所有人都开始做某件事,并不表示您也要一样,是不是?

...全文
631 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingdog 2007-04-24
  • 打赏
  • 举报
回复
是有串行自动转并行的工具。但是这个属于编译器的技术,不是操作系统的。
intel的编译器就支持。
但是目前情况下,自动化工具的效果还不理想。所以还需要人为给出一点提示。其实openmp也可以看成是人为给出编译器一点提示。
shunan 2007-04-22
  • 打赏
  • 举报
回复
我觉得以后的并行应该都会在操作系统或者底层封装好,并不用人人都用mpi或者openmp。
因为我同学现在就在开始做这方面的工作,把用户输入的串行程序通过他的模型,把可以并行的部分尽可能的转变为系统允许的并行
flyingdog 2007-03-22
  • 打赏
  • 举报
回复
多线程编程的普及与硬件的发展有关,也与软件开发的便利性有关。无论是mpi还是openmp,最终需要让用户在多线程开发时的投入相对于单线程不要太高,才能得到普及。
我不懂电脑 2007-03-21
  • 打赏
  • 举报
回复
试了一下多核下用多线程,没有那么夸张。
allen9507 2007-03-21
  • 打赏
  • 举报
回复
关注

568

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧