张 杨,张冬雯,杨奎河
(河北科技大学 信息科学与工程学院,河北 石家庄 050000)
摘 要:针对现阶段并行程序设计教材相对匮乏的问题,在分析已有并行程序设计教材发展现状的基础上,对面向主流编程语言Java的并行程序设计教材建设进行比较,说明《Java并行程序设计》教材的基本架构、相关知识点以及例题演示方法,介绍该教材在个性化实训教育和选修课中的教学效果。
教育期刊网 http://www.jyqkw.com
关键词 :并行程序设计;多线程编程;教材建设;Java教学
基金项目:2013年度全国高等学校计算机教材建设项目和河北科技大学理工学院教育教学研究项目“多核时代并行编程教学实践及教材建设”(2014Y06)。
第一作者简介:张杨,男,讲师,研究方向为并行程序设计和优化、软件重构,uzhangyang@foxmail.com。
0 引 言
随着多核处理器的普及以及众核处理器设计技术的不断发展,并行程序设计不会只局限在拥有高性能工作站和服务器的实验室和工业界中,普通用户也可以使用并行编程技术来设计高性能程序,工业界和学术界一致认为,并行程序设计将成为未来软件开发技术的主流。并行程序设计继承了传统程序设计中的理论和方法,但对程序设计方法又提出了许多新的要求,突出表现在并行思维能力、并行算法、并行数据分解、任务分解等方面,目前很多程序设计人员对传统的串行程序设计较为熟悉,但对并行程序设计的相关方法还有待深入学习。
并行程序设计技术的发展给高校的计算机教学带来了新的挑战,如何培养学生由传统的串行程序设计向并行程序设计转变是摆在诸多高校面前的一个难题。在过去的几年中,Intel公司联合国内高校开展了多核相关的课程,如清华大学郑纬民教授、浙江大学陈天洲教授、武汉大学田茂教授等诸多高校的学者都在多核课程建设方面进行了有益探索,这些探索无疑促进了并行程序设计在高校的普及。
Java是目前最流行的编程语言之一,众多高校都开设了针对Java编程语言的教学课程,但大多数课程是关于Java基本知识的教学,对Java并行程序设计方面的教学探索主要集中在Java线程的初步讲解,详细深入的Java并行程序设计的教学还有待进一步探索。
1 现状分析
在并行程序设计方面,国外有很多经典的教材。Doug Lea是JDK并发库的主要设计者,由他主编的《Concurrent Programming in Java》[1]是Java并行程序设计的权威教材,该书主要介绍了Java内存模型、可移植的(Portable)并行编程、并行工具类等,从内容上来讲,该书更侧重于并行程序设计的原则和并行模式的讲解,具有实用价值和较高的理论深度。
《Java 7 Concurrency Cookbook》[2]介绍了JDK 7中的线程、线程同步、工具类等内容,且紧跟JDK的发展,介绍了适合多核时代的编程框架Fork/Join。该书大量使用实例,对于初学者是一本理想的教材,但它侧重于实例说明,对于JDK并发类的原理说明不足。
《Programming Concurrency on the JVM》[3]是在Java虚拟机上进行并发编程的一本教材,该书侧重于讲解线程同步的控制,对锁和软件事务性内存进行了详细的说明。
在面向多核平台的并行编程教材方面,《Multicore Application Programming》[4]对硬件和软件的相关知识进行了讲解,该书并没有局限于某一主流的编程语言,对如何识别并行的机会以及如何使用自动化并行技术等内容进行了深入的讲解。
这些国外的教材从内容上来说有些侧重于最新的研究进展,有些侧重于技术的原理性说明,还有一些侧重于实际操作,虽然知识性强,但不适合作为国内学生的教材,这主要因为其在语言方面和编写风格方面不符合国内学生的阅读习惯,且在教学方面没有考虑中国的教学特点。在国内,虽然目前有一些教材(如《多核程序设计》 [5]和《多核架构和编程技术》[6])是关于多核平台上并行编程的,但大部分教材(如《Java多线程设计模式》 [7])都是对国外教材的译著,并行程序设计相关的国内自编教材仍然匮乏,因此,亟须编写一部适合我国高校教与学特点的并行程序设计教材。
2 教材建设
为了帮助更多的人了解和学习并行程序设计的思想、方法和技术,作者历时一年半编写了《Java并行程序设计》教材,该教材已于2015年3月由清华大学出版社出版发行,它是作者在长期教学和科研实践基础上编写而成的。该教材以Java程序设计语言为基础,对并行程序设计的相关概念、基本原理和方法进行了介绍,其总体架构如图1所示。总体上来说,本书分为五大部分,分别为基本知识、线程相关操作、并行框架、并行辅助以及性能和测试,其中线程相关操作、并行框架和并行辅助为本书重点阐述部分。图中虚线框为本教材的图书章节安排,具体内容涉及并行程序设计基本知识、线程定义、线程同步、线程障栅、线程间通信、执行器、Fork/Join框架、自定义的并发类等内容,分别介绍如下:
(1)基本知识:该章介绍并行程序设计的相关概念和相关术语,如线程安全、数据竞争、加速比等;此外,还对Java并行方面的特性、并行程序设计方法和并发程序的评判标准进行介绍。
(2)线程:该章讲解如何创建线程、线程的状态和属性以及管理线程的方法,不仅对有返回值的Callable线程创建进行讲解,而且对没有返回值的Runnable线程创建也进行讲解。
(3)线程同步:该章对锁和原子性操作进行讲解,并通过例子对死锁和活锁问题进行阐述。
(4)线程间通信:该章介绍线程间通信的操作,以生产者、消费者问题为例,对线程间通信机制进行深入讲解。
(5)同步障栅:介绍几种典型的线程同步障栅机制,如倒计时门闩、信号量、同步队列等内容。
(6)线程执行器:对Executor执行器进行介绍,对几种不同的执行器进行讲解。
(7)Fork/Join框架:对JDK1.7版本推出的Fork/Join框架的原理和应用进行介绍。
(8)自定义并发类:对如何定义用户自己需要的线程工厂、线程池、自定义锁等内容进行讲解。
(9)线程安全的集合:对Java中线程安全的集合操作进行介绍,具体包括线程安全的双端队列、哈希表、跳表等。
(10)多线程程序的性能和测试:该章简单地对多线程程序的性能和测试进行介绍。
(11)面向方面编程在并行程序设计中的应用:对如何应用面向方面编程技术和注释接口构造标记化的并行程序进行讲解。
在该教材中,所有知识点在讲解基本知识的同时都通过实例加以演示,例题演示方法如图2所示。首先,提出问题,然后对问题的解决方法进行分析,接着给出程序的代码和执行结果,最后对结果进行分析,并进行相关讨论。通过这种方法,力求让读者透彻理解各个知识点。
虽然本书介绍的并行程序设计知识只是强大的Java世界中之冰山一角,但也覆盖了JDK并发库中绝大多数的工具类和接口的使用方法。需要特别说明的是,Java并发库只是提供了一个工具,并行程序设计过程中最重要的是并行思想和并行编程思维习惯的培养。作者希望本书在介绍Java并行程序设计相关知识的同时,可以培养学习者并行编程的思想和思维习惯,引领其进入到并行程序的世界中,为高性能的程序设计起到抛砖引玉的作用。该书适合普通高校、实践和工程类院校学生在学习高性能程序设计时选用,是高等院校学生和IT领域在职人员学习Java高级编程技术的理想教材和工具书,也可以作为那些需要高性能计算技术的人员的自修参考用书。
与国内外众多的Java经典教材相比较,《Java并行程序设计》教材的特点主要体现在以下几个方面:①该教材结合并行程序设计的相关概念,详细讲解Java语言中多线程的相关机制和方法;②每一个知识点都通过例题加以演示,可以帮助学生更好地掌握相关知识;③各章内容精心安排,更符合我国学生的阅读习惯。
3 教学探索及其效果
3.1 在个性化实训教育中的教学探索
个性化教育实训课程是为培养学生灵活运用所掌握的技术和工具解决实际工程问题的能力。该实训课程是为提高学生项目实践能力、开拓学生创新能力而开设的实践性环节课程,在学生已具备了Java程序设计基本知识的基础上,进一步培养学生应用Java语言进行并行程序设计的能力。本实训课程的目标是使学生掌握基本的并行程序设计能力,了解并行程序设计的基本思想,分析设计实际项目、编写、调试和运行实用、规范、可读性好的应用程序。
在2014年的个性化教育中共30人参加了实训,由学生根据自己的兴趣进行自主选题,我们将这些学生分为5组,每组同学选定1个题目,相互合作完成实训。分组题目见表1,每个题目都考察了《Java并行程序设计》教材中的相关内容。由于在该次实训课程开设之初,《Java并行程序设计》教材并没有出版发行,我们通过ppt的方式向学生讲授相关内容,让学生了解多线程的相关知识。在成绩评定上,文献[8]对并行程序设计课程的成绩评定方法进行了研究,我们并没有采用量化的指标,由于这几个程序的代码行数都在100行以内,故采用代码书写和考察运行结果的方式进行评判。
3.2 在选修课程中的教学探索
Java并行程序设计课程已经作为专业必修课程列入河北科技大学物联网专业学生的课程教学大纲,为使学生更好地理解Java并行程序设计,该课程被安排在大三下学期或大四上学期开设。由于该专业学生招生较晚,本课程在目前阶段仅作为选修课面向具有Java基本知识的计算机相关专业开设,课程安排32学时。在实际教学中,按照教材内容,学时也可以安排在32~48学时之间,各个章节的学时安排和教学任务见表2。学生在课程学习中对该教材的知识掌握较快,能够理解教材中的相关知识点,通过学习相关例题并进行仿写,可以快速有效地书写一些并行程序。教学实践表明,该教材比较适合具有一定Java基础的学生进行Java高级程序设计的学习。
4 结 语
多核技术的兴起和不断发展给计算机软件提出了更高的要求,也给高校的教与学带来了新的挑战。《Java并行程序设计》教材为并行程序设计的教学方法和教学模式探索迈出了重要一步。作者会在今后的教学实践中继续探索和改进,并在教学过程中对教材的不足之处加以完善,以期完善教材,取得更好的教学效果。
教育期刊网 http://www.jyqkw.com
参考文献:
[1] Lea D.Concurrent programming in java [M]. Second edition. New Jersey: Addison Wesley, 1999: 1-313.
[2] Gonzalez J F.Java 7 concurrency cookbook[M]. Birmingham: Packt Publishing, 2012: 1-339.
[3] Subramaniam V. Programming concurrency on the JVM[M]. Frisco: The Pragmatic Bookshelf, 2011: 1-261.
[4] Gove D.Multicore application programming [M]. New Jersey: Addison Wesley, 2010: 1-419.
[5] 陈天洲. 多核程序设计[M]. 北京: 清华大学出版社, 2007: 1-283.
[6] 武汉大学多核架构与编程技术课程组. 多核架构和编程技术[M]. 武汉: 武汉大学出版社, 2010: 1-211.
[7] 博硕文化. Java多线程设计模式[M]. 北京: 中国铁道出版社, 2005: 1-493.
[8] 赵长海, 晏海华, 贾宝龙, 等. 并行程序设计课程学生作业的自动评判方法[J]. 计算机教育, 2012, (14): 73-77.
(编辑:杨?涛)