从单线程应用到多线程应用带来的不仅仅是好处。也会带来开销。不要仅仅在一个应用中使用多线程仅仅是因为你能够(会)使用多线程。你应该能确定使用多线程带来的好处要远远多于它带来的花销。如果不能够确定,那么请尝试测量应用的性能和响应性,不仅仅是猜测。
更复杂的设计
尽管多线程应用的某些部分要比单线程应用更加简单,但是应用的另一些部分会变得更加复杂。当一个多线程应用访问共享数据时要特别注意。线程的交互一点也不简单。错误总是在不正确的线程同步中产生,而且很难发现、重现、修复。
线程切换开销
当一个cpu从一个线程切换到另一个线程时,cpu需要保存当前线程的本地数据,程序当前的指针等,然后加载下一个等待执行的线程的本地数据,程序指针等。这种切换被称之为上下文切换。cpu从执行一个线程切换去执行另一个线程。
上下文切换需要花费很多资源。除非必要,你不要去切换上下文。
你能够读更多的信息关于上下文在维基百科上面。
增加的资源消耗
为了启动一个线程需要消耗一些计算机的资源。而且一个线程cpu时间(?)需要一些内存来存储它的本地的栈。它也会在操作系统中占据一些资源来管理线程。尝试创建一个拥有100个线程的程序,每一个线程什么都不做,仅仅是等待,然后看看当这个应用运行的时候占据了多少内存。
ps:本人只是一个自学英语一段时间的初级程序猿。无论是英语翻译程度,还是技术理解程度都远远不足,如果文中有翻译不到位,或者技术理解错误情况,还请各位指出,必定改正,也可相互学习交流。