• java多线程-3-使用多线程的时机


          许多人对于计算机的运行原理不了解,甚至根本不了解。

          不幸的是,此类中的一部分人也参与了计算机的编码工作。可想而知,编写的效率和结果。听者伤心,闻者流泪。

          此类同学的常见的误解:

    •       并发就能加快任务完成  
    •       任务的总完成时间大约=单线程理论完成时间/线程个数

         实际情况,和误解不同。

          为何,主要因为以下几个因素:

          1.计算机的配置

          2.管理成本

          3.任务性质

         

          配置

          每台计算器的配置都是有限的。譬如cpu可能是intel i9,或者i7,差的可能是i5,甚至更糟糕;而磁盘可能是老式的5400转的机械硬盘,或者是更快的

    SSD。

         不同的配置,决定了计算机每秒所能完成的任务数(计算次数),如果超过了配置,那么它也是无法完成的。

         譬如有cpu,一秒只能执行500个计算。有1000万个运算的任务,以10000个一组,分为1000组(线程),在一秒内就可以完成吗?显然不是。

         冷月轮流一秒可以最多发射12个暗器,如果給她100个,她也是无法在一秒内发射完成。

         管理成本

         操作系统创建线程,是需要耗费资源:存储空间。这些空间用于存储线程/进程信息。另外调度本身也是需要耗费时间的。

         管理所耗费的时间,无形中也会减少可以实际用于计算的时间。

         当然,在cpu足够强大,且线程不是很多的时候,可能不是一个大问题。

         

         任务性质

         不是什么任务都适合并发执行的。

         譬如一个任务主要进行I/O,那么力图通过不合理的并发来条效率是不可行。

         又譬如力图从一个很慢的网站快速下载资源是很困难的,无论你增加了多少线程。

         这就是为什么冷月轮流只做一种生意的原因,因为她只擅长做那种生意。

        

          所以,在决定是否使用多任务之前,一定要仔细考虑该任务是否允许在特定的环境下使用。

          如果不允许,还是老老实实地单发,或者把并发度设置为1。

         

  • 相关阅读:
    今天 弄了一下ajax 里面的
    重修理解了一下js 控制treeview 菜单的子级和父级的关系 理解的还不够全 因为 html不够全 但是加个注释吧
    xml .net 用法
    这几天在做把数据库里的数据 导出 并且压缩 学到了一些东西
    今天实现了用按钮后台动态实现了 table里面内容的显示和隐藏 在实现过程中了解了updatepanel的简单的用法
    今天第一次参加了软件产品的讨论会议 收获
    收藏个debug的文章
    Animate.css
    flash遨游缓存问题
    URL短地址压缩算法 微博短地址原理解析 (Java实现)
  • 原文地址:https://www.cnblogs.com/lzfhope/p/12992722.html
Copyright © 2020-2023  润新知