2. 消息队列完成消息的存储和管理,从而利用消息处理的次序体现任务优先级的不同;
3. 任务中耗时的消息响应逻辑能够主动放弃CPU资源,让别的任务执行(像Windows 3.1中的Yield函数、Visual Basic中的DoEvents语句)。
可能出于巧合,Java语言具有构造协调式多任务系统天然的条件。Java对象的方法不仅是一个函数调用,它还是一个java.lang.reflect.Method类的对象。而所有对象的方法都可以通过Method类的invoke方法调用。如果能使每个任务所对应的一系列方法全部以对象形式包装成消息,放到消息队列中,然后再按照自己的优先级算法将队列中的消息取出,执行其Method对象的invoke调用,那么一个基本的协调式多任务系统就形成了。其中,任务的优先级和线程的优先级没有绑定关系。该系统的主体调度函数可以设置成一个“死循环”,按照需要的优先级算法处理消息队列。对于有多重循环、外设等待等耗时操作的消息响应函数,可以在响应函数内部递归调用主体调度函数,这一次调用把原来的“死循环”改成在消息队列长度减少到一定程度(或者为空)后退出。退出后,函数返回,执行刚才没有完成的消息响应逻辑,这样就非常自然地实现了协调式系统中任务主动放弃CPU资源的要求。
文章来源于领测软件测试网 https://www.ltesting.net/