Multithreading Costs

将单线程程序变成多线程程序并只有好处。也有一些代价。不要仅仅因为你能做到就将应用程序多线程化。你需要确定这样做的好处大于代价。如果有疑问,就测试程序的性能和响应能力,不要靠猜。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,419评论 11 349
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • 下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试。 参考文档:-《Java核心技术 卷一》-...
    阿呆变Geek阅读 14,984评论 14 507
  • 1996年 素最终一个人留下来继续念书。最好的两个朋友,都离开去了外地求学。 突然之间,日日相伴相知最好的两个朋友...
    素衣七七阅读 328评论 1 8
  • 轻松的感觉呢,往往都在紧张之后。 当一件大事完成,或者一个有难度的目标达成之后,会有种轻松的感觉。 今天差不多整天...
    Andy_d8c5阅读 98评论 0 0