何时使用多任务

实现多任务的方法有两种:作为具有多个线程的单个进程,或作为多个进程实现,每个进程都有一个或多个线程。 应用程序可以将需要专用地址空间和专用资源的每个线程放入其自己的进程中,以保护其免受其他进程线程的活动影响。

多线程进程可以使用线程管理互斥的任务,例如提供用户界面和执行后台计算。 创建多线程进程也是构造同时执行多个类似或相同任务的程序的便捷方法。 例如,命名管道服务器可以为附加到管道的每个客户端进程创建线程。 此线程管理服务器和客户端之间的通信。 进程可以使用多个线程来完成以下任务:

  • 管理多个窗口的输入。
  • 管理来自多个通信设备的输入。
  • 区分不同优先级的任务。 例如,高优先级线程管理时间要求严格的任务,低优先级线程执行其他任务。
  • 让用户界面能够一直响应用户,同时为后台任务分配时间。

由于以下原因,应用程序通过创建单个多线程进程而不是创建多个进程来实现多任务通常更有效:

  • 系统可以比进程更快地为线程执行上下文切换,因为进程的开销比线程多, (进程上下文大于线程上下文) 。
  • 进程的所有线程共享相同的地址空间,并且可以访问进程的全局变量,这可以简化线程之间的通信。
  • 进程的所有线程都可以共享资源(如文件和管道)的开放句柄。

还可以使用其他技术来代替多线程处理。 其中最重要的内容如下:异步输入和输出 (I/O) 、I/O 完成端口、异步过程调用 (APC) ,以及等待多个事件的能力。

单个线程可以启动多个耗时的 I/O 请求,这些请求可以使用异步 I/O 并发运行。 可以在文件、管道和串行通信设备上执行异步 I/O。 有关详细信息,请参阅 同步和重叠输入和输出

单个线程可以在等待任意一个或所有多个事件发生时阻止其自己的执行。 这比使用多个线程(每个线程等待单个事件)更高效,并且比使用通过持续检查事件发生的消耗处理器时间的单个线程更有效。 有关详细信息,请参阅 等待函数