国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【linux 多線程并發(fā)】多任務(wù)調(diào)度器,調(diào)度策略時(shí)間片輪轉(zhuǎn),先進(jìn)先出,多種實(shí)時(shí)任務(wù)的策略,內(nèi)核級最高優(yōu)先級調(diào)度策略

這篇具有很好參考價(jià)值的文章主要介紹了【linux 多線程并發(fā)】多任務(wù)調(diào)度器,調(diào)度策略時(shí)間片輪轉(zhuǎn),先進(jìn)先出,多種實(shí)時(shí)任務(wù)的策略,內(nèi)核級最高優(yōu)先級調(diào)度策略。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

任務(wù)調(diào)度器

?專欄內(nèi)容

  • 參天引擎內(nèi)核架構(gòu)
    本專欄一起來聊聊參天引擎內(nèi)核架構(gòu),以及如何實(shí)現(xiàn)多機(jī)的數(shù)據(jù)庫節(jié)點(diǎn)的多讀多寫,與傳統(tǒng)主備,MPP的區(qū)別,技術(shù)難點(diǎn)的分析,數(shù)據(jù)元數(shù)據(jù)同步,多主節(jié)點(diǎn)的情況下對故障容災(zāi)的支持。

  • 手寫數(shù)據(jù)庫toadb
    本專欄主要介紹如何從零開發(fā),開發(fā)的步驟,以及開發(fā)過程中的涉及的原理,遇到的問題等,讓大家能跟上并且可以一起開發(fā),讓每個(gè)需要的人成為參與者。
    本專欄會定期更新,對應(yīng)的代碼也會定期更新,每個(gè)階段的代碼會打上tag,方便階段學(xué)習(xí)。

?開源貢獻(xiàn)

  • toadb開源庫

個(gè)人主頁:我的主頁
管理社區(qū):開源數(shù)據(jù)庫
座右銘:天行健,君子以自強(qiáng)不息;地勢坤,君子以厚德載物.

前言

現(xiàn)代的CPU都是多core處理器,而且在intel處理器中每個(gè)core又可以多個(gè)processor,形成了多任務(wù)并行處理的硬件架構(gòu),在服務(wù)器端的處理器上架構(gòu)又有一些不同,傳統(tǒng)的采用SMP,也就是對稱的多任務(wù)處理架構(gòu),每個(gè)任務(wù)都可以對等的訪問所有內(nèi)存,外設(shè)等,而如今在ARM系列CPU上,多采用NUMA架構(gòu),它將CPU核分了幾個(gè)組,給每個(gè)組的CPU core分配了對應(yīng)的內(nèi)存和外設(shè),CPU訪問對應(yīng)的內(nèi)存和外設(shè)時(shí)速度最優(yōu),跨組訪問時(shí)性能會降底一些。

隨著硬件技術(shù)的持續(xù)發(fā)展,它們對一般應(yīng)用的性能優(yōu)化能力越來越強(qiáng),同時(shí)對于服務(wù)器軟件的開發(fā),提出更高要求,要想達(dá)到極高的并發(fā)和性能,就需要充分利用當(dāng)前硬件架構(gòu)的特點(diǎn),對它們進(jìn)行壓榨。那么,我們的應(yīng)用至少也是要采用多任務(wù)架構(gòu),不管是多線程還是多進(jìn)程的多任務(wù)架構(gòu),才可以充分利用硬件的資源,達(dá)到高效的處理能力。

當(dāng)然多任務(wù)框架的采用,不僅僅是多線程的執(zhí)行,需要對多任務(wù)下帶來的問題進(jìn)行處理,如任務(wù)執(zhí)行返回值獲取,任務(wù)間數(shù)據(jù)的傳遞,任務(wù)執(zhí)行次序的協(xié)調(diào);當(dāng)然也不是任務(wù)越多處理越快,要避免線程過多導(dǎo)致操作系統(tǒng)夯住,也要防止任務(wù)空轉(zhuǎn)過快導(dǎo)致CPU使用率飆高。

本專欄主要介紹使用多線程與多進(jìn)程模型,如何搭建多任務(wù)的應(yīng)用框架,同時(shí)對多任務(wù)下的數(shù)據(jù)通信,數(shù)據(jù)同步,任務(wù)控制,以及CPU core與任務(wù)綁定等相關(guān)知識的分享,讓大家在實(shí)際開發(fā)中輕松構(gòu)建自已的多任務(wù)程序。

概述

現(xiàn)代操作系統(tǒng)都是多任務(wù)的系統(tǒng),它們都會有一個(gè)任務(wù)調(diào)度器的功能,在操作系統(tǒng)課程上,我們也學(xué)過各種任務(wù)調(diào)度算法,在實(shí)際實(shí)現(xiàn)中會依據(jù)各種應(yīng)用場景實(shí)現(xiàn)多套不同的調(diào)度策略。

調(diào)度器介紹

多任務(wù)的調(diào)度是一項(xiàng)非常復(fù)雜的事情,linux的歷史版本中,經(jīng)常會對調(diào)度做一些優(yōu)化,這里簡單介紹一下linux的調(diào)度器。

在CPU中一般會有一個(gè)以上的core,每個(gè)core又可以分多個(gè)processor,常見的就是intel i5,i7的CPU, 在linux 下,可以通過 cat /proc/cpuinfo 查看,每個(gè)’core id’看對應(yīng)幾個(gè)processor。

實(shí)際運(yùn)行的程序任務(wù)數(shù)量遠(yuǎn)遠(yuǎn)大于這些處理器的數(shù)量的,所以操作系統(tǒng)中一般會有一個(gè)調(diào)度器的模塊,通過一定的方法,讓各個(gè)任務(wù)都有機(jī)會在CPU上執(zhí)行,常見的有時(shí)間片輪轉(zhuǎn),先來先服務(wù),優(yōu)先級搶占等策略;操作系統(tǒng)為了應(yīng)對不同的使用場景,也制定了一系統(tǒng)策略供應(yīng)用者選擇。

linux調(diào)度器策略,有一些是給內(nèi)核任務(wù)用的,有一些是留給用戶任務(wù),目前對這些策略分了五大類,這五類之間優(yōu)先級是固定的,按優(yōu)先級從高到低,分別為 Stop, Deadline, Realtime, CFS, Idle,每種類型下可能會有多種調(diào)度策略,下面簡單分享一下。

在調(diào)度器中會維護(hù)一個(gè)任務(wù)的優(yōu)先級隊(duì)列,當(dāng)產(chǎn)生任務(wù)時(shí),會根據(jù)任務(wù)的優(yōu)先級,將它插入到相同優(yōu)先級的任務(wù)隊(duì)列的末尾,當(dāng)有高優(yōu)先級任務(wù)時(shí),會搶占低優(yōu)先級任務(wù)。

而當(dāng)一個(gè)任務(wù)時(shí)間片或周期到時(shí),主動(dòng)釋放CPU后,但任務(wù)還沒有完成,此任務(wù)仍然會重新插入到相同優(yōu)先級的任務(wù)隊(duì)列末尾,如果它是當(dāng)前最高優(yōu)先級任務(wù)時(shí),它會被立即調(diào)度運(yùn)行。

Stop-task scheduling 分類

在linux 內(nèi)核代碼中如下描述

// SPDX-License-Identifier: GPL-2.0
/*
 * stop-task scheduling class.
 *
 * The stop task is the highest priority task in the system, it preempts
 * everything and will be preempted by nothing.
 *
 * See kernel/stop_machine.c
 */
 

Stop scheduling class是優(yōu)先級最高級別的調(diào)度,它可以搶占任何任務(wù)的資源,同時(shí)它不能被搶占,直到它自己完成或釋放CPU。

這一特性決定它只能被內(nèi)核線程使用,主要處理一些CPU切換的任務(wù),也就是調(diào)度器的管理工作,比如通過top命令,可以看到有 migration/1,這里的數(shù)字是CPU core的意思,將任務(wù)在不同core之間遷移的調(diào)度。

deadline scheduling 分類

該分類下有一種處理策略 SCHED_DEADLINE, 這是在linux 3.14版本中引入的,它是用戶線程優(yōu)先級最高的處理級別,使用GEDF (Global Earliest Deadline First) 和 CBS (Constant Bandwidth Server) 兩種算法的結(jié)合。

SCHED_DEADLINE 策略的任務(wù),是以任務(wù)截止時(shí)間為調(diào)度周期,當(dāng)該任務(wù)占用CPU時(shí),會搶占比它優(yōu)先級低的任務(wù)(比如后面大類下的策略任務(wù)),直到任務(wù)的截止時(shí)間到期,或者任務(wù)完成才會釋放CPU。

此類策略主要用于多媒體處理,如音視頻的編解碼處理任務(wù),和其它預(yù)設(shè)任務(wù)期限的處理。

在linux中,使用sched_setattr進(jìn)行設(shè)置。

Realtime(RT) scheduling 分類

此分類下有兩種調(diào)度策略可選,每種策略下還可以指定任務(wù)的優(yōu)先級,優(yōu)先級范圍為 1-99,數(shù)字越大優(yōu)先級越高;

當(dāng)然此大類下的任務(wù)的優(yōu)先級都高于后面介紹的大類的任務(wù),同時(shí)優(yōu)先級也低于前面兩個(gè)大類的任務(wù)。

  • SCHED_FIFO: First in-first out scheduling
    這種策略相對簡單,相同優(yōu)先級的任務(wù)先入隊(duì)的,先進(jìn)行調(diào)度運(yùn)行,直到更高優(yōu)先級任務(wù)搶占,或者任務(wù)完成為止,或者自己釋放CPU。

  • SCHED_RR: Round-robin scheduling
    此種策略是前一種的增強(qiáng),運(yùn)行周期最大為系統(tǒng)定義的時(shí)間片,超過時(shí)間片就會被調(diào)度到隊(duì)列中,時(shí)間片可以通過sched_rr_get_interval函數(shù)進(jìn)行查看。

這兩種策略都可以用pthread_attr_setschedpolicy進(jìn)行設(shè)置。

completely fair (CFS) scheduling 分類

正如分類名稱,完全公平的調(diào)度,這一大類主要用于用戶線程,創(chuàng)建線程時(shí)默認(rèn)策略就是SCHED_OTHER;

此大類下有三種調(diào)度策略可選,它們的優(yōu)先級必須設(shè)置為0,它們使用另一權(quán)重 nice 的設(shè)置,調(diào)整同類策略任務(wù)的優(yōu)先級,nice值范圍為-20 - 19, 值越小權(quán)重越大,也就是優(yōu)先級越高。

  • SCHED_OTHER: Default Linux time-sharing scheduling

默認(rèn)創(chuàng)建線程的策略,在內(nèi)核中的命名是SCHED_NORMAL,也就是用戶線程最常用的一種分時(shí)調(diào)度策略。每個(gè)任務(wù)的可用時(shí)間片由nice值來決定,當(dāng)nice值低時(shí),有更多的時(shí)間來運(yùn)行,當(dāng)nice值高時(shí),運(yùn)行的時(shí)間相比就會少一些;

  • SCHED_BATCH:Scheduling batch processes

主要運(yùn)行一些非交互式的批處理任務(wù),這些任務(wù)需要持續(xù)運(yùn)行一段時(shí)間,它們是計(jì)算密集性,不適合頻繁的調(diào)度。

此策略下的任務(wù)通常在沒有SCHED_OTHER策略的任務(wù)時(shí),才進(jìn)行調(diào)度運(yùn)行。

  • SCHED_IDLE: Scheduling very low priority jobs

此類型策略對應(yīng)的任務(wù)優(yōu)先級最低,通常用于系統(tǒng)中沒有其它任務(wù)時(shí),才進(jìn)行調(diào)度運(yùn)行,它的nice 值對本身的優(yōu)先級沒有影響。

Idle scheduling 分類

SCHED_IDLE是有區(qū)別的,在此分類下暫時(shí)沒有策略可選,它是一種優(yōu)先級最低的調(diào)度類型,目前它不用于用戶級的線程調(diào)度,只用于內(nèi)核調(diào)度器在CPU空閑時(shí)的任務(wù) swapper/1,數(shù)字代表core編號,此時(shí)沒有任務(wù),CPU處于一種節(jié)能模式。

總結(jié)

多任務(wù)操作系統(tǒng),如Windows和Linux,允許多個(gè)程序同時(shí)運(yùn)行,為現(xiàn)代計(jì)算提供了強(qiáng)大的支持。采用多任務(wù)操作系統(tǒng)的原因?yàn)榱颂岣哂?jì)算機(jī)的效率和響應(yīng)速度。在單任務(wù)操作系統(tǒng)中,計(jì)算機(jī)只能一次完成一個(gè)任務(wù),這導(dǎo)致效率低下。而多任務(wù)操作系統(tǒng)通過同時(shí)處理多個(gè)任務(wù),提高了工作效率。例如,在編輯文檔的同時(shí)下載文件或聽音樂,大大增強(qiáng)了用戶的體驗(yàn)。總之,多任務(wù)操作系統(tǒng)滿足了現(xiàn)代社會的多元化需求,為人們提供了便捷、高效的工作與生活方式。

結(jié)尾

非常感謝大家的支持,在瀏覽的同時(shí)別忘了留下您寶貴的評論,如果覺得值得鼓勵(lì),請點(diǎn)贊,收藏,我會更加努力!

作者郵箱:study@senllang.onaliyun.com
如有錯(cuò)誤或者疏漏歡迎指出,互相學(xué)習(xí)。文章來源地址http://www.zghlxwxcb.cn/news/detail-777275.html

到了這里,關(guān)于【linux 多線程并發(fā)】多任務(wù)調(diào)度器,調(diào)度策略時(shí)間片輪轉(zhuǎn),先進(jìn)先出,多種實(shí)時(shí)任務(wù)的策略,內(nèi)核級最高優(yōu)先級調(diào)度策略的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)算法(模擬)計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)5:進(jìn)程調(diào)度算法模擬-RR

    實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)算法(模擬)計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)5:進(jìn)程調(diào)度算法模擬-RR

    實(shí)驗(yàn)內(nèi)容: 實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)算法(模擬),要求如下: 1、用到的數(shù)據(jù)結(jié)構(gòu) /* PCB / struct PCB { pid_t pid;//進(jìn)程 PID int state; //狀態(tài)信息,1 表示正在運(yùn)行,0 表示暫停,-1 表示結(jié)束 unsigned long runned_time;//已運(yùn)行時(shí)間 unsigned long need_running_time;//剩余運(yùn)行時(shí)間 }; / PCB集合 */ struct PCB pcb[TOT

    2024年02月04日
    瀏覽(21)
  • CloudSim云任務(wù)調(diào)度策略擴(kuò)展實(shí)驗(yàn)

    想和大家交流一下實(shí)驗(yàn)結(jié)果是否有問題,謝謝! 基于CloudSim平臺,實(shí)現(xiàn)循環(huán)調(diào)度算法、遺傳調(diào)度算法、Max-min和Min-min算法不同的分配策略,對比不同策略下,任務(wù)的完成時(shí)間、虛擬機(jī)負(fù)載均衡度負(fù)載均衡度。 GitHub地址:GitHub - JianguoLiu1996/CloudSim_Scheduling: Code for CloudSim Schedulin

    2024年02月13日
    瀏覽(21)
  • 任務(wù)調(diào)度之時(shí)間輪實(shí)現(xiàn)

    任務(wù)調(diào)度之時(shí)間輪實(shí)現(xiàn)

    在生活中太陽的東升西落,鳥類的南飛北歸,四級的輪換,每天的上下班,海水的潮汐,每月的房租車貸等等,如果用程序員的視角看,這就是一個(gè)個(gè)的定時(shí)任務(wù),在日常的開發(fā)工作中也有很多的定時(shí)任務(wù)場景: 數(shù)倉系統(tǒng)凌晨進(jìn)行的數(shù)據(jù)同步 訂單12小時(shí)未支付的狀態(tài)校驗(yàn) r

    2024年02月16日
    瀏覽(14)
  • 【多線程系列-03】深入理解java中線程的生命周期,任務(wù)調(diào)度

    【多線程系列-03】深入理解java中線程的生命周期,任務(wù)調(diào)度

    多線程系列整體欄目 內(nèi)容 鏈接地址 【一】深入理解進(jìn)程、線程和CPU之間的關(guān)系 https://blog.csdn.net/zhenghuishengq/article/details/131714191 【二】java創(chuàng)建線程的方式到底有幾種?(詳解) https://blog.csdn.net/zhenghuishengq/article/details/127968166 【三】深入理解java中線程的生命周期,任務(wù)調(diào)度 ht

    2024年02月17日
    瀏覽(27)
  • springcloud:xxl-job的任務(wù)觸發(fā)機(jī)制及調(diào)度過期策略

    springcloud:xxl-job的任務(wù)觸發(fā)機(jī)制及調(diào)度過期策略

    我們都會用xxl-job,但很少有人能夠說清楚xxl-job的任務(wù)觸發(fā)機(jī)制,面臨任務(wù)阻塞、服務(wù)重啟如何處理任務(wù),本期我們就來一起看看xxl-job的任務(wù)觸發(fā)機(jī)制 我們在配置策略時(shí)可以看到有一個(gè) 調(diào)度過期策略 配置,也許你知道這是任務(wù)超期時(shí)的處理規(guī)則,但你有沒有想過什么時(shí)候任

    2024年02月05日
    瀏覽(34)
  • selenium并發(fā)處理多個(gè)窗口線程/進(jìn)程任務(wù)

    這里以百度搜索為例,通過不同的瀏覽器來啟動(dòng)不同的線程。

    2024年01月20日
    瀏覽(20)
  • qt 線程狀態(tài)機(jī)實(shí)現(xiàn)并發(fā)自動(dòng)任務(wù)

    一、狀態(tài)機(jī)類 頭文件 MyStateMachine.h 狀態(tài)機(jī) cpp

    2024年02月13日
    瀏覽(14)
  • 多線程并發(fā)和多任務(wù)并行的小結(jié)

    一、多線程并行的一點(diǎn)小結(jié) 1.無論是thread::spawn還是tokio::spawn,都是創(chuàng)建一個(gè)線程或者任務(wù)去執(zhí)行閉包的函數(shù)體。thread::spawn接受一個(gè)閉包作為參數(shù),并返回一個(gè) JoinHandle,其中 T 是閉包的返回類型。創(chuàng)建的新線程將在后臺運(yùn)行,并執(zhí)行閉包中的代碼。 2.多線程并行:其他的高級

    2024年02月10日
    瀏覽(22)
  • for循環(huán)內(nèi)線程池并發(fā)執(zhí)行任務(wù),等到子線程全部處理完任務(wù),主線程在執(zhí)行java的實(shí)現(xiàn)方式

    for循環(huán)內(nèi)線程池并發(fā)執(zhí)行任務(wù),等到子線程全部處理完任務(wù),主線程在執(zhí)行 方式一 使用 CountDownLatch 在 Java 中,您可以使用 CountDownLatch 來實(shí)現(xiàn)主線程等待子線程執(zhí)行完成的功能。CountDownLatch 是一個(gè)同步工具類,它允許一個(gè)或多個(gè)線程等待其他線程完成操作后再繼續(xù)執(zhí)行。 具

    2024年02月11日
    瀏覽(21)
  • 基于MATLAB的多無人機(jī)多任務(wù)調(diào)度算法——CBBA帶時(shí)間窗

    基于MATLAB的多無人機(jī)多任務(wù)調(diào)度算法——CBBA帶時(shí)間窗 簡介: 多無人機(jī)(Multi-UAV)的多任務(wù)調(diào)度是無人機(jī)應(yīng)用領(lǐng)域的重要問題之一。CBBA(Consensus-based Bundle Algorithm)是一種用于多無人機(jī)多任務(wù)調(diào)度的經(jīng)典算法之一。本文將介紹基于MATLAB的CBBA算法,并對其進(jìn)行改進(jìn),加入時(shí)間窗

    2024年02月02日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包