从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该明确在使用多线程时能多来的好处比所付出的代价大的时候,才使用多线程。如果存在疑问,应该尝试测量一下应用程序的性能和响应能力,而不只是猜测。
- 增加设计的难度
在程序设计时,如果涉及到共享资源的访问,需要谨慎的处理。线程之间的通信交互复杂。不正确的线程同步发生的错误很难发现,并且偶发性很强,不容易重现。 - 上下文切换的开销
当CPU从一个线程切换到另外一个线程时,会对当前线程的数据进行存储,然后再载入要执行的线程的数据,程序指针等,这称之为上下文切换。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。上下文的切换并不廉价。如果可能,尽量减少上下文的切换。(处理一个事情,不是分工越细越好,切换的代价太大) - 资源的消耗
线程保存有自己的数据、指针和PC,这些都保存在内存中。同样,系统中也需要对线程进行管理,这也消耗资源。因此,需要衡量线程的数量。
网友评论