多线程编程技术作为现代软件开发的流行技术,正确地使用它将会带来巨大的优势。
在单线程软件中,如果软件中有多个任务,比如读写文件、更新用户界面、网络连接、打印文档等,若按照先后次序执行,即先完成前面的任务才能执行后面的任务,如果某个任务执行的时间较长,比如读写一个大文件,那么用户界面无法及时更新,使得用户体验感很不好。为了解这个问题,人们提出了多线程编程技术。在采用多线程编程技术的程序中,多个任务由不同的线程去执行,不同线程各自占用一段CPU时间,即使线程任务还没完成,也会让出CPU时间给其他线程去执行。这样从用户角度看,好像几个任务是同时进行的,至少界面上能得到及时更新了,大大改善了用户对软件的体验,提高了软件的响应速度和友好度。
随着多核处理器日益普及,单线程程序愈发成为性能瓶颈。比如电脑有2个CPU内核,单线程软件同一时刻只能让一个线程在一个CPU内核上运行,另外一个内核就可能空闲在那里,无法发挥性能。如果软件设计了2个线程,则同一时刻可以让这两个线程在不同的CPU内核上同时运行,运行效率增加一倍。
对于同一进程的线程来说,它们共享该进程的地址空间,可以访问相同的数据。通过数据共享方式使得线程之间的通信比进程之间的通信更高效和方便。
创建线程、线程切换等操作所带来的系统开销比进程的类似操作所需开销要小得多。由于线程共享进程资源,所以创建线程时不需要再为其分配内存空间等资源,因此创建时间也更小。比如在Solaris2操作系统上,创建进程的时间大约是创建线程的30倍。线程作为基本执行单元,当从同一个进程的某个线程切换到另一个线程时,需要载入的信息比进程之间切换要少,所以切换速度更快,比如Solaris2操作系统中线程的切换速度比进程切换大约快5倍。