欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種多線程系統(tǒng)的性能提升方法和裝置與流程

文檔序號:12305089閱讀:310來源:國知局
一種多線程系統(tǒng)的性能提升方法和裝置與流程

本發(fā)明屬于存儲系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種多線程系統(tǒng)的性能提升方法和裝置。



背景技術(shù):

隨著數(shù)據(jù)量逐漸增大,人們對存儲系統(tǒng)性能的要求越來越高。現(xiàn)階段的處理器單個核性能越來越難以提升,因此,多核成了處理器發(fā)展的一個方向。一個cpu中存在多個核,所以一個系統(tǒng)中同時運行多個線程能夠提高系統(tǒng)的并發(fā)性,從而顯著提升存儲系統(tǒng)的性能。

然而。限制多線程系統(tǒng)的性能的一個重要因素是鎖,對于一些共享資源的使用,導(dǎo)致線程直接相互牽制,需要用到鎖。當(dāng)多個線程在等待同一個鎖時,相當(dāng)于是單個線程的效率,極大的限制了多線程系統(tǒng)能夠得到的性能提升,所以如何解決鎖的問題是多線程系統(tǒng)中的一個重要問題。



技術(shù)實現(xiàn)要素:

為解決上述問題,本發(fā)明提供了一種多線程系統(tǒng)的性能提升方法和裝置,能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。

本發(fā)明提供的一種多線程系統(tǒng)的性能提升方法,包括:

將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;

創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;

將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;

當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];

當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行。

優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,還包括:

將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。

優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,所述創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列為:

創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。

優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,所述固定個數(shù)的范圍為40個至60個。

優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,所述預(yù)設(shè)閾值的范圍為600毫秒至1000毫秒。

本發(fā)明提供的一種多線程系統(tǒng)的性能提升裝置,包括:

綁定單元,用于將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;

創(chuàng)建單元,用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;

關(guān)聯(lián)單元,用于將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;

添加單元,用于當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];

執(zhí)行單元,用于當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行。

優(yōu)選的,在上述多線程系統(tǒng)的性能提升裝置中,還包括:

任務(wù)拆分單元,用于將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。

優(yōu)選的,在上述多線程系統(tǒng)的性能提升裝置中,所述創(chuàng)建單元具體用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。

通過上述描述可知,本發(fā)明提供的上述多線程系統(tǒng)的性能提升方法和裝置,由于該方法包括將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行,因此能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。

附圖說明

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。

圖1為本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法的示意圖;

圖2為任務(wù)隊列的結(jié)構(gòu)示意圖;

圖3為本申請實施例提供的第一種多線程系統(tǒng)的性能提升裝置的示意圖。

具體實施方式

本發(fā)明的核心思想在于提供一種多線程系統(tǒng)的性能提升方法和裝置,能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。

下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。

本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法如圖1所示,圖1為本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法的示意圖,該方法包括如下步驟:

s1:將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;

具體的,在系統(tǒng)啟動的時候,首先計算當(dāng)前系統(tǒng)處理器有多少個核,然后我們啟動跟核數(shù)相同個數(shù)的線程,并且將每個線程綁定到固定的處理器核上,以減少線程在不同核上切換導(dǎo)致的性能開銷。

s2:創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;

任意一個線程運行過程中都應(yīng)該允許往任意隊列中添加新任務(wù),按常規(guī)做法,線程操作同一個隊列過程中需要加鎖,而本實施例中,為了避免鎖的使用,將每一個線程關(guān)聯(lián)到一組任務(wù)隊列。

s3:將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;

需要說明的是,這個綁定關(guān)系可以改變,但一個時間點,每個線程關(guān)聯(lián)到一組確定的隊列,不同線程關(guān)聯(lián)的隊列不同,這樣同一個時間多個線程不會從同一個隊列取任務(wù),可以避免取任務(wù)加鎖的問題。

s4:當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];

具體的,當(dāng)某個線程需要往任務(wù)隊列添加任務(wù)t時,先確定需要添加任務(wù)到隊列m,即給隊列queues[m][*]對應(yīng)的線程安排任務(wù),然后取到當(dāng)前線程自己對應(yīng)的隊列號n,則該線程將任務(wù)t添加到queues[m][n]。這樣任一線程往任一隊列添加任務(wù)時,不會發(fā)生沖突,添加任務(wù)時不需要加鎖。

s5:當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行。

具體的,每個線程啟動后會執(zhí)行一個無限循環(huán),一直嘗試從它對應(yīng)的任務(wù)隊列中取任務(wù)。每個任務(wù)是一個回調(diào)函數(shù),取到任務(wù)后,該線程將會調(diào)用這個函數(shù)。系統(tǒng)中可以分配max_q*max_q個這樣的隊列,taskqqueues[max_q][max_q],每個線程對應(yīng)max_q個隊列,線程i固定從queues[i][*]中取任務(wù),*表示[0,max_q),這樣每個線程在取任務(wù)的時候不會相互干擾,可以避免加鎖。

通過上述描述可知,本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法,由于包括將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行,因此能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。

本申請實施例提供的第二種多線程系統(tǒng)的性能提升方法,是在上述第一種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:

還包括:

將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。

需要說明的是,為了避免某個線程長時間被某個任務(wù)占用,導(dǎo)致其他任務(wù)得不到處理,導(dǎo)致io超時,這里可以將每個io處理拆分成小塊的任務(wù),每個任務(wù)時間盡量短,每個線程每次取固定個數(shù)的任務(wù)處理,處理完算完成一個周期,一個周期的時間不能超過某個固定的閾值,這樣能保證每個線程都忙碌,且每個任務(wù)都能快速得到執(zhí)行,避免有的io長時間得不到處理,導(dǎo)致超時問題。一個例子如下:一個io處理需要2s,但這2s可能不是連續(xù)干完的,中間可能會等待一些其他條件,處理器是空閑的,這樣可以把這個io拆成若干個小的任務(wù),比如這個任務(wù)原來是:干活0.1s,等待0.7s,干活0.2s,等待0.7s干活0.3s,我們可以把它拆成3段,干活0.1s,處理別的io,再干活0.2s,再去處理別的io,再干活0.3s,完成。

本申請實施例提供的第三種多線程系統(tǒng)的性能提升方法,是在上述第一種或第二種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:

所述創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列為:

創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。

具體的,參考圖2,圖2為任務(wù)隊列的結(jié)構(gòu)示意圖,環(huán)形隊列采用固定長度,填滿后會將多出的任務(wù)鏈接到溢出隊列,線程工作過程中會不斷的從對應(yīng)的隊列中取任務(wù),處理后會將溢出隊列中的任務(wù)補(bǔ)充到環(huán)形隊列中去,這樣既可以得到線性表遍歷快速的好處,又彌補(bǔ)了其容量固定的缺陷。

本申請實施例提供的第四種多線程系統(tǒng)的性能提升方法,是在上述第二種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:

所述固定個數(shù)的范圍為40個至60個。

本申請實施例提供的第五種多線程系統(tǒng)的性能提升方法,是在上述第四種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:

所述預(yù)設(shè)閾值的范圍為600毫秒至1000毫秒。

更進(jìn)一步的,目前的優(yōu)選設(shè)置方案是50個任務(wù)執(zhí)行總時間不超過800毫秒。采用拆分任務(wù)的方法,將任務(wù)盡可能拆分成小塊,能夠避免長時間占用某個線程導(dǎo)致其他任務(wù)得不到調(diào)度而導(dǎo)致io超時的問題,從而提高io的響應(yīng)速度,而且可以相互檢查超時,及時發(fā)現(xiàn)某個線程被長時間占用的情況,并及時做出反應(yīng),方便查找定位問題。

本申請實施例提供的第一種多線程系統(tǒng)的性能提升裝置如圖3所示,圖3為本申請實施例提供的第一種多線程系統(tǒng)的性能提升裝置的示意圖,該裝置包括:

綁定單元301,用于將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上,具體的,在系統(tǒng)啟動的時候,用于計算當(dāng)前系統(tǒng)處理器有多少個核,然后啟動跟核數(shù)相同個數(shù)的線程,并且將每個線程綁定到固定的處理器核上,以減少線程在不同核上切換導(dǎo)致的性能開銷;

創(chuàng)建單元302,用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,任意一個線程運行過程中都應(yīng)該允許往任意隊列中添加新任務(wù),按常規(guī)做法,線程操作同一個隊列過程中需要加鎖,而本實施例中,為了避免鎖的使用,將每一個線程關(guān)聯(lián)到一組任務(wù)隊列;

關(guān)聯(lián)單元303,用于將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列,需要說明的是,這個綁定關(guān)系可以改變,但一個時間點,每個線程關(guān)聯(lián)到一組確定的隊列,不同線程關(guān)聯(lián)的隊列不同,這樣同一個時間多個線程不會從同一個隊列取任務(wù),可以避免取任務(wù)加鎖的問題;

添加單元304,用于當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n],具體的,當(dāng)某個線程需要往任務(wù)隊列添加任務(wù)t時,先確定需要添加任務(wù)到隊列m,即給隊列queues[m][*]對應(yīng)的線程安排任務(wù),然后取到當(dāng)前線程自己對應(yīng)的隊列號n,則該線程將任務(wù)t添加到queues[m][n]。這樣任一線程往任一隊列添加任務(wù)時,不會發(fā)生沖突,添加任務(wù)時不需要加鎖;

執(zhí)行單元305,用于當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行,具體的,每個線程啟動后會執(zhí)行一個無限循環(huán),一直嘗試從它對應(yīng)的任務(wù)隊列中取任務(wù)。每個任務(wù)是一個回調(diào)函數(shù),取到任務(wù)后,該線程將會調(diào)用這個函數(shù)。系統(tǒng)中可以分配max_q*max_q個這樣的隊列,taskqqueues[max_q][max_q],每個線程對應(yīng)max_q個隊列,線程i固定從queues[i][*]中取任務(wù),*表示[0,max_q),這樣每個線程在取任務(wù)的時候不會相互干擾,可以避免加鎖。

本申請實施例提供的第二種多線程系統(tǒng)的性能提升裝置,時在上述第一種多線程系統(tǒng)的性能提升裝置的基礎(chǔ)上,還包括如下技術(shù)特征:

還包括:

任務(wù)拆分單元,用于將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。

需要說明的是,為了避免某個線程長時間被某個任務(wù)占用,導(dǎo)致其他任務(wù)得不到處理,導(dǎo)致io超時,這里可以將每個io處理拆分成小塊的任務(wù),每個任務(wù)時間盡量短,每個線程每次取固定個數(shù)的任務(wù)處理,處理完算完成一個周期,一個周期的時間不能超過某個固定的閾值,這樣能保證每個線程都忙碌,且每個任務(wù)都能快速得到執(zhí)行,避免有的io長時間得不到處理,導(dǎo)致超時問題。一個例子如下:一個io處理需要2s,但這2s可能不是連續(xù)干完的,中間可能會等待一些其他條件,處理器是空閑的,這樣可以把這個io拆成若干個小的任務(wù),比如這個任務(wù)原來是:干活0.1s,等待0.7s,干活0.2s,等待0.7s干活0.3s,我們可以把它拆成3段,干活0.1s,處理別的io,再干活0.2s,再去處理別的io,再干活0.3s,完成。

本申請實施例提供的第三種多線程系統(tǒng)的性能提升裝置,時在上述第一種或第二種多線程系統(tǒng)的性能提升裝置的基礎(chǔ)上,還包括如下技術(shù)特征:

所述創(chuàng)建單元具體用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。

環(huán)形隊列采用固定長度,填滿后會將多出的任務(wù)鏈接到溢出隊列,線程工作過程中會不斷的從對應(yīng)的隊列中取任務(wù),處理后會將溢出隊列中的任務(wù)補(bǔ)充到環(huán)形隊列中去,這樣既可以得到線性表遍歷快速的好處,又彌補(bǔ)了其容量固定的缺陷。

對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
福建省| 崇仁县| 磴口县| 郴州市| 旬阳县| 南开区| 沐川县| 神池县| 普宁市| 东乌| 浪卡子县| 吴川市| 怀集县| 即墨市| 长丰县| 马鞍山市| 井陉县| 广河县| 衢州市| 松阳县| 馆陶县| 贵溪市| 宿州市| 汉阴县| 墨脱县| 汝城县| 天台县| 吴桥县| 延安市| 广汉市| 阜阳市| 图木舒克市| 谷城县| 化州市| 金寨县| 万源市| 鄱阳县| 梁山县| 田东县| 陆川县| 鄂尔多斯市|