并发编程程序员我是程序员;您好程先生;叫我序员就好了

一个有关定时生产与消费的问题

2018-01-21  本文已影响107人  阿里加多

一、前言

本文来讲解遇到的一个有意思的与定时器相关的生产消费模型,模型如下图:


image.png

问题:每个队列里面最多时候会有几个元素?

二、分析

按照上面的逻辑看的话,每个队列里面最多有一个元素。其实不然,因为在多线程模型中每个线程占用cpu执行的时间是按照时间片来划分的,每个线程执行完自己的时间片后会被挂起,然后下一个获取到时间片的线程会占用CPU执行自己的任务,当下一轮被挂起的线程获取到自己的时间片后,会恢复执行上下文从之前被挂起的地方执行。

所以这里步骤(6)并不能保证比步骤(5)先执行,有可能消费线程在执行步骤(5)前时间片用完了,则这时候消费线程会被挂起,而如果现在生产者线程获取到了cpu并且到达了定时执行任务的时间点,则步骤(6)会执行,那么这时候队列一,里面会有2个元素,那么等消费线程获取CPU时间片执行时候会从队列1里面拿到2个元素。

注:这里使用1.000000000001s是为了说明和1s比较接近,其实由于影响调度因素很多,有可能有比这更接近1s的时间

三、总结

多线程下会遇到很多微妙的情况,有时候遇到的问题要结合OS的知识才能解释清楚,本节从其中一个角度分析了每个队列里面有可能会有两个元素的原因,欢迎大家补充其他原因,并考虑会不会存在一个队列里面最多时候有3个元素的情况

上一篇 下一篇

猜你喜欢

热点阅读