使用GPars解决常见并发问题 - 编程入门网
使用GPars解决常见并发问题时间:2012-03-17 IBM Alex Miller了解 Groovy 的并发库如何利用流行的并发模型并使其在 Java 平台上可供访问 在并发性时代,带有 4、6 和 16 个处理器核心的芯片变得很普遍,而且在不久的将来,我们会看到带有上百甚至上千个核心的芯片。这种处理能力蕴含着巨大的可能性,但对于软件开发人员来说,它也带来了挑战。最大限度地利用这些闪耀新核的需求推动了对并发性、状态管理和为两者构建的编程语言的关注热潮。 Groovy、Scala 和 Clojure 等 JVM 语言满足了这些需求。这三种都是较新的语言,运行于高度优化的 JVM 之上,可以使用 Java 1.5 中新增的强大的 Java 并发库。尽管每种语言基于其原理采用不同的方法,不过它们都积极支持并发编程。 在本文中,我们将使用 GPars,一种基于 Groovy 的并发库,来检查模型以便解决并发性问题,比如后台处理、并行处理、状态管理和线程协调。 为何选择 Groovy ?为何选择 GPars ? Groovy 是运行于 JVM 之上的一种动态语言。基于 Java 语言,Groovy 移除了 Java 代码中的大量正式语法,并添加了来自其他编程语言的有用特性。Groovy 的强大特性之一是它允许编程人员轻松创建基于 Groovy 的 DSL。 GPars 或 Groovy Parallel Systems 是一种 Groovy 并发库,捕捉并发性和协调模型作为 DSL。GPars 的构思源自其他语言的一些最受欢迎的并发性和协调模型,包括: 来自 Java 语言的 executors 和 fork/join 来自 Erlang 和 Scala 的 actors 来自 Clojure 的 agents 来自 Oz 的数据流变量 Groovy 和 GPars 的结合成为展示各种并发性方法的理想之选。甚至不熟悉 Groovy 的 Java 开发人员也能轻松关注相关讨论,因为 Groovy 的语法以 Java 语言为基础。本文中的示例基于 Groovy 1.7 和 GPars 0.10。 后台和并行处理 一个常见的性能难题是需要等待 I/O。I/O 可能涉及到从一个磁盘、一个 web 服务或甚至是一名用户读取数据。当一个线程在等待 I/O 的过程中被阻止时,将等待中的线程与原始执行线程分离开来将会很有用,这将使它能继续工作。由于这种等待是在后台发生的,所以我们称这种技术为 后台处理。 例如,假设我们需要这样一个程序,即调用 Twitter API 来找到针对若干 JVM 语言的最新 tweets 并将它们打印出来。Groovy 能够使用 Java 库 twitter4j 很容易就编写出这样的程序,如清单 1 所示: 清单 1. 串行读取 tweets (langTweets.groovy)
使用GPars解决常见并发问题(2)时间:2012-03-17 IBM Alex Miller在 清单 1中,我首先使用了 Groovy Grape来捕获 twitter4j 库依赖性。然后定义了一个 recentTweets方法来接受查询字符串并执行该查询,返回一列格式化为字符串的 tweets。最后,我遍历了标记列表中的每个标记,获取了 tweets 并将它们打印出来。由于未使用线程,该代码串行执行每个搜索,如图 1 所示: 图 1. 串行读取 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |