何时使用多任务

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

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

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

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

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

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

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

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