多线程技术的引入并不仅仅是为了提高处理速度和硬件资源利用率,更重要的是可以提高系统的可扩展性(采用多线程技术编写的代码移植到多处理器平台上不需要改写就能立刻适应新的平台,可以也可以简单地通过增加处理器数量来提高性能)和用户体验。
对于单核CPU计算机而言,使用多线程并不能提高任务完成速度,但有些场合必须要使用多线程技术,或者采用多线程技术可以让整个系统的设计更加人性化。
下面是常见的多线程编程技术应用场景:
- 使用多个线程下载大文件或完成一个较大的任务,可以在一定程度上提高速度(但是也会带来一些资源管理上的问题,如果处理不好反而会引起麻烦,这个后面再谈)
- 批量文件复制时,可以使用多个线程来提高整体速度。
- 在执行一段代码的同时还想接收和响应用户的键盘或鼠标事件以提高用户体验,这时候就只能在主线程中以子线程的形式来运行这段代码。
- Windows操作系统的Windows Indexing Services创建了一个低优先级的线程,该线程定期被唤醒并对磁盘上的特定区域的文件内容进行索引以提高用户搜索速度。
- 打开Photoshop、3DsMax这样的大型软件时需要加载很多模块和动态链接库,软件启动时间会比较长。这时候可以使用一个线程来显示一个小动画来表示当前软件正在启动,当后台线程加载完所有的模块和库之后,结束该动画的播放并打开软件主界面,这也是多线程同步的一个典型应用。
- 字处理软件可以使用一个优先级高的线程来接收用户键盘输入,而使用一些低优先级线程来进行拼写检查、语法检查、分页以及字数统计之类的功能并将结果显示在状态栏上,这无疑会极大方便用户的使用,对于提高用户体验有重要帮助。
- 在服务器或代理服务器上,同一个服务往往会启动多个线程,每个线程服务于一个客户端,在提高资源利用率的同时也提高了任务的吞吐量。