使用Java构建高伸缩性组件
2009-12-21 00:00:00 来源:WEB开发网核心提示:随着多核处理器成为主流,应用开发人员对于如何编写高伸缩性的应用以利用底层硬件的优势这个问题面临巨大的压力,使用Java构建高伸缩性组件,此外,遗留系统不得不移植到新的架构上,从生产者到消费者的数据发送需要通信,相比尴尬式并行应用,保证应用伸缩性的一种有效方式是使用高伸缩性组件构建应用,举例来说
随着多核处理器成为主流,应用开发人员对于如何编写高伸缩性的应用以利用底层硬件的优势这个问题面临巨大的压力。此外,遗留系统不得不移植到新的架构上。保证应用伸缩性的一种有效方式是使用高伸缩性组件构建应用。举例来说,在各种应用中,java.util.concurrent.ConcurrentHashMap可以替代同步的HashTable,使应用伸缩性更好。因此,向应用直接提供一套高伸缩性构造块以引入并行是非常有用的。
我们创建了一套高伸缩性并发Java组件作为Amin库项目的一部分。在本文中,我们将介绍一些创建该开源库的想法。
概述
作为软件工程师,我们不得不并行我们的应用使它们在多核机器上很好的伸缩。一种并行方式是把它们分成若干子任务,其中每一个子任务与应用的其他子任务通信和同步。这通常被称为基于任务的并发。我们可以基于子任务的通信模式将应用分类。
尴尬式并行——应用的子任务从不或者很少与其他子任务通信。通常情况下,每一个任务只处理自己的私有数据。一些例子包括:
蒙特卡洛模拟程序
快速排序程序,使用fork/join模式很容易实现并发。当我们处理尴尬式并行应用时容易得到很好的伸缩性。
粗粒度和细粒度式并行——这些应用的子任务需要互相通信。根据子任务之间的通信频率可以把程序分为粗粒度和细粒度并行。一个例子是生产者/消费者问题。生产者产生驱动消费者的数据。从生产者到消费者的数据发送需要通信。相比尴尬式并行应用,处理子任务频繁交互的应用较难得到良好的伸缩性。
更多精彩
赞助商链接