zoukankan      html  css  js  c++  java
  • CLR_via_C#.3rd 翻译[25.8 使用线程的理由]

    25.8 Reasons to Use Threads 使用线程的理由

     

    使用线程是出于三方面的理由:

     

    ● 可以使用线程将代码同其他代码隔离。这将提高你的应用程序的可靠性。事实上,这也是为什么Windows在OS引入线程概念的原因。Windows之所以需要线程来获得可靠性,是因为你的应用程序对于操作系统来说是第三方组件,而Microsoft不会在你发布应用程序之前对这些代码的质量进行验证。但在发布前,你应该自行测试自己的所有应用程序。另外,由于你已经测试了完整的应用程序,所以应该知道它们是健壮和高质量的。由于你的应用程序对健壮性的要求没有操作系统对健壮性的要求高,所以你的应用程序不应出于维持健壮性的目的而使用太多的线程。如果你的应用程序支持加载由其他厂商生成的组件,那么应用程序对健壮性的要求就会提高,使用将线程有助于满足这个需求。

     

    ● 可以使用线程来简化编码。有的时候,如果通过一个任务自己的线程来执行该任务,编码会变得更简单。但是,如果这样做,肯定要使用额外的资源,代码也不是十分经济。现在,即使要付出一些资源作为代价,我也宁愿选择更简单的编码过程,否则干脆坚持一直用机器语言写程序好了,完全没有必要成为一名C#开发人员。但有的时候,一些人在使用线程时,觉得自己选择了一种更容易的编程方式,但实际上,他们是将事情(和它们的代码)大大地复杂化了。通常,在你引入线程时,引入的是要相互协作的代码,它们可能要求线程同步构造知道另一个线程在什么时候终止。一旦开始涉及协作,就要使用更多的资源,同时会使代码变得更复杂。所以,在开始使用线程之前,务必确定线程真的能帮到你。

     

    ● 可以用线程来实现并发执行。只有知道你自己的应用程序要在多CPU机器上运行,那么让多个任务同时运行,就能提高性能。现在,安装了多个CPU(或者一个多核CPU)的机器相当普遍,所以设计应用程序来使用多个内核是有意义的,这将是第26章和第27章的主题。

     

    现在我想和你分享一下我的看法。每台计算机其实都有一个无比强大的资源:就是CPU。如果一个人在计算机上花钱,那么这台计算机应该24小时工作。换句话来说,我认为计算机中的所有CPU的使用率都应该一直保持在100%。但是有两个情况例外:第一种情况是,当你的计算机电量不足的时候;第二种情况是,数据中心更希望1050% 使用率的计算机也不要5100% 使用率的计算机,那样散热太多。

     

    如果你同意我的看法,那么下一步是决定应该让CPU 适宜做什么。在我告诉你我的想法之前,我先说点别的。以前,开发人员和用户总是觉得计算机不够强大。因此,我们开发人员就不会让代码执行,除非用户通过UI元素给开发人员权限,允许应用程序开始消耗CPU资源。

     

    现在不同了,计算机有着非常强大的计算能力,而且在不久的将来计算能力将变得更加强大。在这章的前面部分,我已经向你展示了如何通过“任务管理器”查看的我的CPU使用率。如果我的计算机用的是四核CPU,而不是现在双核,那么“任务管理器”会在更多的时间里报告0%的使用率。当80核的处理器出来的时候,我们的计算机会看起来很空闲。对于计算机的购买者来说,这感觉就像花了更多的的钱去买了更强大的CPU,但计算机做的工作变得越来越少!

     

    这也是硬件厂商销售困难的原因:软件没有充分的利用硬件,用户没有从额外CPU中获益。我认为,现在的计算能力有很大的富余,而且富余的程度还会越来越大,所以开发者应该大胆的消费它。是到改变思路的时候了——过去,除非最终用户确定想要获得一个计算结果,否则我们根本不敢执行这个计算。但现在有了额外的计算能力,所以开发人员完全可以变得更大胆。

     

    请看下面这个例子:当你在VS的编辑器中停止编辑的时候,VS会自动运行编译器并编译你的代码。这提高了开发者的生产效率,因为它们能在输入的时候看到源代码的警告和错误,并可立即修正问题。实际上,传统的“编辑—生成—调试”模式会逐渐变成“编辑调试”模式,因为生成(编译)代码一直都在发生。作为用户,你是注意不到这一点的,因为还有大量CPU能力可供使用,而且编译器的频繁运行一般不会影响到你正在做的其他事情。事实上,我希望在VS未来的版本中,将“生成”菜单完全拿掉,因为这个过程变得完全自动化。这不仅使应用程序的UI变得更简单,而且应用程序能自动向用户提供“答案”,使他们的开发效率变得更高。

     

    如果我们移除像菜单项这样的UI元素后,计算机对用户来说会变得更加简单。他们面对的选项变得更少,需要识别和理解的概念也变得更少。是多核革命使我们能移除这些UI元素,进而使软件变得更简单,使我的奶奶有一天也能舒舒服服地使用计算机。对于开发人员,移除UI元素之后,所需的测试次数一般会变得更少。另外,向用户提供更少的选项,可以简化编码。如果需要对UI元素和文档进行本地化(就像Microsoft那样),那么移除UI元素意味着需要写的文档变少了,也不需要再对减少的文档进行本地化。这一切能为你的公司节省大量时间和金钱。

     

    下面是一些主动消费CPU能力的例子:文档拼写检查和语法检查、电子表格重新计算、磁盘文件索引以提高搜索速度以及硬盘碎片整理以提升I/O性能。

     

    我想生活在一个精简的UI世界里。我想有更多的屏幕空间来显示我实际处理的数据。应用程序应主动提供更多的信息来帮助我快速和高效地完成工作,而不是每次都由我自己告诉应用程序去获取信息。过去这几年,硬件在那里静静地等待着软件开发人员去发掘它们的潜力。现在,软件是时候开始创造性地使用硬件了!

  • 相关阅读:
    viewpager中彻底性动态添加、删除Fragment
    Android仿微信界面--使用Fragment实现(慕课网笔记)
    Android progressBar 自定义
    Android 使用PopupWindow实现弹出菜单
    android手机上安装apk时出现解析包错误的一个解决办法
    设计模式 单例模式
    android 自定义AlertDialog
    android listview异步加载图片
    又优化了一下 Android ListView 异步加载图片
    Hadoop概念学习系列之谈谈RPC(三十三)
  • 原文地址:https://www.cnblogs.com/TivonStone/p/1823643.html
Copyright © 2011-2022 走看看