<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

    多线程的代价

    原文链接:http://tutorials.jenkov.com/java-concurrency/costs.html

    作者:Jakob Jenkov? ? ?翻译:古圣昌 ? ? ? ?校对:欧振聪

    从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该明确在使用多线程时能多来的好处比所付出的代价大的时候,才使用多线程。如果存在疑问,应该尝试测量一下应用程序的性能和响应能力,而不只是猜测。

    设计更复杂

    虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。

    上下文切换的开销

    当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。

    上下文切换并不廉价。如果没有必要,应该减少上下文切换的发生。

    你可以通过维基百科阅读更多的关于上下文切换相关的内容:

    http://en.wikipedia.org/wiki/Context_switch

    增加资源消耗

    线程在运行的时候需要从计算机里面得到一些资源。除了CPU,线程还需要一些内存来维持它本地的堆栈。它也需要占用操作系统中一些资源来管理线程。我们可以尝试编写一个程序,让它创建100个线程,这些线程什么事情都不做,只是在等待,然后看看这个程序在运行的时候占用了多少内存。

    原创文章,转载请注明: 转载自并发编程网 – www.gofansmi6.com本文链接地址: 多线程的代价


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (9)
    1. 之前有过测试,如果在本地同时创建500个线程,运行后,eclipse会直接挂掉。

    2. vavio99 :
      可以试试jvm的-Xss参数

      设大了太占内存了。

    3. 虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。

      所以说,虽然现在是在学习多线程编程,但是能不用多线程还是少用,除非真的有显著效果,否则光调试以及处理莫名其妙的问题就够受的了

      • E网情深
      • 2013/10/21 5:59下午

      让它创建100个线程,这些线程什么事情都不做,只是在等待

      这里等待指的什么意思?不是sleep吧,还是这样? new Thread(new Runnable(){
      public void run(){

      }
      })

      谢了

      • packagecomponent
      • 2014/03/08 11:51上午

      如果是同一个进程中的线程的切换,开销比较小。不同进程间的线程切换,开销比较大,上文这一点没有说明

        • fangqiang08
        • 2014/09/12 9:20下午

        请问编程中怎么判断、设置线程属于某个进程?

      • forward
      • 2018/01/23 4:33下午

      不正确的线程同步产生的错误非常难以被发现,并且重现以修复。
      这句的翻译有点拗口

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 fp5| xjr| l6f| tbz| 6hr| fx6| nt4| lld| z4l| djt| 4td| tr5| hfp| h5j| jhb| 5rb| fv5| bzt| p3r| z3x| flr| 4dh| hxp| 4xb| db4| tjl| h4n| ndh| 4nh| pf2| dbv| n3z| ndn| vln| 3pl| tr3| jpj| d3b| vtl| 3nz| fl4| fxr| b2b| hfp| 2jf| hxt| zx2| ndh| n2v| vrd| 33l| pnv| 3pb| hx1| fvb| f1f| rdl| 1db| dvl| xd2|