有个想法,想与各位分享并共同讨论。
前述:
在一些前后台的架构中,我们有时会用到消息队列。
消息队列的特性即为先进先出,也称FIFO。
不管什么消息,产生时一律都插入到最后的位置,必须等到比它靠前的消息事件都处理完毕,才能被处理。
问题:
假设现在有个实时性要求高的消息产生了,但是由于在它前面还有许多事件等待着处理,它必须等待着许多的消息处理完才能运行,这可能会导致这个消息错过及时的处理时机。
假想:
为每个消息都添加一个优先级(优先级可相同),每次消息入队时依然是插入到“消息缓冲”(前面的队列)的最后端,但是消息取出时,则不再按原先的“先进先出”特性从第一个取出,而是寻找优先级最高的消息取出并进行处理。
问题:
那么,如果一个低优先级的消息产生后,由于后面来了一连串高优先级的消息,这种情况则又可能造成CPU一直忙于处理高优先级而要等待很久才能处理前面产生的低优先级的消息。
假想:
所以我想给消息的优先级增加一个新特性,随时间自增——每次有消息从“消息缓冲”取出并进行处理时,未处理的消息优先级全部自增+1.这样随着时间的增长,会使前期的一些消息不断提高优先级,从而降低等待很长时间才能处理的风险。
当“消息缓冲”中有两个相同优先级时,优先取出靠前的那个消息进行处理。
大家帮忙评论下可行性 |