多线程是有效提升程序运行效率的方式之一。它还在提升优化算法、提高硬件配置、分布式计算、网格计算的效率方面起着重要作用。
让我们从一个简单的问题开始:水箱有五个排水孔。打开一个排水孔把水箱倒空需要一个小时。如何使水箱快速排空并计算排空时间?这个问题包含了多线程的原理。线程是程序执行的最小单位。排水孔是一根线。打开排水孔称为单线程程序,打开多个排水孔称为多线程程序。如果一个程序有更多的线程,这个一个程序中多个线程获得CPU的概率更高,时间更长,执行速度更快。
获取CPU的技术术语是“获取时间片”。也就是说,CPU将所有的时间分成若干片,并不断地将每个片分配给不同的线程执行,以保证每个程序都有执行的机会,没有程序会一直占用CPU。
操作系统相当矛盾。它似乎专注于执行一个程序。事实上,它为其他应用程序分配了很多时间片。然而,投票过程非常快,人们根本感觉不到。例如,当我们同时打开word编辑文档和QQ音乐听歌曲时,CPU的时间片总是在两个程序之间分配。word和QQ音乐程序之间也可能有一个时间片被全部停止,这对人们来说是难以察觉的。
多线程有两种常见情况:
(1) 启动多个线程来做不同的事情。目的是同时做许多事情。
(2) 启动多个线程执行相同的操作(例如,上面的排水示例),以提高效率。
当然,多线程也有缺点,就是多个线程的时序不好控制,多个线程之间的共享变量控制难度比较大,通知机制复杂,且调试困难。巧用多线程编程不仅是优秀程序员的自我修养,也是提高程序运行效率的利器之一。
领取专属 10元无门槛券
私享最新 技术干货