美文网首页
多线程的代价

多线程的代价

作者: IT遇岛 | 来源:发表于2017-12-21 22:08 被阅读20次

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

设计更复杂

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

上下文切换的开销

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

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

增加资源消耗

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

小结

  • 使用多线程的目的是为了提高效率,时效性,达到“物尽其才,人尽其用”,但却增加了维护成本(当然大公司不在乎这一点钱罢了),排错难度,对数据结构,数据并发控制也有一定影响。

相关文章

  • 多线程的代价

    从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该...

  • 多线程编程的代价

    从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该...

  • 多线程的优点和代价

    优点资源利用率更高程序设计更简单(某些情况)程序响应更快 代价设计更复杂上下文切换的开销增加资源消耗

  • Multithreading Costs

    将单线程程序变成多线程程序并只有好处。也有一些代价。不要仅仅因为你能做到就将应用程序多线程化。你需要确定这样做的好...

  • 2020.11.15 周日 Java中多线程执行器

    Java多线程执行器 1.1 线程池Thread Pool 使用理由 构建一个新的线程有代价 减少并发线程的数...

  • 多进程介绍和多线程的比较

    多进程编程 耗CPU的操作,用多进程编程, 对于IO操作来说用多线程,进程切换的代价要高于线程 1. 对于耗CPU...

  • Java并发基础篇(3):多线程的代价

    转自:http://ifeve.com/costs-of-multithreading/ 从一个单线程的应用到一个...

  • java中的各种锁性能比较及原理

    java中的各种锁性能比较及原理 多线程的缘由 进程间的切换耗费的代价太大,因此需要一种花销小,切换快的多任务操作...

  • 3.5 偏向锁

    引入的原因 经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价...

  • 偏向锁

    定义 大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低引入了偏向锁。 ...

网友评论

      本文标题:多线程的代价

      本文链接:https://www.haomeiwen.com/subject/paezwxtx.html