Java 并发 教程 - 多线程的代价

从单线程到多线程应用程序不仅仅提供好处,它也有一些代价。只是因为你可以,就把一个应用程序变成多线程。你应该明了,这样做所获得的好处要大于成本。如果有疑问,请尝试着量化一下应用程序的性能或响应速度,而不是只是猜测。

更复杂的设计


尽管多线程应用程序的某些部分比单线程应用程序更简单,但其他部分更复杂。需要特别注意访问共享数据的的被多个线程执行的代码。线程的交互绝不是很简单的事。由不正确的线程同步引起的错误可能非常难以检测,重现和修复。


上下文切换开销


当CPU从一个线程的执行切换到另一个线程的执行时,CPU需要保存当前线程的本地数据,程序指针等,并且加载要执行的下一个线程的本地数据,程序指针等。这个切换被称为“上下文切换”。 CPU从在一个线程的上下文中执行切换到在另一个线程的上下文中执行。


上下文切换不便宜。没必要的话,不要在线程之间切换。

你可以在维基百科上阅读更多关于上下文切换的资料:

http://en.wikipedia.org/wiki/Context_switch

增加资源消耗


线程需要一些来自计算机的资源才能运行。除了CPU时间,线程需要一些内存来保持其本地堆栈。它也可能占用操作系统内部需要管理线程的一些资源。你·可以尝试创建一个程序来创建100个线程,来看看应用程序运行时需要多少内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值