Multithreading Costs
2019-01-11 本文已影响0人
JiinYuu
将单线程程序变成多线程程序并只有好处。也有一些代价。不要仅仅因为你能做到就将应用程序多线程化。你需要确定这样做的好处大于代价。如果有疑问,就测试程序的性能和响应能力,不要靠猜。
More complex design
尽管多线程程序的某些部分比单线程程序简单,但其他部分则要复杂得多。由多线程执行的访问共享数据的代码需要格外小心。线程交互并不总是简单。由不正确的同步引起的错误往往很难检测、复现和修复。
Context Switching Overhead
当线程从一个执行线程切换到另一个时,需要保存当前线程的本地数据、程序计数器等。然后加载另一个线程的本地数据、程序计数器等。这个切换被称为“上下文切换”。CPU从执行线程的上下文切换到另一个线程的上下文。
上下文切换并不便宜。你不会想在不必要的情况下进行切换的。
关于上下文切换,你可以在维基百科上了解更详细的内容:http://en.wikipedia.org/wiki/Context_switch
Increased Resource Consumption
线程需要计算机中的一些资源才能运行。除了CPU时间,它还需要一些内存来存其本地栈。它还会消耗一些操作系统资源来管理它。你可以整个程序,创建100个线程,啥也不干,看看会占用多少内存。
有必要说明下,这个Java Concurrency系列来源于jenkov.com,本文只是翻译,希望大家千万不要误会,本文不是原创。原文地址:Java Concurrency。