“任务”和“人”,在某些方面有相似之处:一般意义上,人做事不会是做完后就把这个人干掉,再有事时又去生一个来做事,那样的话成本太高,成本较低的办法是让这个人在没事的时候休息就行了,同样的道理,任务没事的时候,让任务睡眠并等待下一个事情,有事了就醒来继续做事,比杀掉任务,有事再创建一个任务,成本更低。
于是,任务的基本特点之一就是:有事做事,无事休息。人又何尝不是如此?
任务做的事,总是设计好的那些,不会有什么变化,而你从小到大,宏观上虽然变化很大,但具体到某一阶段,又是非常固定,比如大学三点一线。
于是,任务的另一个基本特点就是:重复性或周期性。
下面就是一个任务的典型结构:void task()
{
while (1) {
event = wait(); // 睡眠(阻塞)并等待事件,发生事件后即被唤醒
if (event == event1) { // 事件1到来
do_something1(); // 做事1
} else if (event == event2) { // 事件2到来
do_something2(); // 做事2
}
....
}
}
对于那些所谓的“一次性任务”,完全是没有理由存在的,如果谁用到了,一定是项目设计不合理。 |