多线程的代价

本文翻译自http://tutorials.jenkov.com/java-concurrency/costs.html,机翻加人工校正,仅供学习交流。

多线程的代价

从单线程程序转向多线程程序不仅仅提供优点,它也会有一些代价。不要因为会使用多线程就是把一个应用程序写成多线程程序,而是有根据地认为这样做的好处要大于成本。当有疑问时,我们应该尝试测量应用程序的性能和响应能力,而不只是去靠猜测。

更复杂的设计

虽然多线程应用程序的某些部分比单线程应用程序简单,但是其他部分更为复杂。多线程访问共享数据的代码执行需要特别注意,线程交互是很复杂的,不正确的线程同步引起的错误是很难检测,重现和修复的。

上下文切换的开销

当CPU将一个正在执行的线程切换到另一个要执行的线程,CPU需要保存当前线程的本地数据、程序指针等,并加载下一个要执行的线程本地数据、程序指针等。这个切换被称为“上下文切换”。CPU将从正在执行的线程的上下文切换为将要执行的线程的上下文。
上下文切换是比较浪费系统资源。如果没有必要,你不会想在线程之间切换。
你可以阅读上下文切换在维基百科
http://en.wikipedia.org/wiki/Context_switch
(维基百科国内无法打开,有兴趣可以去百度百科查看https://baike.baidu.com/item/上下文切换/4842616?fr=aladdin)

增加资源消耗

一个线程要运行需要一些计算机资源。除了CPU时间,一个线程需要一些内存来保持其本地堆栈,也会占据需要管理线程的操作系统的资源。尝试创建一个有100个只等待线程的程序,看看应用程序运行时需要多少内存。

下一章:线程模型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值