多任务

https://docs.microsoft.com/zh-cn/windows/desktop/ProcThread/multitasking

多任务操作系统将可用的处理器时间分配需要它的process 或 thread 上。系统设计为抢占式多任务。它申请处理器时间切片到每个它执行的thread 上。当前执行的thread 的时间切片使用完后,thread 被suspended,允许其它的线程去执行它。当系统从一个thread 转换到另一个。它保存被抢占的thread 的context,恢复队列中的下一个thread 的保存的context。

时间片的长度,取决于操作系统和处理器。因为每个时间切片的很小(大约,20 毫秒),多线程貌似是同时执行的。多处理器系统上,确实是同时执行的,可执行thread 被配分到可用的处理器上。但是,在application 中使用多线程的时候,需要小心,因为当有太多的thread,系统性能将会下降。

多任务处理的优点:

对用户来说,多任务的优点就是,你可以同时运行并使用多个application。

对开发者来说,可以开发拥有多个process 的application ,或者开发拥有多个thread 的process。比如,一个process 可以创建一个用户接口thread,管理与用户的交互(键盘和鼠标输入等),工作thread在用户接口thread 等待用户输入的时候,执行其他的任务。如果你给用户接口thread 一个比较高的优先级,application 的响应速度将更快,同时,在用户没有进行输入操作的时候,工作thread 可以高效的使用处理器做一些其他的工作

何时使用多任务

两种实现方式:单application 中多process,单process 中多thread。application 可以将需要私有地址空间和私有资源的thread 放到一个process中,以免收其他process 中thread 活动的影响。

一个多线程进程可以通过线程来管理相互独立的任务,比如,提供用户交互和执行后台计算。另外,通过在进程中使用多线程,可以方便的同时执行相似或相同的任务。你的process 可以使用多线程来完成如下任务:

1. 管理多窗口的输入

2. 管理来自多个通信设备的输入

3. 区分不同优先级的任务。比如,一个高优先级thread处理时间敏感的任务,低优先的线程执行其他任务。

4. 允许用户交互保持响应,同时给后台任务分配时间

通常,实现单进程-多线程application 是 比多进程application 有更高的效率的,有如下原因:

1.系统 执行thread 的context switch 比执行进程的context switch 更快,(process context 更大)

2. 同进程中的thread 可以共享地址空间----直接访问进程全局的变量,比跨进程通信效率更高

3. process 中所有的thread 可以共享打开的资源的handle,比如file和pipe

多线程实现时,有很多可利用的技术,其中最高效的有:异步I/O,I/O 完成端口,APC,同时等待多个事件的能力。

单个线程可以借助异步I/O 初始化多个可以同时运行的耗时的I/O 请求。异步I/O 可以在文件、管道、串行通信设备上执行。参见:

https://msdn.microsoft.com/en-us/library/ms686358(v=VS.85).aspx

单线程,在等待多个事件中的一个或全部事件发生的时候,可以阻止自己的执行。这比使用多线程,每个等待一个事件要高效,也比,使用一个线程持续的检查事件是否到达而消耗处理器时间,更高效。详情参见:

https://msdn.microsoft.com/en-us/library/ms687069(v=VS.85).aspx

 

多任务中需要注意的事项

建议的方式是使用尽量少的线程,以最小程度的使用系统资源。设计application 的时候,应该考虑资源需求以及潜在的冲突。资源需求有下面:

1. 系统在process context 和 thread context 上都将消耗内存。

2. 跟踪大量线程占用大量处理器时间的情况,如果线程太多,它们的大多数将无法很好的执行,如果大多数当前线程在一个进程中,则其他进程中的线程调度次数将减少。

提供对资源的共享访问将导致冲突,应该同步对共享资源的访问。被多process 访问的系统资源,或被多线程访问的线程资源,都是需要进行同步的。可以使用同步对象和函数来协调多个线程之间的资源共享。关于同步:

https://docs.microsoft.com/zh-cn/windows/desktop/ProcThread/synchronizing-execution-of-multiple-threads

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值