当然,协调式多任务的思想也有其局限性,主要就是它的调度粒度比较大。系统能够保证的粒度是一次消息处理过程。如果消息处理逻辑非常费时,那么编程人员就必须再处理函数内部,让系统主动让出CPU资源。这虽然需要在处理消息响应逻辑时增加一个考虑因素,但是,在Windows系统盛行的今天,这是一个已经被普遍接受的思路。由于方案中并没有局限为消息队列服务的线程数目,所以一个长时间的消息响应只会影响一个线程,而不会对整个系统产生致命的影响。除了调度粒度的问题以外,还有访问消息队列操作在各个线程间互斥的问题。取出消息的过程是串行化的,因此对于这一瓶颈的解决方案就是:假设取出一条消息的操作相对于处理消息的消耗可以忽略不计,那么对于多次调用且仅有两三行响应逻辑的消息,编程人员通过函数调用就可以直接执行。
前面比较详细地阐述了多任务系统中任务的划分以及执行等内容。虽然这些是一个系统的核心,但是在一个实用的系统中,还需要任务间的同步、互斥等机制。在上述框架内,互斥可以简单地用Java的Synchronized机制实现。由于任务可以主动让出执行权限,要实现等待(Wait任务中止)和通知(Notify任务继续),从而实现任务同步也就比较容易了。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/