网站大量收购独家精品文档,联系QQ:2885784924

识别并发问题的工具与方法.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
识别并发问题的工具与方法

识别并发问题的工具和方法 本文来自MSDN杂志为了满足用户对计算能力日益增长的需求,硬件行业正在逐步向多核处理器系统发展。与通过具有较大时钟速度的较快处理器提高应用程序性能不同,要改进多核系统的性能,只能通过编写高效的并行程序才能实现。并行处理形式在软件行业问世已久。但是,若要创建利用并行硬件功能的主流软件应用程序,需要对面向顺序应用程序的实践进行重大更改。测试并行应用程序相当复杂。例如,由于并行应用程序显示的行为难以确定,很难检测到并发错误。即使检测到了这些错误,也很难统一重现它们。而且,修复某一缺陷后,很难确保已真正修正了缺陷,而不仅是在表面上掩藏起了问题而已。此外,并行化还可能会引发新的性能瓶颈,而这些也必须加以识别。在本文中,我们将介绍并行程序的测试技术,并提供六种可用于查找潜在严重缺陷的工具。首先,我们将介绍下面几类并发错误:争用条件、不正确的互斥和内存重新排序。争用条件、死锁等内容当多线程程序中有两个或多个执行线程尝试访问同一共享数据,并且其中至少有一个访问为写入时,就会发生争用现象。有害的争用条件会带来不可预测性,且通常难以检测到。争用条件的影响可能在很长一段时间后才会显现,或只有在完全不同的程序部分中才能察觉到。而且,它们也相当难以重现。使用同步技术合理对线程之间的操作进行排序,可以避免出现争用。识别测试数据和报告指标对于并行应用程序,测试数据通过识别方案的可伸缩性方式进行定义。事实上,应用程序展示的可伸缩性取决于所使用算法的可并行性。特定算法可以针对特定的问题域(例如,在非统一分发中有哪些信誉好的足球投注网站)产生超线性加速效果。其他算法由于可并行性有限,可能不会勉强产生并行加速效果,导致总运行时速度的增加与CPU数量不成比例。此外,还有些算法(如排序)不会在整个数据集大小范围内进行线性缩放。因此,您必须了解应用程序的性能针对下列类别如何缩放:线程数或CPU核数通常,用户希望并行应用程序可以随CPU或线程数的增加进行线性缩放。数据集大小通常,用户希望并行应用程序的性能不会随输入数据集的大小增加而降低。执行工作负荷在执行过程中,线程操作的工作负荷并不是一成不变的。工作负荷可能增加或降低、随机变化或呈正态分布。在执行过程中,工作负荷的变化可能会影响应用程序的性能特征。在执行过程中,工作负荷的变化类型包括:恒定工作负荷、增加工作负荷、降低工作负荷、随机工作负荷和正态分布的工作负荷。报告时最常使用执行时间指标。其他报告指标包括与顺序应用程序相比的加速效果,以及针对可伸缩性类别的加速效果。定义报告指标及其测量方式非常重要。可从下列一些有价值的问题开始着手:必须报告哪些值?如何对它们进行报告?用于测量的工具是否会影响性能?此外,如果可以,请分段进行测量,以便了解系统各子部件的性能。有时,争用可能是刻意安排的,可安全进行。例如,假设有一个名为done的全局标志,对于此标志,只有一个写入器,但有多个读取器。写入器线程设置此标志是为了告知所有线程安全终止。所有读取器线程可能使用while(!done)循环运行,重复读取此标志。一旦某个线程发现设置了done标志,便会退出其while循环。在大多数情况下,这属于良性争用。对于检测争用条件可用的工具,稍后我们将在本文中进行讨论。但是,此类工具可能会对实际上属于良性的争用情况发出警告,这样的错误报告称为误报。当两个或多个线程互相等待,形成一个循环并阻止所有线程继续进行时,就会发生死锁。在尝试避免争用条件时,编程人员可能会引发死锁。例如,对同步基元的不正确使用(如按错误顺序获取锁定)可能会导致两个或多个线程互相等待。在不使用锁定构造的情况下,也可能会发生死锁;任意类型的循环等待都可能会导致死锁。请查看以下示例了解可能会出现死锁的情况。线程1执行下列语句:Acquire Lock A;Acquire Lock B;Release Lock B;Release Lock A;Thread 2proceeds like so:Acquire Lock B;Acquire Lock A;//if thread 1has already acquired lock//A and waiting to acquire lock B,then//this is adeadlockRelease Lock A;Release Lock B;在多线程应用程序中,耗尽(Starvation)会无限延迟或永久锁定一个或多个可运行的线程。即使未计划要运行的线程没有被锁定或等待其他线程,也将被认为处于耗尽状态。耗尽通常是由计划规则和策略造成的。例如,如果同时安排一个高优先级、无锁定、持续执行的线程与一个低优先级的线程,那么在单核CPU上,优先级较低的线程将永远没有机会运行。为了帮助避免出现这种情况,Windowsreg;计划程序时常

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档