Linux操作系统处理器调度基本准则和实现

1,基本概念

在多道程序系统中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、低效)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。

处理机调度是多道程序操作系统的基础,它是操作系统设计的核心问题。

2,调度的层次

一个作业从提交开始直到完成,往往要经历以下三级调度,如图2-4所示。

\1) 作业调度。又称高级调度,.其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给它(们)分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它(们)获得竞争处理机的权利。简言之,就是内存与辅存之间的调度。对于每个作业只调入一次、调出一次。

多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度。作业调度的执行频率较低,通常为几分钟一次。

\2) 中级调度。又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐量。为此,应使那些暂时不能运行的进程,调至外存等待,把此时的进程状态称为挂起状态。当它们已具备运行条件且内存又稍有空闲时,由中级调度来决定,把内存上的那些已具备运行条件的就绪进程,再重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待。

\3) 进程调度。又称为低级调度,其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3,三级调度的联系

作业调度从外存的后备队列中选择一批作业进入内存,为它们建立进程,这些进程被送入就绪队列,进程调度从就绪队列中选出一个进程,并把其状态改为运行状态,把CPU分配给它。中级调度是为了提高内存的利用率,系统将那些暂时不能运行的进程挂起来。当内存空间宽松时,通过中级调度选择具备运行条件的进程,将其唤醒。

\1) 作业调度为进程活动做准备,进程调度使进程正常活动起来,中级调度将暂时不能运行的进程挂起,中级调度处于作业调度和进程调度之间。

\2) 作业调度次数少,中级调度次数略多,进程调度频率最高。

\3) 进程调度是最基本的,不可或缺的。

4,调度的时机、切换与过程

进程调度和切换程序是操作系统内核程序。当请求调度的事件发生后,才可能会运行进程调度程序,当调度了新的就绪进程后,才会去进行进程间的切换。理论上这三件事情应该顺序执行,但在实际设计中,在操作系统内核程序运行时,如果某时发生了引起进程调度的因素,并不一定能够马上进行调度与切换。

现代操作系统中,不能进行进程的调度与切换的情况有以下几种情况。

\1) 在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源。

\2) 进程在操作系统内核程序临界区中:进入临界区后,需要独占式地访问共享数据,理论上必须加锁,以防止其他并行程序进入,在解锁前不应切换到其他进程运行,以加快该共享数据的释放。

\3) 其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换。

如果在上述过程中发生了引起调度的条件,并不能马上进行调度和切换,应置系统的请求调度标志,直到上述过程结束后才进行相应的调度与切换。

应该进行进程调度与切换的情况有:

\1) 当发生引起调度条件,且当前进程无法继续运行下去时,可以马上进行调度与切换。如果操作系统只在这种情况下进行进程调度,就是非剥夺调度。

\2) 当中断处理结束或自动处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换。如果操作系统支持这种情况下的运行调度程序,就实现了剥夺方式的调度。

进程切换往往在调度完成后立刻发生,它要求保存原进程当前切换点的现场信息,恢复被调度进程的现场信息。现场切换时,操作系统内核将原进程的现场信息推入到当前进程的内核堆栈来保存它们,并更新堆栈指针。内核完成从新进程的内核栈中装入新进程的现场信息、更新当前运行进程空间指针、重设PC寄存器等相关工作之后,开始运行新的进程。

5,进程调度方式

所谓进程调度方式是指当某一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更髙的进程进入就绪队列,此时应如何分配处理机。

通常有以下两种进程调度方式:

\1) 非剥夺调度方式,又称非抢占方式。是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞状态时,才把处理机分配给更为重要或紧迫的进程。

在非剥夺调度方式下,一旦把CPU分配给一个进程,那么该进程就会保持CPU直到终止或转换到等待状态。这种方式的优点是实现简单、系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统。

\2) 剥夺调度方式,又称抢占方式。是指当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更为重要或紧迫的进程。.

采用剥夺式的调度,对提高系统吞吐率和响应效率都有明显的好处。但“剥夺”不是一种任意性行为,必须遵循一定的原则,主要有:优先权、短进程优先和时间的原则等。

调度的基本准则

不同的调度算法具有不同的特性,在选择调度算法时,必须考虑算法所具有的特性。为了比较处理机调度算法的性能,人们提出很多评价准则,下面介绍主要的几种:

\1) CPU利用率。CPU是计算机系统中最重要和昂贵的资源之一,所以应尽可能使CPU 保持“忙”状态,使这一资源利用率最高。

\2) 系统吞吐量。表示单位时间内CPU完成作业的数量。长作业需要消耗较长的处理机时间,因此会降低系统的吞吐量。而对于短作业,它们所需要消耗的处理机时间较短,因此能提高系统的吞吐量。调度算法和方式的不同,也会对系统的吞吐量产生较大的影响。

\3) 周转时间。是指从作业提交到作业完成所经历的时间,包括作业等待、在就绪队列中排队、在处迤机上运行以及进行输入/输出操作所花费时间的总和。

作业的周转时间可用公式表示如下:

周转时间 = 作业完成时间 - 作业提交时间

平均周转时间是指多个作业周转时间的平均值:

平均周转时间 = (作业1的周转时间 + … + 作业 n 的周转时间) / n

带权周转时间是指作业周转时间与作业实际运行时间的比值:

平均带权周转时间是指多个作业带权周转时间的平均值:

平均带权周转时间 = (作业1的带权周转时间 + … + 作业 n 的带权周转时间) / n

\4) 等待时间。=开始时间—提交时间。

是指进程处于等待处理机状态时间之和,等待时间越长,用户满意度越低。处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。因此,衡量一个调度算法的优劣常常只需简单地考察等待时间。

\5) 响应时间。是指从用户提交请求到系统首次产生响应所用的时间。在交互式系统中,周转时间不可能是最好的评价准则,一般采用响应时间作为衡量调度算法的重要准则之一。从用户角度看,调度策略应尽量降低响应时间,使响应时间处在用户能接受的范围之内。

要想得到一个满足所有用户和系统要求的算法几乎是不可能的。设计调度程序,一方面要满足特定系统用户的要求(如某些实时和交互进程快速响应要求),另一方面要考虑系统整体效率(如减少整个系统进程平均周转时间),同时还要考虑调度算法的开销。

操作系统典型调度算法

在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用。下面介绍几种常用的调度算法。

先来先服务(FCFS)调度算法

FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度。

在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。

在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。

下面通过一个实例来说明FCFS调度算法的性能。假设系统中有4个作业,它们的提交时间分别是8、8.4、8.8、9,运行时间依次是2、1、0.5、0.2,系统釆用FCFS调度算法,这组作业的平均等待时间、平均周转时间和平均带权周转时间见表2-3。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平均等待时间 t = (0+1.6+2.2+2.5)/4=1.575

平均周转时间 T = (2+2.6+2.7+2.7)/4=2.5

平均带权周转时间 W = (1+2.6+5.牡13.5)/4=5.625

FCFS调度算法属于不可剥夺算法。从表面上看,它对所有作业都是公平的,但若一个长作业先到达系统,就会使后面许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按FCFS原则处理。

FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于I/O繁忙型作业。

短作业优先(SJF)调度算法

短作业(进程)优先调度算法(Shortest Job First )是指对短作业(进程)优先调度的算法。短作业优先(SJF)调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。

例如,考虑表2-3中给出的一组作业,若系统采用短作业优先调度算法,其平均等待时间、平均周转时间和平均带权周转时间见表2-4。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平均等待时间 t = (0+2.3+1.4+1)/4=1.175

平均周转时间 T = (2+3.3+1.9+1.2)/4=2.1

平均带权周转时间 W = (1+3.3+3.8+6)/4=3.525

SJF调度算法也存在不容忽视的缺点:

该算法对长作业不利,由表2-3和表2-4可知,SJF调度算法中长作业的周转时间会增加。更严重的是,如果有一长作业进入系统的后备队列,由于调度程序总是优先调度那些 (即使是后进来的)短作业,将导致长作业长期不被调度(“饥饿”现象,注意区分“死锁”。后者是系统环形等待,前者是调度策略问题)。

该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业会被及时处理。

由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

注意,SJF调度算法的平均等待时间、平均周转时间最少。

优先级调度算法

优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业运行的紧迫程度。

在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。

根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为:

非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。

剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。

而根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:

静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。

动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据为进程占有CPU时间的长短、就绪进程等待CPU时间的长短。

高响应比优先调度算法

高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。

响应比的变化规律可描述为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据公式可知:

当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。

当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。

对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。

时间片轮转调度算法

时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。

在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此时间片的大小应选择适当。

时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。

多级反馈队列调度算法(集合了前几种算法的优点)

多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合和发展,如图2-5 所示。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程;同时,也不必事先估计进程的执行时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多级反馈队列调度算法的实现思想如下:

应设置多个就绪队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。

赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片就越小。例如,第2级队列的时间片要比第1级队列的时间片长一倍, ……第i+1级队列的时间片要比第i级队列的时间片长一倍。

当一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样地按FCFS 原则等待调度执行;如果它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……如此下去,当一个长进程从第1级队列依次降到第 n 级队列后,在第 n 级队列中便釆用时间片轮转的方式运行。

仅当第1级队列为空时,调度程序才调度第2级队列中的进程运行;仅当第1 ~ (i-1)级队列均为空时,才会调度第i级队列中的进程运行。如果处理机正在执行第i级队列中的某进程时,又有新进程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

多级反馈队列的优势有:

  • 终端型作业用户:短作业优先。
  • 短批处理作业用户:周转时间较短。
  • 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。
    行第i级队列中的某进程时,又有新进程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

多级反馈队列的优势有:

  • 终端型作业用户:短作业优先。
  • 短批处理作业用户:周转时间较短。
  • 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735546.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows端口被占用问题,杀死进程

描述:端口被占用 在使用IntelliJ IDEA运行程序时,可能会遇到端口占用的情况,这通常由以下几个原因引起: 1、同一程序多次启动:如果你没有正确关闭之前运行的程序实例,再次尝试运行相同的程序时,…

数据库系统概论(超详解!!!) 第十四节 数据库恢复技术

1.事务的基本概念 1.事务 事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务和程序是两个概念, 在关系数据库中,一个事务可以是一条SQL语句&#xff…

Leetcode3185. 构成整天的下标对数目 II

Every day a Leetcode 题目来源&#xff1a;3185. 构成整天的下标对数目 II 解法1&#xff1a;哈希 本质思路类同经典的“两数之和”。枚举右&#xff0c;用哈希表维护左。 枚举 j&#xff0c;并维护 cnt[x] 表示所有满足 i < j 的下标 i 中&#xff0c;有几个 hours[i]…

5个视频人声分离方法:一键批量分离人声和背景音乐(操作指南)

视频人声分离指的是从视频文件中提取人声部分&#xff0c;将其与背景音乐分离。想要将视频人声分离&#xff0c;可以使用手机上的音频人声分离app、或电脑端专业的人声分离软件和在线剪辑工具实现&#xff0c;只需要导入文件就可以实现视频人声分离。 本文整理了以下几款视频人…

分治精炼宝库----归并排序应用( ´◔︎ ‸◔︎`)

目录 一.基本概念: 二.归并排序&#xff1a; 三.交易逆序对总数&#xff1a; 四.计算右侧小于当前元素的个数&#xff1a; 五.翻转对&#xff1a; 六.合并k个有序链表&#xff1a; 一.基本概念: &#x1f43b;在计算机科学中&#xff0c;分治法是一种很重要的算法。字面上的…

ImportError: No module named createrepo

我在用createrepo命令创建本地源时,出现如下: ImportError: No module named createrepo原因估计就是之前升级python2.6为2.7时导致(系统为centos7),看网上很多说, 修改/usr/share/createrepo/genpkgmetadata.py 第一行的python路径,但我试了根本无效 我是重新通过yu…

QtCreator/VS中制作带有界面的动态库

1、首先创建动态库项目 class UNTITLED25_EXPORT Untitled25 {public:Untitled25(); };2、直接右键创建同名窗口类进行覆盖 3、引入global头文件并添加到处宏</

Cadence 16.6与17.4个人学习版推荐

一. 简介与下载 Cadence个人学习版是基于Cadence官方发行的安装包做了适当精简和优化的二次打包版本&#xff0c;包括了Cpature原理图设计、PSpice 电路仿真以及Allegro PCB设计等以电子产品设计为主的主要功能&#xff0c;能满足绝大部分硬件工程师的使用需求。 学习版预先已…

SpringBoot使用AutoConfigure实现依赖库自动导入配置

我们知道导入配置有两种&#xff0c;一种是Value&#xff0c;一种是ConfigurationProperties&#xff0c;将对应的类标记为Component即可导入。但是被注解标识的类创建Bean有一个前提&#xff0c;只对启动类所在的包路径下的所有带有Component等注解的类才会创建Bean。如果我们…

高中生都知道:Mybatis-Plus如何生成内置Sql的?

一&#xff1a;文章背景 本文从源码的角度进行分析Mybatis-Plus&#xff0c;为了阅读且吸收的更顺利&#xff0c;希望读者有以下基础: 对Java、Spring、Mybatis、Mybatis-Plus有一定的了解/使用基础对底层源码有略微学习&#xff0c;哪怕是为了框架二开、框架扩展或知识储备本…

【C++】循环、控制流语句、指针

8、循环&#xff08;loops&#xff09;&#xff08;1&#xff09;for loops for循环非常灵活&#xff0c;可以做很多事情。上图红框框出来的代码块就是一个for循环。 for是关键字 for后面内容分为三部分&#xff0c;每部分用分号&#xff1b;隔开 第一部分A是变量的声明&…

20240623(26.0) 重要财经新闻

财经关注 ► 券商中国&#xff1a;北交所于6月21日晚间受理了3家企业的IPO申请。6月20日晚间&#xff0c;沪深交易所各受理了1家IPO申请。这也意味着&#xff0c;三大交易所IPO受理全部恢复。与此同时&#xff0c;三大交易所IPO上市委会议也已经全部重启。 ► 全球多地近期遭遇…

【数据挖掘】机器学习中相似性度量方法-切比雪夫距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

群体优化算法---电磁共振优化算法(EROA)介绍包含示例滤波器设计

介绍 电磁共振优化算法&#xff08;Electromagnetic Resonance Optimization Algorithm, EROA&#xff09;是一种新型的元启发式优化算法&#xff0c;其灵感来源于电磁共振现象。电磁共振是一种物理现象&#xff0c;当一个系统在特定频率下响应最大时&#xff0c;这个频率被称…

数据结构和算法(1) ---- Queue 的原理和实现

Queue 的定义和结构 队列(Queue) 是只允许在一端进行插入&#xff0c;在另一端进行删除的线性表 队列是一种先进先出(First In First Out)的线性表&#xff0c;简称 FIFO(First IN First OUT), 允许插入的一端称为队尾, 允许删除的一端称为队列头 队列的基本结构如下图所示&a…

使用python绘制三维曲面图

使用python绘制三维曲面图 三维曲面图三维曲面图的用途效果代码 三维曲面图 三维曲面图是一种用于展示三维数据的图表&#xff0c;通过一个连续的曲面来表示数据的变化情况。它通常用于可视化数学函数或实验数据的三维关系&#xff0c;可以非常直观地展示变量之间的复杂关系。…

大电流与小电流在检测原理上有区别吗

1 常用电流检测原理 1.1 分流器原理 被测量的电流在输入端电阻上Rshunt形成电压正比于测量电流&#xff0c;通过同相比例电路进行放大输出。 缺点&#xff1a; 输入电流减小时&#xff0c;需要更大的Rshunt&#xff1b;输入电阻Rshunt串入检测回路内将引起被测电流减小&a…

App推广告别邀请码,Xinstall助您一键触达海量用户!

在移动互联网高速发展的今天&#xff0c;App的推广与运营已成为每个开发者都必须面对的问题。然而&#xff0c;随着互联网流量的日益分散和用户需求的不断变化&#xff0c;传统的App推广方式已经难以满足现代市场的需求。尤其是在获取用户时&#xff0c;很多开发者还在采用传统…

我们是否需要AI服务器?推动人工智能繁荣发展的AI服务器

揭穿人工智能服务器的炒作 人工智能的研究已经有几十年了&#xff0c;早在 1960 年代&#xff0c;生成式人工智能就已应用于聊天机器人。然而&#xff0c;2022 年 11 月 30 日发布的 ChatGPT 聊天机器人和虚拟助手席卷了 IT 界&#xff0c;让 GenAI 成为家喻户晓的术语&#x…

(2024.6.23)最新版MAVEN的安装和配置教程(超详细)

1.什么是MAVEN Maven是一个自动化构建工具&#xff0c;主要用于Java项目&#xff0c;它由Apache软件基金会维护。Maven能够自动化完成编译、测试、打包、发布等构建过程&#xff0c;可以大大提高开发效率&#xff0c;保证项目的质量。 下面我们从几个方面来介绍一下MAVEN的功能…