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

来源:互联网 发布:c语言中数据类型与% 编辑:程序博客网 时间:2024/05/16 10:21
从单线程到多线程应用程序不仅仅提供好处,它也有一些代价。只是因为你可以,就把一个应用程序变成多线程。你应该明了,这样做所获得的好处要大于成本。如果有疑问,请尝试着量化一下应用程序的性能或响应速度,而不是只是猜测。

更复杂的设计


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


上下文切换开销


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


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

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

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

增加资源消耗


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