知识大全 基于角色模型的Java开发
Posted 模型
篇首语:聪明出于勤奋,天才在于积累。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 基于角色模型的Java开发相关的知识,希望对你有一定的参考价值。
基于角色模型的Java开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
对于软件开发人员而言 调试多线程应用程序中的非确定缺陷是最痛苦的工作 因此 像大多数人一样 我钟爱使用 Erlang 和 Scala 等函数语言进行并发编程
Scala 和 Erlang 都采用了角色模型来进行并发编程 没有采用线程概念 围绕角色模型的创新并不仅限于语言本身 角色模型也可供 Kilim 等基于 Java 的角色框架使用
Kilim 对角色模型的使用非常直观 稍后您将看到 该库使构建并发应用程序变得异常简单
多核挑战
在 年 Herb Sutter 编写了一篇现在仍然颇为著名的文章 The Free Lunch is Over: A Fundamental Turn Toward Concurrency in Sofare 在这篇文章中 他摒弃了一直误导着人们的观念 那就是摩尔定律将继续促进越来越高的 CPU 时钟速率
Sutter 预言了 免费午餐 的终结 通过越来越快的芯片来捎带提升软件应用程序的性能将不再可能 相反 他认为应用程序性能的显著提升将需要利用多核芯片架构来实现
事实证明他是对的 芯片制造商已经达到了一种硬性限制 芯片速率已稳定在 GHz 左右多年了 随着制造商越来越快地增加芯片上的核心数量 摩尔定律在多核领域继续得以满足
Sutter 还提到并发编程将使开发人员能够利用多核架构 但是 他补充道 相比如今的各种语言提供的编程模型 我们亟需一种更高级的并发编程模型
Java 等语言的基本编程模型是基于线程的 尽管多线程应用程序并不是很难编写 但正确 编写它们仍然面临许多挑战 并发编程的一个困难之处是利用线程来考虑并发性 如今已有许多并发模型 一种特别有趣并获得了 Java 社区认可的模型就是角色模型
角色模型
角色模型是一种不同的并发进程建模方式 与通过共享内存与锁交互的线程不同 角色模型利用了 角色 概念 使用邮箱来传递异步消息 在这里 邮箱 类似于实际生活中的邮箱 消息可以存储并供其他角色检索 以便处理 邮箱有效地将各个进程彼此分开 而不用共享内存中的变量
角色充当着独立且完全不同的实体 不会共享内存来进行通信 实际上 角色仅能通过邮箱通信 角色模型中没有锁和同步块 所以不会出现由它们引发的问题 比如死锁 严重的丢失更新问题 而且 角色能够并发工作 而不是采用某种顺序方式 因此 角色更加安全(不需要锁和同步) 角色模型本身能够处理协调问题 在本质上 角色模型使并发编程更加简单了
角色模型并不是一个新概念 它已经存在很长时间了 一些语言(比如 Erlang 和 Scala)的并发模型就是基于角色的 而不是基于线程 实际上 Erlang 在企业环境中的成功(Erlang 由 Ericsson 创建 在电信领域有着悠久的历史)无疑使角色模型变得更加流行 曝光率更高 而且这也使它成为了其他语言的一种可行的选择 Erlang 是角色模型更安全的并发编程方法的一个杰出示例
不幸的是 角色模型并没有植入到 Java 平台中 但我们可以通过各种方式使用它 JVM 对替代语言的开放性意味着您可以通过 Java 平台语言(比如 Scala 或 Groovy)来利用角色(参见 参考资料 了解 Groovy 的角色库 GPars) 另外 您可以试用一种支持角色模型且基于 Java 的库 比如 Kilim
Kilim 中的角色
Kilim 是一个使用 Java 编写的库 融入了角色模型的概念 在 Kilim 中 角色 是使用 Kilim 的 Task 类型来表示的 Task 是轻量型的线程 它们通过 Kilim 的 Mailbox 类型与其他 Task 通信
Mailbox 可以接受任何类型的 消息 例如 Mailbox 类型接受 java lang Object Task 可以发送 String 消息或者甚至自定义的消息类型 这完全取决于您自己
在 Kilim 中 所有实体都通过方法签名捆绑在一起 如果您需要同时执行几项操作 可以在一个方法中指定该行为 扩大该方法的签名以抛出 Pausable 因此 在 Kilim 中创建并发类就像在 Java 中实现 Runnable 或扩展 Thread 一样简单 只是使用 Runnable 或 Thread 的附加实体(比如关键字 synchronized)更少了
最后 Kilim 的魔力是由一个称为 weaver 的后期进程来实现的 该进程转换类的字节码 包含 Pausable throws 字句的方法在运行时由一个调度程序处理 该调度程序包含在 Kilim 库中 该调度程序处理有限数量的内核线程 可以利用此工具来处理更多的轻量型线程 这可以最大限度地提高上下文切换和启动的速度 每个线程的堆栈都是自动管理的
在本质上 Kilim 使创建并发进程变得轻松而简单 只需从 Kilim 的 Task 类型进行扩展并实现 execute 方法 编译新创建的支持并发性的类之后 对其运行 Kilim 的 weaver 您会实现显著的性能提升!
cha138/Article/program/Java/hx/201311/26649相关参考
基于RSA模型转换框架的开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!内容简介 模型转换框架
Eclipse插件开发中的Java项目模型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Jav
知识大全 Java中实现基于Aspectwerkz的AOP开发
Java中实现基于Aspectwerkz的AOP开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基于Java并且开放源代码的可扩展开发平台 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ecl
多线程开发的捷径:构建Java并发模型框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Jav
知识大全 想学习下手机软体开发 是基于安卓系统的 应该怎样做
想学习下手机软体开发是基于安卓系统的应该怎样做要学好多~学C++,JAVA,及安卓基础~等想找安卓手机软体开发工作应该学什么这个你就去学程式设计和Java,软体开发你可以在应用宝上面下载这个软体开的教
java高级编程:基于JNDI的应用开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 基于JN
基于JSF技术的WEB应用开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 开发基于Java技
基于Geodatabase数据模型的版本机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一版
J2ME手机开发:java虚拟机是什么 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!就是许多基于j