图5
(https://baijiahao.baidu.com/s?id=1663040868828329048&wfr=spider&for=pc)
三、线程的优点
多线程编程具有如下四大类的优点:
1、响应性:如果一个交互程序采用多线程,那么即使部分阻塞或者执行冗长操作,它仍可以继续执行,从而增加对用户的响应程度。这对于用户界面设计尤其有用。例如,当用户点击一个按钮以便执行一个耗时操作时,想一想会发生什么事。一个单线程应用程序对用户反应会迟钝,直到该操作完成。与之相反,如果耗时操作在一个单独线程内执行,那么应用程序仍可响应用户。
2、资源共享:进程只能通过如共享内存和消息传递之类的技术共享资源。这些技术应由程序员显式地安排。不过,线程默认共享它们所属进程的内存和资源。代码和数据共享的优点是:它允许一个应用程序在同一地址空间内有多个不同活动线程。
如图6,Google Chrome进程中存在十几个线程,尽管多数线程在CPU、GPU、网络等资源上无事可做,但各线程都占有了一部分内存,通过共享资源为占有CPU、GPU、网络资源的线程提供辅助,以减少主要线程的负担。
图6
3、经济:进程创建所需的内存和资源分配非常昂贵。由于线程能够共享它们所属进程的资源,所以创建和切换线程更加经济。虽然进程创建和管理与线程创建和管理的开销差异的实际测量较为困难,但是前者通常要比后者花费更多时间。例如,对于 Solaris,进程创建要比线程创建慢 30 倍,而且进程切换要比线程切换慢 5 倍。
图7
(https://www.jianshu.com/p/45bcc0d9998c)
4、可伸缩性:对于多处理器体系结构,多线程的优点更大,因为线程可在多处理核上并行运行。不管有多少可用 CPU,单线程进程只能运行在一个 CPU 上。
来源:西电研究生科学普及