Java开发2.0: Kilim简介

一种用于实现 Java 并发性的角色框架

简介:并发编程是 Java 开发 2.0 的核心概念,但可能不是基于线程的并发性。Andrew Glover 解释为什么在多核系统中进行并发编程时,角色优于线程。他然后介绍 Kilim —— 一种基于角 色的消息传递框架,结合了并发编程和分布式编程。

对于软件开发人员而言,调试多线程应用程序中的非确定缺陷是最痛苦的工作。因此,像大多数人一 样,我钟爱使用 Erlang 和 Scala 等函数语言进行并发编程。

Scala 和 Erlang 都采用了角色模型来进行并发编程,没有采用线程概念。围绕角色模型的创新并不 仅限于语言本身,角色模型也可供 Kilim 等基于 Java 的角色框架使用。

Kilim 对角色模型的使用非常直观,稍后您将看到,该库使构建并发应用程序变得异常简单。

多核挑战

在 2005 年,Herb Sutter 编写了一篇现在仍然颇为著名的文章 “The Free Lunch is Over: A Fundamental Turn Toward Concurrency in Software”。在这篇文章中,他摒弃了一直误导着人们的观 念,那就是摩尔定律将继续促进越来越高的 CPU 时钟速率。

Sutter 预言了 “免费午餐” 的终结,通过越来越快的芯片来捎带提升软件应用程序的性能将不再可 能。相反,他认为应用程序性能的显著提升将需要利用多核芯片架构来实现。

事实证明他是对的。芯片制造商已经达到了一种硬性限制,芯片速率已稳定在 3.5 GHz 左右多年了。 随着制造商越来越快地增加芯片上的核心数量,摩尔定律在多核领域继续得以满足。

Sutter 还提到并发编程将使开发人员能够利用多核架构。但是,他补充道,“相比如今的各种语言提 供的编程模型,我们亟需一种更高级的并发编程模型。”

Java 等语言的基本编程模型是基于线程的。尽管多线程应用程序并不是很难编写,但正确 编写它们 仍然面临许多挑战。并发编程的一个困难之处是利用线程来考虑并发性。如今已有许多并发模型,一种特 别有趣并获得了 Java 社区认可的模型就是角色模型。

角色模型

角色模型是一种不同的并发进程建模方式。与通过共享内存与锁交互的线程不同,角色模型利用了 “ 角色” 概念,使用邮箱来传递异步消息。在这里,邮箱 类似于实际生活中的邮箱,消息可以存储并供其 他角色检索,以便处理。邮箱有效地将各个进程彼此分开,而不用共享内存中的变量。

角色充当着独立且完全不同的实体,不会共享内存来进行通信。实际上,角色仅能通过邮箱通信。角 色模型中没有锁和同步块,所以不会出现由它们引发的问题,比如死锁、严重的丢失更新问题。而且,角 色能够并发工作,而不是采用某种顺序方式。因此,角色更加安全(不需要锁和同步),角色模型本身能 够处理协调问题。在本质上,角色模型使并发编程更加简单了。

角色模型并不是一个新概念,它已经存在很长时间了。一些语言(比如 Erlang 和 Scala)的并发模 型就是基于角色的,而不是基于线程。实际上,Erlang 在企业环境中的成功(Erlang 由 Ericsson 创建 ,在电信领域有着悠久的历史)无疑使角色模型变得更加流行,曝光率更高,而且这也使它成为了其他语 言的一种可行的选择。Erlang 是角色模型更安全的并发编程方法的一个杰出示例。

不幸的是,角色模型并没有植入到 Java 平台中,但我们可以通过各种方式使用它。JVM 对替代语言 的开放性意味着您可以通过 Java 平台语言(比如 Scala 或 Groovy)来利用角色。另外,您可以试用一 种支持角色模型且基于 Java 的库,比如 Kilim。

时间: 2024-10-01 18:19:29

Java开发2.0: Kilim简介的相关文章

Java开发2.0

Java开发2.0 - 使用Amazon SimpleDB进行云存储,第1部分 - 开始使用SimpleDB和Amazon SDK 在整个系列中,我和您了分享大量非关系型数据存储,统称为 NoSQL.在一篇最近的文章中,我向您展示了一个面向文档的数据存储 (CouchDB)与面向模式的关系型数据库的巨大区别.此外,CouchDB 的整个 API 是 REST 式的,且支持不同的查询方式:JavaScript 中定义 的 MapReduce 功能.很显然,这是对传统 JDBC 的一个很大突破. 我

Java开发2.0: NoSQL

简介:在 Web 2.0 时代,NoSQL 数据存储(比如 Bigtable 和 CouchDB)从 边缘进入主流,因为它们能够解决伸缩性问题,而且能够大规模解决该问题. Google 和 Facebook 只是已经开始使用 NoSQL 数据存储的两家知名公司,我们 仍然处于使用 NoSQL 数据存储的早期阶段.无模式数据存储与传统的关系数据库 存在根本区别,但是利用它们比您想象的要简单得多,尤其是当您从一个域模型 而不是一个关系模型开始时. 关系数据库已经统治数据存储 30 多年了,但是无模式

Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分

Java开发2.0: 使用Amazon SimpleDB实现云存储,第2部分:使用SimpleJPA实现简单对象持久化 使用诸如 Grails 的关系框架对几乎所有类型的应用进行域对象建模是很容易的,但是使用 SimpleDB 又怎么样呢?在 Andrew Glover 的介绍 SimpleDB 的系列文章的第 2 部分,他向您介绍了如何使用 SimpleJPA,而非 Amazon SDK,在 SimpleDB 的云存储中实现对象持久化.除了使您能够使用简单 Java 对象进行域建模(通过 JP

Java开发2.0: 针对Google App Engine的Gaelyk

本 系列 将探讨对于如今及未来的 Java 开发的发展起决定作用的各 个技术方面.Java 开发 2.0 的前提开发速度将越来越快,这要归功于开源领域 中的创新以及硬件的商业化.您可以租借其他人的硬件平台来托管自己的应用程 序(主要使用开源库.工具和框架来装配),成本只包括获取和维护自己的基础 设施. 本系列的第一期 "使用 Google App Engine" 讨论 了免费租借 Google 的基础设施来托管您的 Java 应用程序(不过会牺牲少许灵 活性)的概念.在后续文章中,您了

Java开发2.0: 使用方便的EC2

正如您从 "Java 开发 2.0:您也可以租用 EC2" 中了解到的一样, Amazon 的 Elastic Compute Cloud (EC2) 是一个用于托管(Linux.OpenSolaris 甚至 Windows)虚拟机的通用基础设施服务,您可以在这些虚拟机上运行任何程序 .假如您创建或借用了一个虚拟机,也可以将其称为 Amazon Machine Image (AMI) 或实 例,那么您可以运行任何 Java 应用程序 - 包括使用 Hibernate 和 Spring

Java 开发 2.0: 使用 Google App Engine--利用 Groovy、Eclipse 和 JDO 进行快速 Web 应用程序开发

开源解决方案和外来基础设施改变了 Java 开发的特征,使您能够以更低的成本.更快的速度交付更好的软件.Andrew Glover 发明了 Java 开发 2.0 这一术语,使用它概括了所有这些现象体现出来的强大力量.他推出了一个全新的系列,主要介绍有关 Java 开发 2.0 的工具和技术.本系列的第一期文章将宣布 Java 开发 2.0 的到来,并解释了如何使用 Google 的 App Engine for Java 迅速实现这些概念. Java 世界如同一个丰富的生态系统,涉及开发人员.

Java 开发 2.0: 使用方便的 EC2--快速创建 CRUD Web 应用程序并在 Amazon Elastic Compute Cloud 上运行它

提供一个 EC2 实例来托管 Java Web 应用程序将非常简单.在这一期 Java 开发 2.0 中,我们将快速构建一个利用 Groovy.Spring 和 Hibernate(通过 Grails 框架)的 Web 应用程序并将其部署到一个 EC2 实例. 正如您从 "Java 开发 2.0:您也可以租用 EC2" 中了解到的一样,Amazon 的 Elastic Compute Cloud (EC2) 是一个用于托管(Linux®.OpenSolaris 甚至 Windows®)

Java 开发 2.0: 通过 CouchDB 和 Groovy 的 RESTClient 实现 REST

在过去数年中,开源世界的创新发展将 Java 开发人员的生产力提升了一个层次.免费的工具.框架和解决方案弥补了曾经一度匮乏的空缺.其中,被一些人认为是 Web 2.0 数据库的 Apache CouchDB 是非常有潜力的.全面掌握 CouchDB 并不困难,使用它就像使用 Web 浏览器一样简单.本期 Java 开发 2.0 专栏将介绍 CouchDB 并向您展示如何发挥 Groovy 的 RESTClient 的强大功能. 目前为止,本专栏 系列 已经探究了 Google 和 Amazon

Java 开发 2.0: 您也可以租用 EC2--以灵活且低成本的方式创建高效、可伸缩的租借的基础设施

在本期 Java 开发 2.0 中,Andrew Glover 介绍如何针对 Amazon Elastic Compute Cloud (EC2) 进行开发和部署.了解 EC2 与 Google App Engine 的差异,以及如何使用 Eclipse 插件和简洁的 Groovy 语言在 EC2 上快速地建立和运行简单的 Web 应用程序. 您可能听说过 Standish Chaos Report,这份每年一次的报告研究成功和失败的 IT 项目.这份报告常常包含大量坏消息.(如果都是好消息,它