队列是一种数据结构,它具有先进先出的特点,是一种应用很广泛的结构。在计算机或计算机之间,为了提高计算机或计算机之间的工作效率,我们经常采用队列机制。队列机制简单来说是基于队列,利用某种方案来提高工作效率。
队列是一种数据结构,它具有先进先出的特点,是一种应用很广泛的结构。在计算机或计算机之间,为了提高计算机或计算机之间的工作效率,我们经常采用队列机制。队列机制简单来说是基于队列,利用某种方案来提高工作效率。例如操作系统中作业、进程和线程基于队列机制调度。
队列是一种数据结构,它具有先进先出的特点,是一种应用很广泛的结构。在计算机或计算机之间,为了提高计算机或计算机之间的工作效率,我们经常采用队列机制。队列机制简单来说是基于队列,利用某种方案来提高工作效率。例如操作系统中作业、进程和线程基于队列机制调度。
关于队列机制的分类有很多选择,这里主要从队列机制作用来分类,分为以下两类:
内核中提供了许多机制来提供延迟执行,如中断的下半部处理可延迟中断上下文中的部分工作;定时器可指定延迟一定时间后执行某工作;工作队列则允许在进程上下文环境下延迟执行等。除此之外,内核中还曾短暂出现过慢工作机制 (slow work mechanism),还有异步函数调用 (asynchronous function calls) 以及各种私有实现的线程池等。在上面列出的如此多的内核基础组件中,使用最多则是工作队列。
下面是一些有关工作队列的短语
workqueues:所有工作项被 ( 需要被执行的工作 ) 排列于该队列,因此称作工作队列 (workqueues) 。
worker thread:工作者线程 (workerthread) 是一个用于执行工作队列中各个工作项的内核线程,当工作队列中没有工作项时,该线程将变为 idle 状态。
single threaded(ST):工作者线程的表现形式之一,在系统范围内,只有一个工作者线程为工作队列服务。
multi threaded(MT):工作者线程的表现形式之一,在多 CPU 系统上每个 CPU 上都有一个工作者线程为工作队列服务。
工作队列机制的准则如下:
面向用户的准则
(1) 周转时间短。通常把周转时间的长短作为评价批处理系统的性能、选择作业调度方式与算法的重要准则之一。所谓周转时间,是指从作业被提交给系统开始,到作业完成为止的这段时间间隔(称为作业周转时间)。它包括四部分时间:作业在外存后备队列上等待(作业)调度的时间,进程在就绪队列上等待进程调度的时间,进程在 CPU 上执行的时间,以及进程等待 I/O 操作完成的时间。其中的后三项在一个作业的整个处理过程中可能会发生多次。
(2) 响应时间快。常把响应时间的长短用来评价分时系统的性能,这是选择分时系统中进程调度算法的重要准则之一。所谓响应时间,是从用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间,或者说,直到屏幕上显示出结果为止的一段时间间隔。它包括三部分时间:从键盘输入的请求信息传送到处理机的时间,处理机对请求信息进行处理的时间,以及将所形成的响应信息回送到终端显示器的时间。
(3) 截止时间的保证。这是评价实时系统性能的重要指标,因而是选择实时调度算法的重要准则。所谓截止时间,是指某任务必须开始执行的最迟时间,或必须完成的最迟时间。对于严格的实时系统,其调度方式和调度算法必须能保证这一点,否则将可能造成难以预料的后果。
(4) 优先权准则。在批处理、分时和实时系统中选择调度算法时,都可遵循优先权准则,以便让某些紧急的作业能得到及时处理。在要求较严格的场合,往往还须选择抢占式调度方式,才能保证紧急作业得到及时处理。
面向系统的准则
(1) 系统吞吐量高。这是用于评价批处理系统性能的另一个重要指标,因而是选择批处理作业调度的重要准则。由于吞吐量是指在单位时间内系统所完成的作业数,因而它与批处理作业的平均长度具有密切关系。对于大型作业,一般吞吐量约为每小时一道作业;对于中、小型作业,其吞吐量则可能达到数十道作业之多。作业调度的方式和算法对吞吐量的大小也将产生较大影响。事实上,对于同一批作业,若采用了较好的调度方式和算法,则可显著地提高系统的吞吐量。
(2) 处理机利用率好。对于大、中型多用户系统,由于 CPU 价格十分昂贵,致使处理机的利用率成为衡量系统性能的十分重要的指标;而调度方式和算法对处理机的利用率起着十分重要的作用。在实际系统中,CPU 的利用率一般在 40%(系统负荷较轻)到 90%之间。在大、中型系统中,在选择调度方式和算法时,应考虑到这一准则。但对于单用户微机或某些实时系统,则此准则就不那么重要了。
(3) 各类资源的平衡利用。在大、中型系统中,不仅要使处理机的利用率高,而且还应能有效地利用其它各类资源,如内存、外存和 I/O 设备等。选择适当的调度方式和算法可以保持系统中各类资源都处于忙碌状态。但对于微型机和某些实时系统而言,该准则并不重要。