多线程的代价

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

把一个单线程程序改写成一个多线程程序带来的不只是优势,使用多线程也得付出一定的代价。不要为了多线程而多线程。你应该在多线程带来的优势和付出的代价之间权衡利弊。决策的过程中遇到迷惑的时候,可以通过衡量应用程序的性能或者响应性而做出决策,而不是凭空猜测。

更复杂的设计

尽管多线程应用程序的部分设计要比单线程应用简单,然而其他的部分却更复杂。被多个线程执行的代码访问共享数据时需要特别的注意。线程之间的交互有时很复杂。不正确的线程同步引起的错误很难被发现、重现和解决。

上下文切换的开销

CPU 从一个线程切换到另一个线程需要保存当前线程的局部变量、程序计数器(program pointer)等。还得加载待执行线程的局部变量、程序计数器等。这个切换叫做“上下文切换”。 CPU 从一个线程的上下文切换到另一个线程的上下文。

上下文切换的开销并不低,最好不要在线程之间切换,除非是必须的切换。
你可以在维基百科上查看关于上下文切换的更多资料:http://en.wikipedia.org/wiki/Context_switch

增加了资源的消耗

一个线程能跑起来需要计算机的一些资源。除了 CPU 时间外一个线程还需要内存来保存它的局部栈(local stack)。为了管理线程还得占用操作系统内的一些资源。试着在一个程序中创建 100 个线程,这 100 个线程什么也不做只是处于等待状态,然后启动这个程序看看这个程序占用了多少内存。

Next: 并发模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值