亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種多線程管理方法及裝置制造方法

文檔序號:6516901閱讀:172來源:國知局
一種多線程管理方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種多線程管理方法及裝置,適用于由操作系統(tǒng)控制多個線程的架構(gòu)中,其中多個線程包括:主線程和多個工作線程,方法包括:在主線程接受客戶端的連接請求之后,將客戶端的相關(guān)信息封裝成處理任務(wù);主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程;主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中;主線程激活所選擇的工作線程,由所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。通過本發(fā)明的實施例能夠避免主線程向工作線程分配任務(wù)時對系統(tǒng)資源的浪費。
【專利說明】一種多線程管理方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機【技術(shù)領(lǐng)域】,尤其涉及一種多線程管理方法及裝置。
【背景技術(shù)】
[0002]很多軟件為了充分發(fā)揮多核CPU (中央處理器)的性能,其架構(gòu)使用了多進程或多線程模式,多線程與多進程相比,因為所有線程同處于一個地址空間,在共享資源上有天然的優(yōu)勢,所以大部分軟件使用多線程模式。在多線程模式中,往往有主線程和工作線程之分,其中主線程只有一個,用來接收客戶端的連接,然后將待處理的任務(wù)分配給工作線程,會有多個工作線程接收主線程的任務(wù)分配命令,來具體處理客戶端的請求。
[0003]然而,在現(xiàn)有技術(shù)中,當(dāng)主線程向工作線程分配任務(wù)時,往往所有的工作線程都會從睡眠狀態(tài)中被激活,然而只有其中一個工作線程可以獲取到處理任務(wù)并進行相應(yīng)的處理,而其他工作線程則繼續(xù)睡眠。由于大部分的工作線程會經(jīng)歷由睡眠到被喚醒,再到睡眠的過程,導(dǎo)致現(xiàn)有技術(shù)中主線程向工作線程分配任務(wù)時,會浪費大量的系統(tǒng)資源。

【發(fā)明內(nèi)容】

[0004]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的多線程管理方法及裝置,避免系統(tǒng)資源的浪費。
[0005]依據(jù)本發(fā)明的實施例的一個方面,提供了一種多線程管理方法,適用于由操作系統(tǒng)控制多個線程的架構(gòu)中,其中多個線程包括:主線程和多個工作線程,方法包括:在主線程接受客戶端的連接請求之后,將客戶端的相關(guān)信息封裝成處理任務(wù);主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程;主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中;主線程激活選擇的工作線程,由所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0006]可選地,在主線程接受客戶端的連接請求之前,方法還包括:在主線程啟動之后,生成與每個工作線程對應(yīng)的文件描述符和任務(wù)隊列;每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,主線程監(jiān)聽客戶端的連接請求。
[0007]可選地,預(yù)先設(shè)定的工作線程選擇策略包括:根據(jù)每個工作線程所對應(yīng)的任務(wù)隊列的長度,從多個工作線程中選出當(dāng)前任務(wù)隊列最短的工作線程;或,根據(jù)每個工作線程的負(fù)載的大小,從多個工作線程中選出負(fù)載最輕的工作線程。
[0008]可選地,主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中的步驟為:主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列的隊尾。
[0009]可選地,主線程激活所選擇的工作線程,由所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理的步驟包括:主線程向選擇的工作線程對應(yīng)的文件描述符發(fā)送消息,以激活所選擇的工作線程;在選擇的工作線程在收到對應(yīng)的文件描述符上的讀事件后,從選擇的工作線程的任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0010]依據(jù)本發(fā)明的另一個方面,還提供了一種多線程管理裝置,適用于由操作系統(tǒng)控制多個線程的架構(gòu)中,其中多個線程包括:主線程和多個工作線程,裝置包括:封裝模塊,用于在主線程接受客戶端的連接請求之后,控制主線程將客戶端的相關(guān)信息封裝成處理任務(wù);選擇模塊,用于控制主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程;寫入模塊,用于控制主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中;激活模塊,用于控制主線程激活所選擇的工作線程,并控制所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0011]可選地,裝置還包括:生成模塊,用于在主線程啟動之后,生成與每個工作線程對應(yīng)的文件描述符和任務(wù)隊列;監(jiān)聽模塊,用于控制每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,以及控制主線程監(jiān)聽客戶端的連接請求。
[0012]可選地,預(yù)先設(shè)定的工作線程選擇策略包括:根據(jù)每個工作線程所對應(yīng)的任務(wù)隊列的長度,從多個工作線程中選出當(dāng)前任務(wù)隊列最短的工作線程;或,根據(jù)每個工作線程的負(fù)載的大小,從多個工作線程中選出負(fù)載最輕的工作線程。
[0013]可選地,寫入模塊進一步用于將封裝得到的處理任務(wù)寫入到所選擇的工作線程模塊的任務(wù)隊列的隊尾。
[0014]可選地,激活模塊包括:激活單元,用于控制主線程向所選擇的工作線程對應(yīng)的文件描述符發(fā)送消息,以激活所選擇的工作線程;處理單元,用于控制所選擇的工作線程在收到對應(yīng)的文件描述符上的讀事件后,從所選擇的工作線程的任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0015]由上述技術(shù)方案可知,在本發(fā)明的實施例中具有下面有益效果:
[0016]I)在本發(fā)明的實施例中,主線程可以根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程,然后主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中,也就是主線程分配任務(wù)時,一次只激活一個工作線程,不再存在工作線程的無謂喚醒-再睡眠,避免了主線程向工作線程分配任務(wù)是對系統(tǒng)資源的浪費。
[0017]2)在本發(fā)明的實施例中,主線程激活所選擇的工作線程,由所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理,即每個工作線程只從自己的隊列里讀取處理任務(wù),避免多個工作線程對全局任務(wù)隊列的爭用,提高并發(fā)度。
[0018]3)在本發(fā)明的實施例中,主線程可以根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程,例如主線程在分配任務(wù)時,可以分配給當(dāng)前任務(wù)隊列長度最短或負(fù)載最輕的工作線程,有助于維持各個工作線程的負(fù)載均衡。
[0019]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【專利附圖】

【附圖說明】
[0020]通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0021]圖1示出了現(xiàn)有技術(shù)中多線程應(yīng)用程序中的線程模型的示意圖;
[0022]圖2示出了根據(jù)本發(fā)明一個實施例的多線程管理方法的流程圖;
[0023]圖3示出了根據(jù)本發(fā)明一個實施例的多線程應(yīng)用程序中的線程模型的示意圖;以及
[0024]圖4示出了根據(jù)本發(fā)明一個實施例的多線程管理裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0025]下面將參照附圖更詳細(xì)地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
[0026]如圖1所示,為現(xiàn)有技術(shù)中多線程應(yīng)用程序中的線程模型,該多線程應(yīng)用程序包括一個主線程和三個工作線程(例如工作線程1、工作線程2和工作線程3),程序里有一個文件描述符fd (file descriptor),主線程可以用該文件描述符fd把處理任務(wù)分配給工作線程,所有的工作線程(工作線程1、工作線程2和工作線程3)都可以監(jiān)聽文件描述符fd上的讀事件。
[0027]主線程在啟動后就可以監(jiān)聽客戶端的連接,當(dāng)有客戶端發(fā)起連接后,主線程接受該連接,該主線程可以將客戶端的相關(guān)信息封裝成一個格式為CON包(Concurrent包)格式的處理任務(wù),把CON包放入一個全局任務(wù)隊列(即所有的工作線程共用一個任務(wù)隊列)里。然后主線程向文件描述符fd發(fā)送消息,該消息會使得監(jiān)聽文件描述符fd的三個工作線程都接收到讀事件。工作線程收到讀事件即代表主線程有處理任務(wù)要分配給工作線程,于是工作線程從全局任務(wù)隊列里將CON包取出,根據(jù)CON包里的內(nèi)容去進行相應(yīng)的處理。然而,在主線程向文件描述符fd發(fā)送消息時,所有的工作線程(工作線程1、工作線程2和工作線程3)都會收到讀事件,從而所有的工作線程從睡眠狀態(tài)被激活,然后都去全局任務(wù)隊列里取CON包,但只有一個工作線程能取到CON包并進行處理,其他的工作線程繼續(xù)睡眠,此即所謂“驚群”現(xiàn)象,該現(xiàn)象會造成無謂的系統(tǒng)開銷。
[0028]下面結(jié)合圖2來說明根據(jù)本發(fā)明一個實施例的、適于解決上述技術(shù)問題的多線程管理方法的流程圖,該方法適用于由操作系統(tǒng)控制多個線程的架構(gòu)中,其中多個線程包括:主線程和多個工作線程。
[0029]如圖2所示,方法200始于步驟S201,在步驟S201中,在主線程接受客戶端的連接請求之后,主線程將客戶端的相關(guān)信息封裝成處理任務(wù)。
[0030]在本發(fā)明的實施例中,主線程負(fù)責(zé)監(jiān)聽客戶端的連接請求,在主線程監(jiān)聽到并接受客戶端的連接請求之后,主線程可以將客戶端的相關(guān)信息,例如客戶端的地址信息、來自客戶端的指令信息等,封裝成格式為預(yù)先設(shè)定的數(shù)據(jù)結(jié)構(gòu)的處理任務(wù),該主線程可以通過處理任務(wù)向工作線程分配任務(wù),來具體處理客戶端的請求。可選地,在本發(fā)明的實施例中,預(yù)先設(shè)定的數(shù)據(jù)結(jié)構(gòu)為CON包的結(jié)構(gòu),當(dāng)然也并不限于此。
[0031]隨后,在步驟S203中,主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程。[0032]可選地,在本發(fā)明的實施例中,預(yù)先設(shè)定的工作線程選擇策略包括:
[0033](I)根據(jù)每個工作線程所對應(yīng)的任務(wù)隊列的長度,從多個工作線程中選出當(dāng)前任務(wù)隊列最短的工作線程。例如:工作線程I的任務(wù)隊列中包括三個處理任務(wù),則可以理解為該工作線程I的任務(wù)隊列的長度為3,工作線程2的任務(wù)隊列中包括四個處理任務(wù),則可以理解為工作線程2的任務(wù)隊列的長度為4,如果將工作線程I的任務(wù)隊列的長度與工作線程2的任務(wù)隊列的長度進行比較的話,可知工作線程I的任務(wù)隊列的長度最短。因此,主線程可以根據(jù)預(yù)先設(shè)定的工作線程選擇策略選擇工作線程I。或者
[0034](2)根據(jù)每個工作線程的負(fù)載的大小,從多個工作線程中選出負(fù)載最輕的工作線程。
[0035]在現(xiàn)有技術(shù)中,由于沒有考慮各個工作線程當(dāng)前的負(fù)載情況,而只依靠多個工作線程去爭取全局任務(wù)隊列的處理任務(wù),從而造成各個工作線程的負(fù)載不均衡。而在本發(fā)明的實施例中,主線程在分配任務(wù)時,可以將任務(wù)分配給當(dāng)前任務(wù)隊列最短,或者負(fù)載最輕的工作線程,以有助于維持各個工作線程的負(fù)載均衡。
[0036]隨后,在步驟S205中,主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中。
[0037]在現(xiàn)有技術(shù)中,由于有大量的客戶端會頻繁向主線程發(fā)送連接請求,主線程的任務(wù)分配操作也會比較快,會頻繁向全局任務(wù)隊列寫入處理任務(wù),工作線程也要頻繁地從全局任務(wù)隊列中取出處理任務(wù),然而多個工作線程對同一個任務(wù)隊列中的處理任務(wù)同時進行操作,很容易造成數(shù)據(jù)的不一致,為了避免數(shù)據(jù)的不一致,在現(xiàn)有技術(shù)中,必須在讀寫操作之前對處理任務(wù)加鎖,在操作完成后解鎖,由此會導(dǎo)致線程并發(fā)度較低,程序運行效率不聞。
[0038]而在本發(fā)明的實施例中,每個工作線程都有自己的任務(wù)隊列,主線程在分配任務(wù)時,可以只向所選擇的工作線程(例如一個工作線程)的任務(wù)隊列中寫入處理任務(wù),使得被分配任務(wù)的工作線程可以從自己的任務(wù)隊列中讀取處理任務(wù),避免了多個工作線程對任務(wù)隊列的爭用,提高了線程的并發(fā)度。
[0039]可選地,在本發(fā)明的實施例中,主線程可以將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列的隊尾。如圖3所示,在工作線程I的任務(wù)隊列中最右側(cè)的CON包位于任務(wù)隊列的隊尾。
[0040]隨后,在步驟S207中,主線程激活所選擇的工作線程,由所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0041]在本發(fā)明的實施例中,線程可以向所選擇的工作線程對應(yīng)的文件描述符發(fā)送消息(例如單字節(jié)消息),以激活所選擇的工作線程;所選擇的工作線程收到對應(yīng)的文件描述符上的讀事件后,從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0042]在本發(fā)明的實施例中,每個工作線程可以具有與該工作線程對應(yīng)的文件描述符,每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,主線程在分配任務(wù)時,可以只向一個文件描述符發(fā)送單字節(jié)消息,也就是只有一個工作線程被激活,從而避免了現(xiàn)有技術(shù)中工作線程“驚群”的現(xiàn)象。
[0043]可選地,在本發(fā)明的實施例中,在步驟S201之前,方法200還包括:步驟S209和步驟 S210。
[0044]在步驟S209中,在主線程啟動之后,生成與每個工作線程對應(yīng)的文件描述符和任務(wù)隊列。
[0045]文件描述符在形式上可以是一個非負(fù)整數(shù)。該文件描述符相當(dāng)于是一個索引值,指向內(nèi)核為每一個進程所維護的該進程打開文件的記錄表。當(dāng)程序打開一個現(xiàn)有文件或者創(chuàng)建一個新文件時,內(nèi)核向進程返回一個文件描述符。
[0046]參見圖3,工作線程I具有與其對應(yīng)的文件描述符fdl和任務(wù)隊列;工作線程2具有與其對應(yīng)的文件描述符fd2和任務(wù)隊列;工作線程3具有與其對應(yīng)的文件描述符fd3和任務(wù)隊列。
[0047]隨后,在步驟S210中,每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,主線程監(jiān)聽客戶端的連接請求。如果主線程監(jiān)聽到客戶的連接請求,并且在主線程接受客戶端的連接請求之后,則可以進入步驟S201。
[0048]在本發(fā)明的實施例中,文件描述符上的事件類型可以包括:讀事件、寫事件、注冊事件、修改事件等。
[0049]需要說明的是,圖2所示的方法并不限定按所示的各步驟的順序進行,可以根據(jù)需要調(diào)整各步驟的先后順序,另外,所述步驟也不限定于上述步驟劃分,上述步驟可以進一步拆分成更多步驟也可以合并成更少步驟。
[0050]下面結(jié)合圖3所示的本發(fā)明實施例中的多線程應(yīng)用程序中的線程模型來介紹多線程管理方法,其中,依據(jù)該實施例的多線程應(yīng)用程序包括一個主線程和三個工作線程(例如工作線程1、工作線程2和工作線程3),每一個工作線程都有對應(yīng)的文件描述符fd(filedescriptor),工作線程I與文件描述符fdl對應(yīng),工作線程2與文件描述符fd2對應(yīng),工作線程3與文件描述符3對應(yīng)。主線程可以用文件描述符把處理任務(wù)分配給相應(yīng)的工作線程,每個工作線程可以監(jiān)聽與其對應(yīng)的文件描述符fd上的讀事件。
[0051]該多線程管理方法的具體過程如下:在主線程接受客戶端的連接請求之后,可以將客戶端的相關(guān)信息封裝成格式為CON包格式的處理任務(wù)(以CON表示),主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程,例如選擇工作線程2 ;主線程將封裝得到CON結(jié)構(gòu)寫入到所選擇的工作線程2的任務(wù)隊列中;主線程可以向工作線程2對應(yīng)的文件描述符fd2發(fā)送單字節(jié)消息,以激活工作線程2 ;在工作線程2收到對應(yīng)的文件描述符fd2上的讀事件后,從其任務(wù)隊列的隊尾處中取出CON結(jié)構(gòu),并由工作線程2根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0052]下面結(jié)合圖4說明根據(jù)本發(fā)明一個實施例、適于解決上述技術(shù)問題的一種多線程管理裝置,適用于由操作系統(tǒng)控制多個線程的架構(gòu)中,其中多個線程包括:主線程和多個工作線程。
[0053]如圖4所示,根據(jù)本發(fā)明的實施例的多線程管理裝置400可以主要包括:封裝模塊401、選擇模塊403、寫入模塊405和激活模塊407。應(yīng)當(dāng)理解,圖4中所表示的各個模塊的連接關(guān)系僅為示例,本領(lǐng)域技術(shù)人員完全可以采用其它的連接關(guān)系,只要在這樣的連接關(guān)系下各個模塊也能夠?qū)崿F(xiàn)本發(fā)明的功能即可。
[0054]在本說明書中,各個模塊的功能可以通過使用專用硬件、或者能夠與適當(dāng)?shù)能浖嘟Y(jié)合來執(zhí)行處理的硬件來實現(xiàn)。這樣的硬件或?qū)S糜布梢园▽S眉呻娐?ASIC)、各種其它電路、各種處理器等。當(dāng)由處理器實現(xiàn)時,該功能可以由單個專用處理器、單個共享處理器、或者多個獨立的處理器(其中某些可能被共享)來提供。另外,處理器不應(yīng)該被理解為專指能夠執(zhí)行軟件的硬件,而是可以隱含地包括、而不限于數(shù)字信號處理器(DSP)硬件、用來存儲軟件的只讀存儲器(ROM)、隨機存取存儲器(RAM)、以及非易失存儲設(shè)備。
[0055]在本發(fā)明的實施例中,封裝模塊401用于在主線程接受客戶端的連接請求之后,控制主線程將客戶端的相關(guān)信息封裝成處理任務(wù)。在本發(fā)明的實施例中,主線程負(fù)責(zé)監(jiān)聽客戶端的連接請求,在主線程監(jiān)聽到并接受客戶端的連接請求之后,封裝模塊401可以控制主線程將客戶端的相關(guān)信息,例如客戶端的地址信息、來自客戶端的指令信息等,封裝成格式為預(yù)先設(shè)定的數(shù)據(jù)結(jié)構(gòu)的處理任務(wù)??蛇x地,在本發(fā)明的實施例中,預(yù)先設(shè)定的數(shù)據(jù)結(jié)構(gòu)為CON包的結(jié)構(gòu),當(dāng)然也并不限于此。
[0056]在本發(fā)明的實施例中,選擇模塊403用于控制主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程。
[0057]可選地,在本發(fā)明的實施例中,預(yù)先設(shè)定的工作線程選擇策略包括:
[0058](I)根據(jù)每個工作線程所對應(yīng)的任務(wù)隊列的長度,從多個工作線程中選出當(dāng)前任務(wù)隊列最短的工作線程。例如:工作線程I的任務(wù)隊列中包括三個處理任務(wù),則可以理解為該工作線程I的任務(wù)隊列的長度為3,工作線程2的任務(wù)隊列中包括四個處理任務(wù),則可以理解為工作線程2的任務(wù)隊列的長度為4,如果將工作線程I的任務(wù)隊列的長度與工作線程2的任務(wù)隊列的長度進行比較的話,可知工作線程I的任務(wù)隊列的長度最短。因此,主線程可以根據(jù)預(yù)先設(shè)定的工作線程選擇策略選擇工作線程I?;蛘?br> [0059](2)根據(jù)每個工作線程的負(fù)載的大小,從多個工作線程中選出負(fù)載最輕的工作線程。
[0060]在現(xiàn)有技術(shù)中,由于沒有考慮各個工作線程當(dāng)前的負(fù)載情況,而只依靠多個工作線程去爭取全局任務(wù)隊列的處理任務(wù),從而造成各個工作線程的負(fù)載不均衡。而在本發(fā)明的實施例中,主線程在分配任務(wù)時,可以將任務(wù)分配給當(dāng)前任務(wù)隊列最短,或者負(fù)載最輕的工作線程,以有助于維持各個工作線程的負(fù)載均衡。
[0061]在本發(fā)明的實施例中,寫入模塊405用于控制主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中。
[0062]在現(xiàn)有技術(shù)中,由于有大量的客戶端會頻繁向主線程發(fā)送連接請求,主線程的任務(wù)分配操作也會比較快,會頻繁向全局任務(wù)隊列寫入處理任務(wù),工作線程也要頻繁地從全局任務(wù)隊列中取出處理任務(wù),然而多個工作線程對同一個任務(wù)隊列中的處理任務(wù)同時進行操作,很容易造成數(shù)據(jù)的不一致,為了避免數(shù)據(jù)的不一致,在現(xiàn)有技術(shù)中,必須在讀寫操作之前對處理任務(wù)加鎖,在操作完成后解鎖,由此會導(dǎo)致線程并發(fā)度較低,程序運行效率不聞。
[0063]而在本發(fā)明的實施例中,每個工作線程都有自己的任務(wù)隊列,主線程在分配任務(wù)時,寫入模塊405可以控制主線程只向所選擇的工作線程(例如一個工作線程)的任務(wù)隊列中寫入處理任務(wù),使得被分配任務(wù)的工作線程可以從自己的任務(wù)隊列中讀取處理任務(wù),避免了多個工作線程對任務(wù)隊列的爭用,提高了線程的并發(fā)度。
[0064]可選地,在本發(fā)明的實施例中,寫入模塊405可以控制主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列的隊尾。如圖3所示,在工作線程I的任務(wù)隊列中最右側(cè)的CON包位于任務(wù)隊列的隊尾。
[0065]在本發(fā)明的實施例中,激活模塊407用于控制主線程激活所選擇的工作線程,并控制所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0066]可選地,在本發(fā)明的實施例中,激活模塊407包括:激活單元和處理單元,其中激活單元用于控制主線程向選擇的工作線程對應(yīng)的文件描述符發(fā)送消息,以激活所選擇的工作線程;處理單元用于控制所選擇的工作線程在收到對應(yīng)的文件描述符上的讀事件后,從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
[0067]在本發(fā)明的實施例中,每個工作線程可以具有與該工作線程對應(yīng)的文件描述符,每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,主線程在分配任務(wù)時,可以只向一個文件描述符發(fā)送單字節(jié)消息,也就是只有一個工作線程被激活,從而避免了現(xiàn)有技術(shù)中“驚群”現(xiàn)象。
[0068]可選地,在本發(fā)明的實施例中,裝置400還包括:生成模塊409和監(jiān)聽模塊410,其中生成模塊用于在主線程啟動之后,生成與每個工作線程對應(yīng)的文件描述符和任務(wù)隊列。參見圖3,工作線程I具有與其對應(yīng)的文件描述符fdl和任務(wù)隊列;工作線程2具有與其對應(yīng)的文件描述符fd2和任務(wù)隊列;工作線程3具有與其對應(yīng)的文件描述符fd3和任務(wù)隊列。監(jiān)聽模塊用于控制每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,以及控制主線程監(jiān)聽客戶端的連接請求。
[0069]在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
[0070]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細(xì)節(jié)的情況下實踐。在一些實例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
[0071]類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循【具體實施方式】的權(quán)利要求書由此明確地并入該【具體實施方式】,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
[0072]本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的替代特征來代替。
[0073]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
[0074]本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的多線程控制的裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
[0075]應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干設(shè)備的單元權(quán)利要求中,這些設(shè)備中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
【權(quán)利要求】
1.一種多線程管理方法,適用于由操作系統(tǒng)控制多個線程的架構(gòu)中,其中多個線程包括:主線程和多個工作線程,所述方法包括: 在所述主線程接受客戶端的連接請求之后,將所述客戶端的相關(guān)信息封裝成處理任務(wù); 所述主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程; 所述主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中; 所述主線程激活所述所選擇的工作線程,由所述所選擇的工作線程從其任務(wù)隊列中取出所述處理任務(wù),并由所述所選擇的工作線程根據(jù)所述處理任務(wù)進行相應(yīng)的處理。
2.根據(jù)權(quán)利要求1所述的方法,在所述主線程接受客戶端的連接請求之前,所述方法還包括: 在所述主線程啟動之后,生成與每個工作線程對應(yīng)的文件描述符和任務(wù)隊列; 每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,所述主線程監(jiān)聽客戶端的連接請求。
3.根據(jù)權(quán)利要求1 或2所述的方法,其中,所述預(yù)先設(shè)定的工作線程選擇策略包括:根據(jù)每個工作線程所對應(yīng)的任務(wù)隊列的長度,從多個工作線程中選出當(dāng)前任務(wù)隊列最短的工作線程;或,根據(jù)每個工作線程的負(fù)載的大小,從多個工作線程中選出負(fù)載最輕的工作線程。
4.根據(jù)權(quán)利要求1~3任一項所述的方法,其中,所述主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中的步驟為: 所述主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列的隊尾。
5.根據(jù)權(quán)利要求1~4任一項所述的方法,其中,所述主線程激活所選擇的工作線程,由所選擇的工作線程從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理的步驟包括: 所述主線程向所述所選擇的工作線程對應(yīng)的文件描述符發(fā)送消息,以激活所述所選擇的工作線程; 在所述所選擇的工作線程在收到對應(yīng)的文件描述符上的讀事件后,從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
6.一種多線程管理裝置,適用于由操作系統(tǒng)控制多個線程的架構(gòu)中,其中多個線程包括:主線程和多個工作線程,所述裝置包括: 封裝模塊,用于在所述主線程接受客戶端的連接請求之后,控制所述主線程將所述客戶端的相關(guān)信息封裝成處理任務(wù); 選擇模塊,用于控制所述主線程根據(jù)預(yù)先設(shè)定的工作線程選擇策略,從多個工作線程中選擇一個工作線程; 寫入模塊,用于控制所述主線程將封裝得到的處理任務(wù)寫入到所選擇的工作線程的任務(wù)隊列中; 激活模塊,用于控制所述主線程激活所述所選擇的工作線程,并控制所述所選擇的工作線程從其任務(wù)隊列中取出所述處理任務(wù),并由所述所選擇的工作線程根據(jù)所述處理任務(wù)進行相應(yīng)的處理。
7.根據(jù)權(quán)利要求6所述的裝置, 所述裝置還包括: 生成模塊,用于在主線程啟動之后,生成與每個工作線程對應(yīng)的文件描述符和任務(wù)隊列; 監(jiān)聽模塊,用于控制每個工作線程監(jiān)聽與其對應(yīng)的文件描述符上的讀事件,以及控制所述主線程監(jiān)聽客戶端的連接請求。
8.根據(jù)權(quán)利要求6或7所述的裝置,其中,所述預(yù)先設(shè)定的工作線程選擇策略包括:根據(jù)每個工作線程所對應(yīng)的任務(wù)隊列的長度,從多個工作線程中選出當(dāng)前任務(wù)隊列最短的工作線程;或,根據(jù)每個工作線程的負(fù)載的大小,從多個工作線程中選出負(fù)載最輕的工作線程。
9.根據(jù)權(quán)利要求6~8任一項所述的裝置,其中,所述寫入模塊進一步用于將封裝得到的處理任務(wù)寫入到所選擇的工作線程模塊的任務(wù)隊列的隊尾。
10.根據(jù)權(quán)利要求6~9任一項所述的裝置,其中,所述激活模塊包括: 激活單元,用于控制所述主線程向所述所選擇的工作線程對應(yīng)的文件描述符發(fā)送消息,以激活所述所選擇的工作線程; 處理單元,用于控制所述所選擇的工作線程在收到對應(yīng)的文件描述符上的讀事件后,從其任務(wù)隊列中取出處理任務(wù),并由所選擇的工作線程根據(jù)處理任務(wù)進行相應(yīng)的處理。
【文檔編號】G06F9/50GK103605568SQ201310519950
【公開日】2014年2月26日 申請日期:2013年10月29日 優(yōu)先權(quán)日:2013年10月29日
【發(fā)明者】朱超, 陳飛, 王超 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1