一種分布式文件系統(tǒng)的線程分配方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及線程分配技術(shù)領(lǐng)域,特別是涉及一種分布式文件系統(tǒng)的線程分配方法及系統(tǒng)。
【背景技術(shù)】
[0002]目前,在分布式文件系統(tǒng)中的多線程消息通常是使用基于文件描述符的hash算法進(jìn)行分發(fā)的,這種算法存在一個(gè)缺陷,就是容易出現(xiàn)所有讀寫請求任務(wù)都往某個(gè)或某幾個(gè)線程轉(zhuǎn)發(fā),特別是當(dāng)文件描述符不是連續(xù)的時(shí)候,極端情況下會(huì)導(dǎo)致所有文件都分配到一個(gè)線程中,而其他線程一直處于空閑,使得所有讀寫請求任務(wù)都積壓到一個(gè)線程隊(duì)中,導(dǎo)致很多請求長時(shí)間不能得到處理,導(dǎo)致系統(tǒng)處理效率低;同時(shí),所有讀寫請求任務(wù)都積壓到一個(gè)線程隊(duì)中,使得系統(tǒng)的資源得不到充分利用,易導(dǎo)致整個(gè)系統(tǒng)的性能急劇下降。
[0003]因此,亟需一種能夠均衡多線程池中各個(gè)線程處理的請求數(shù)量,進(jìn)而保證系統(tǒng)的處理高效性和性能穩(wěn)定性。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種分布式文件系統(tǒng)的線程分配方法及系統(tǒng),以實(shí)現(xiàn)均衡多線程池中各個(gè)線程處理的請求數(shù)量,進(jìn)而保證系統(tǒng)的處理高效性和性能穩(wěn)定性的目的。
[0005]為解決上述技術(shù)問題,本發(fā)明提供一種分布式文件系統(tǒng)的線程分配方法,該方法包括:
[0006]獲取攜帶文件描述符的讀寫請求;
[0007]判斷是否存在與所述文件描述符相對應(yīng)的線程;
[0008]如果存在,則將所述讀寫請求分配至所述相對應(yīng)的線程;
[0009]如果不存在,則將所述讀寫請求分配至平衡鏈表中管理文件數(shù)量最少的線程;
[0010]其中,所述平衡鏈表包括多個(gè)節(jié)點(diǎn),各所述節(jié)點(diǎn)包括線程及其相應(yīng)的管理文件數(shù)量。
[0011 ] 上述方法中,優(yōu)選地,所述判斷是否存在與所述文件描述符相對應(yīng)的線程,包括:
[0012]在map的所有鍵值對中,判斷是否存在主鍵為所述文件描述符的鍵值對;
[0013]如果存在,則認(rèn)為存在與所述文件描述符相對應(yīng)的線程;
[0014]如果不存在,則認(rèn)為不存在與所述文件描述符相對應(yīng)的線程;
[0015]其中,與所述主鍵相對應(yīng)的主鍵值為與所述文件描述符相對應(yīng)的線程ID。
[0016]上述方法中,優(yōu)選地,在所述將所述讀寫請求分配至平衡鏈表中管理文件數(shù)量最少的線程之后,還包括:
[0017]新建一鍵值對,并將所述文件描述符和所述管理文件數(shù)量最少的線程記錄至新建的鍵值對中;
[0018]將所述管理文件數(shù)量最少的線程所對應(yīng)的管理文件數(shù)量加1。
[0019]上述方法中,優(yōu)選地,當(dāng)檢測到攜帶所述文件描述符的文件關(guān)閉指令時(shí),還包括:
[0020]在所述map中,將所述主鍵為所述文件描述符的鍵值對刪除;
[0021 ] 在所述平衡鏈表中,將被分配所述讀寫請求的線程所對應(yīng)的管理文件數(shù)量減1。
[0022]上述方法中,優(yōu)選地,所述將所述讀寫請求分配至平衡鏈表中管理文件數(shù)量最少的線程,包括:
[0023]將所述讀寫請求分配至所述平衡鏈表中第一個(gè)節(jié)點(diǎn)所對應(yīng)的線程;
[0024]其中,所述平衡鏈表中所有節(jié)點(diǎn)按所述管理文件數(shù)據(jù)量由小到大排列。
[0025]本發(fā)明還提供了一種分布式文件系統(tǒng)的線程分配系統(tǒng),該系統(tǒng)包括:
[0026]獲取單元,用于獲取攜帶文件描述符的讀寫請求;
[0027]判斷單元,用于判斷是否存在與所述文件描述符相對應(yīng)的線程;
[0028]線程分配單元,用于如果存在,則將所述讀寫請求分配至所述相對應(yīng)的線程;如果不存在,則將所述讀寫請求分配至平衡鏈表中管理文件數(shù)量最少的線程;
[0029]其中,所述平衡鏈表包括多個(gè)節(jié)點(diǎn),各所述節(jié)點(diǎn)包括線程及其相應(yīng)的管理文件數(shù)量。
[0030]上述系統(tǒng)中,優(yōu)選地,所述判斷單元具體用于:
[0031]在map的所有鍵值對中,判斷是否存在主鍵為所述文件描述符的鍵值對;如果存在,則認(rèn)為存在與所述文件描述符相對應(yīng)的線程;如果不存在,則認(rèn)為不存在與所述文件描述符相對應(yīng)的線程;
[0032]其中,與所述主鍵相對應(yīng)的主鍵值為與所述文件描述符相對應(yīng)的線程ID。
[0033]上述系統(tǒng)中,優(yōu)選地,還包括:
[0034]鍵值對管理單元,用于在所述將所述讀寫請求分配至平衡鏈表中管理文件數(shù)量最少的線程之后,新建一鍵值對,并將所述文件描述符和所述管理文件數(shù)量最少的線程記錄至新建的鍵值對中;
[0035]管理文件數(shù)量管理單元,用于將所述管理文件數(shù)量最少的線程所對應(yīng)的管理文件數(shù)量加1。
[0036]上述系統(tǒng)中,優(yōu)選地,所述鍵值對管理單元還用于當(dāng)檢測到攜帶所述文件描述符的文件關(guān)閉指令時(shí),在所述map中,將所述主鍵為所述文件描述符的鍵值對刪除;
[0037]所述管理文件數(shù)量管理單元還用于當(dāng)檢測到攜帶所述文件描述符的文件關(guān)閉指令時(shí),在所述平衡鏈表中,將被分配所述讀寫請求的線程所對應(yīng)的管理文件數(shù)量減1。
[0038]上述系統(tǒng)中,優(yōu)選地,線程分配單元用于將所述讀寫請求分配至平衡鏈表中管理文件數(shù)量最少的線程,包括:
[0039]所述線程分配單元具體用于將所述讀寫請求分配至所述平衡鏈表中第一個(gè)節(jié)點(diǎn)所對應(yīng)的線程;
[0040]其中,所述平衡鏈表中所有節(jié)點(diǎn)按所述管理文件數(shù)據(jù)量由小到大排列。
[0041]以上本發(fā)明提供的一種分布式文件系統(tǒng)的線程分配方法及系統(tǒng)中,平衡鏈表包括多個(gè)節(jié)點(diǎn),各節(jié)點(diǎn)包括線程及其相應(yīng)的管理文件數(shù)量,平衡鏈表中記錄了多線程池中所有線程及其相應(yīng)的管理文件數(shù)量,基于此,先獲取攜帶文件描述符的讀寫請求;然后判斷是否存在與所述文件描述符相對應(yīng)的線程;如果存在,認(rèn)為這不是該文件描述符對應(yīng)的第一次讀寫請求,先前已經(jīng)為其分配過相應(yīng)的線程,則將讀寫請求分配至這個(gè)相對應(yīng)的線程;如果不存在,認(rèn)為這是該文件描述符對應(yīng)的第一次讀寫請求,需要從多線程池中為其分配一合適的線程,則將所述讀寫請求分配至平衡鏈表中管理文件數(shù)量最少的線程??梢?,本發(fā)明實(shí)現(xiàn)了均衡多線程池中各個(gè)線程處理的請求數(shù)量,進(jìn)而保證系統(tǒng)的處理高效性和性能穩(wěn)定性的目的。
【附圖說明】
[0042]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0043]圖1為本發(fā)明實(shí)施例提供的一種分布式文件系統(tǒng)的線程分配方法的流程圖;
[0044]圖2為本發(fā)明實(shí)施例提供的一種分布式文件系統(tǒng)的線程分配系統(tǒng)的結(jié)構(gòu)框圖示意圖。
【具體實(shí)施方式】
[0045]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0046]本發(fā)明的核心是提供一種分布式文件系統(tǒng)的線程分配方法及系統(tǒng),以實(shí)現(xiàn)均衡多線程池中各個(gè)線程處理的請求數(shù)量,進(jìn)而保證系統(tǒng)的處理高效性和性能穩(wěn)定性的目的。
[0047]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和【具體實(shí)施方式】對本發(fā)明作進(jìn)一步的詳細(xì)說明。
[0048]參考圖1,圖1示出了本發(fā)明實(shí)施例提供的一種分布式文件系統(tǒng)的線程分配方法的流程圖,該方法具體可以包括如下步驟:
[0049]步驟S100、獲取攜帶文件描述符的讀寫請求。
[0050]本發(fā)明所提供的技術(shù)方案主要針對分布式文件系統(tǒng)NAS網(wǎng)關(guān)中的負(fù)載均衡,讓每個(gè)線程處理的請求數(shù)量趨于一致,從而達(dá)到負(fù)載均衡的效果。
[0051]本發(fā)明中,不同文件對應(yīng)不同的文件描述符,文件與文件描述符--對應(yīng)。對某個(gè)文件發(fā)起讀寫操作時(shí),生成攜帶該文件對應(yīng)的文件描述符的讀寫請求。本發(fā)明所涉及的讀寫請求泛指對文件的各種操作,比如讀操作、寫操作等等。
[0052]步驟S101、判斷是否存在與文件描述符相對應(yīng)的線程;如果存在,則進(jìn)入步驟S102 ;如果不存在,則進(jìn)入步驟S103。
[0053]本發(fā)明中,在獲取讀寫請求之后判斷是否存在與讀寫請求攜帶的文件描述符對應(yīng)的線程是為了判斷本次讀寫請求是否是該文件的第一次請求,如果是,則需要執(zhí)行步驟S103從多線程池中為其分配一合適的線程,然后將本次讀寫請求分配出去;如果不是,可以理解的是,先前已經(jīng)為該文件分配過合適的線程,此時(shí),進(jìn)入步驟S102將本次讀寫請求分配給之前分配的線程即可。
[0054]進(jìn)一步地,為了能夠方便、快捷地判斷是否存在與文件描述符相對應(yīng)的線程,可以創(chuàng)建一個(gè)map數(shù)據(jù)結(jié)構(gòu),對于map中每個(gè)鍵值對,文件描述符為主鍵,線程ID為值,該線程ID所對應(yīng)的線程為已分配給主鍵中文件描述符對應(yīng)的文件,簡單來說,即文件描述符與線程ID—一對應(yīng)??梢岳斫獾氖牵趯?shí)際應(yīng)用中,只要為某個(gè)文件的讀寫請求分配過線程,那么他們相對應(yīng)的文件描述符和線程ID就會(huì)以鍵值對的形式記錄在map中。
[0055]基于此,要判斷是否存在與文件描述符相對應(yīng)的線程,即判斷在map的所有鍵值對中是否存在主鍵為文件描述符的鍵值對;如果存在,則認(rèn)為存在與文件描述符相對應(yīng)的線程;如果不存在,則認(rèn)為不存在與文件描述符相對應(yīng)的線程;其中,與主鍵相對應(yīng)的主鍵值為與文件描述符相對應(yīng)的線程