并发编程模型-编程开发技术

并发编程模型-编程开发技术

ID:30833880

大小:340.93 KB

页数:10页

时间:2019-01-03

并发编程模型-编程开发技术_第1页
并发编程模型-编程开发技术_第2页
并发编程模型-编程开发技术_第3页
并发编程模型-编程开发技术_第4页
并发编程模型-编程开发技术_第5页
资源描述:

《并发编程模型-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、并发编程模型-编程开发技术并发编程模型译文出处:林威建[weakielin@gmail.com]原文出处:JakobJenkov并发系统口J以采用多种并发编程模型來实现。并发模型指定了系统中的线程如何通过协作來完成分配给它们的作业。不同的并发模型采用不同的方式拆分作业,同时线程间的I■办作和交互方式也不相同。这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的儿种并发模型。并发模型与分布式系统之间的相似性本文所描述的并发模型类似于分布式系统中使用的很多体系结构。在并发系统中线程Z间可以相互通信。在分布式系统屮进程Z间也可以相互通信(进程冇可能在不同的机器中)。线程和进程

2、之间具有很多相似的特性。这也就是为什么很多并发模型通常类似于各种分布式系统架构。当然,分布式系统在处理网络失效、远程主机或进程宕掉等方面也面临着额外的挑战。但是运行在巨型服务器上的并发系统也可能遇到类似的问题,比如一块CPU失效、一块网卡失效或一个磁盘损坏等情况。虽然出现失效的概率可能很低,但是在理论上仍然有可能发生。由于并发模型类似于分布式系统架构,因此它们通常可以互相借鉴思想。例如,为工作者们(线程)分配作业的模型一般与分布式系统中的负载均衡系统比较相似。同样,它们在日志记录、失效转移、幕等性等错误处理技术上也具有相似性。【注:幕等性,一个幕等操作的特点是其任意多次执行所产生的影响均与一

3、次执行的影响相同】并行工作者第一种并发模型就是我所说的并行工作者模型。传入的作业会被分配到不同的工作者上。下图展示了并行工作者模型:在并行工作者模型中,委派者(Dele聊tot)将传入的作业分配给不同的工作者。每个工作者完成整个任务。工作者们并行运作在不同的线程上,茯至可能在不同的CPU上。如果在某个汽车厂里实现了并行工作者模型,每台车都会由一个工人来生产。工人们将拿到汽车的生产规格,并且从头到尾负责所有工作。在J3V3应用系统中,并行工作者模型是最常见的并发模型(即使止在转变)。java.util,concurrent包屮的许多并发实用工具都是设计用丁•这个模型的。你也可以在Java企业级

4、(J2EE)应用服务器的设计中看到这个模型的踪迹。并行工作者模型的优点并行工作者模式的优点是,它很容易理解。你只需添加更多的工作者來提高系统的并行度。例如,如果你正在做一个网络爬虫,可以试试使用不同数量的工作者抓取到一定数量的页面,然后看看多少数量的工作者消耗的时间最短(意味着性能最高)。由于网络爬虫是一个10密集型工作,最终结果很有可能是你电脑小的每个CPU或核心分配了几个线程。每个CPU若只分配一个线程可能有点少,因为在等待数据下载的过程中CPU将会空闲大量时间。并行工作者模型的缺点并行工作者模型虽然看起来简单,却隐藏着一些缺点。接下来的章节中我会分析一些最明显的弱点。共享状态可能会很复

5、杂在实际应用中,并行工作者模型可能比前面所描述的情况耍复杂得多。共享的工作者经常需要访问一些共享数据,无论是内存屮的或者共享的数据库屮的。下图展示了并行工作者模型是如何变得复杂的:有些共享状态是在像作业队列这样的通信机制卜•。但也有一些共享状态是业务数据,数据缓存,数据库连接池等。一旦共享状态潜入到并行工作者模型中,将会使情况变得复杂起來。线程需要以某种方式存取共享数据,以确保某个线程的修改能够对其他线程可见(数据修改需要同步到主存中,不仅仅将数据保存在执行这个线程的CPU的缓存中)。线程需要避免竟态,死锁以及很多其他共享状态的并发性问题。此外,在等待访问共享数据结构时,线程Z间的互相等待将

6、会丢失部分并行性。许多并发数据结构是阻塞的,意味着在任何一个时间只有一个或者很少的线程能够访问。这样会导致在这些共享数据结构上出现竞争状态。在执行需要访问共享数据结构部分的代码时,高竞争基本上会导致执行时出现一定程度的串行化。现在的非阻塞并发算法也许可以降低竞争并提升性能,但是非阻塞算法的实现比较困难。可持久化的数据结构是另一种选择。在修改的时候,可持久化的数据结构总是保护它的前一个版木不受影响。因此,如果多个线程指向同一个可持久化的数据结构,并且其中一个线程进行了修改,进行修改的线程会获得一个指向新结构的引用。所有其他线程保持对旧结构的引用,旧结构没有被修改并且因此保证一致性。Scala编

7、程包含儿个持久化数据结构。【注:这里的可持久化数据结构不是指持久化存储,而是一种数据结构,比如Java中的String类,以及CopyOnWriteArrayList类,具体可参考】虽然可持久化的数据结构在解决共享数据结构的并发修改时显得很优雅,但是可持久化的数据结构的表现往往不尽人意。比如说,一个可持久化的链表需要在头部插入一个新的节点,并且返冋指向这个新加入的节点的一个引用(这个节点指向了链表的剩余部分)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。