使用多线程的优点:
1:资源利用率更高。
例如从磁盘读取文件的时候,大部分的CPU时间是用于等待磁盘去读取数据,在这段时间里,CPU非常空闲,通过改变操作的顺序,就能更好的使用CPU资源
2:程序响应更快
例如一个人服务器程序是单线程的,此时如果一个请求需要占用大量的时间在这段时间内新的客户端就无法发送请求给服务器端,如果引入多线程则会大大提高效率。
从一个单线程的应用到多线程的应用并不仅仅带来好处,其也会带来一些代价,不要仅仅为了使用多线程而使用多线程,应该明确在使用多线程的时候能带来的好处比付出的代价大的时候,才使用多线程。
1:设计有时会更复杂:
2:上下文切换的开销:
当CPU从执行一个线程切换到另外一个线程的时候,它需要存储当前线程的本地数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行,这种切换称为“上下文切换”CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另一个线程。上下文的切换非常耗费系统资源。如果没有必要,应该减少上下文切换的发生。
3:增加资源消耗:
线程在运行的时候,需要从计算机里得到一些资源,除了CPU,线程还需要一些内存来维持它本地的堆栈,还需要占用操作系统中的一些资源来管理线程。
4:线程的死锁:较长时间等待或资源竞争以及死锁等多线程症状。
5:对共有变量的同时读写:当多个线程需要对共有变量进行写的操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改,另外当共有变量的读写操作是非原子性时,在不同的机器上是不确定的,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的