多控制器之間任務(wù)處理的方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種多控制器之間任務(wù)處理的方法和裝置,其中方法包括:分發(fā)線程接收其他控制器發(fā)送的任務(wù)命令消息,控制器包括分發(fā)線程和線程池,線程池包括至少一個工作線程,分發(fā)線程和線程池間包括任務(wù)命令消息隊列;工作線程的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài);分發(fā)線程將接收到的任務(wù)命令消息添加到任務(wù)命令消息隊列,并利用條件變量喚醒工作線程;工作線程從任務(wù)命令消息隊列取出任務(wù)命令進行任務(wù)處理,當任務(wù)命令消息隊列為空時,工作線程切換到睡眠狀態(tài)。本發(fā)明能夠解決快速任務(wù)命令通信和慢速任務(wù)處理的矛盾,提高設(shè)備的性能。
【專利說明】多控制器之間任務(wù)處理的方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機【技術(shù)領(lǐng)域】,尤其涉及一種多控制器之間任務(wù)處理的方法和裝 置。
【背景技術(shù)】
[0002] 設(shè)備中控制器控制設(shè)備部件正常運行,例如,設(shè)備具有單控制器或多控制器來控 制該設(shè)備的運行,其中單控制器一般稱為集中式設(shè)備或集中式系統(tǒng),多控制器一般稱為分 布式設(shè)備或分布式系統(tǒng)。隨著計算機行業(yè)對控制系統(tǒng)可靠性要求的提高,分布式多控制系 統(tǒng)把設(shè)備的控制權(quán)下發(fā)到多個控制器,這種控制方式搭建靈活,而且可以提升設(shè)備的可靠 性,因此,分布式多控制器系統(tǒng)逐漸樹立了核心設(shè)備的競爭地位。
[0003] 多控制器之間協(xié)作任務(wù)處理在分布式多控制系統(tǒng)中是不可缺少的,但是任務(wù)的處 理速度與控制器間任務(wù)命令的通信相比是很耗時的,即從一個控制器下發(fā)一條任務(wù)命令到 另一個控制器,這個通信過程很快,而大多情況下接到任務(wù)命令后控制器按照任務(wù)命令把 任務(wù)處理完成是相對比較慢,因此,快速的任務(wù)命令通信與慢速的任務(wù)處理之間的矛盾會 造成控制器間協(xié)作緩慢,進而影響設(shè)備的性能。
【發(fā)明內(nèi)容】
[0004] 為了解決上述技術(shù)問題,本發(fā)明提供了一種多控制器之間任務(wù)處理的方法和裝 置,能夠解決多控制器之間快速的任務(wù)命令通信和慢速的任務(wù)處理的矛盾,提高設(shè)備的性 能。
[0005] 為了達到本發(fā)明目的,本發(fā)明提供了一種多控制器之間任務(wù)處理的方法,包括:控 制器的分發(fā)線程接收其他控制器發(fā)送來的任務(wù)命令消息,其中控制器包括分發(fā)線程和線程 池,線程池包括至少一個工作線程,分發(fā)線程和線程池之間包括任務(wù)命令消息隊列;工作線 程的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài);分發(fā)線程將接收到的任務(wù)命令消息添加到任 務(wù)命令消息隊列中,并利用條件變量喚醒工作線程;工作線程從任務(wù)命令消息隊列取出任 務(wù)命令進行任務(wù)處理,當任務(wù)命令消息隊列為空時,工作線程切換到睡眠狀態(tài)。
[0006] 進一步地,該方法還包括:控制器預(yù)先設(shè)置分發(fā)線程和線程池;根據(jù)分發(fā)線程接 收任務(wù)命令的頻率和線程池中工作線程處理任務(wù)的時長,設(shè)置線程池中工作線程的數(shù)量。
[0007] 進一步地,該方法還包括:控制器預(yù)先在分發(fā)線程與線程池之間設(shè)置可共享的任 務(wù)命令消息隊列,所述任務(wù)命令消息隊列采用鏈表方式,任務(wù)命令消息先進先出;分發(fā)線程 將接收到的任務(wù)命令消息添加到任務(wù)命令消息隊列中,包括:分發(fā)線程將接收到的任務(wù)命 令消息依次添加到任務(wù)命令消息隊列的尾部;工作線程從任務(wù)命令消息隊列取出任務(wù)命令 進行任務(wù)處理,包括:工作線程依次從任務(wù)命令消息隊列的頭部取出任務(wù)命令進行任務(wù)處 理。
[0008] 進一步地,工作線程的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài),包括:工作線程的 起始狀態(tài)調(diào)用pthread_cond_wait消息設(shè)置成睡眠狀態(tài)。
[0009] 進一步地,分發(fā)線程利用條件變量喚醒工作線程,包括:分發(fā)線程采用廣播方式, 調(diào)用pthread_cond_signal消息喚醒線程池中的所有工作線程。
[0010] 本發(fā)明提供了一種多控制器之間任務(wù)處理的裝置,包括:分發(fā)線程,用于接收其他 控制器發(fā)送來的任務(wù)命令消息;線程池,包括至少一個工作線程,作線程用于任務(wù)處理;任 務(wù)命令消息隊列,在分發(fā)線程和線程池之間,用于任務(wù)命令消息的傳遞;工作線程的起始狀 態(tài)利用條件變量設(shè)置成睡眠狀態(tài);分發(fā)線程將接收到的任務(wù)命令消息添加到任務(wù)命令消息 隊列中,并利用條件變量喚醒工作線程;工作線程從任務(wù)命令消息隊列取出任務(wù)命令進行 任務(wù)處理,當任務(wù)命令消息隊列為空時,工作線程切換到睡眠狀態(tài)。
[0011] 進一步地,該裝置還包括:第一設(shè)置模塊,用于預(yù)先設(shè)置分發(fā)線程和線程池;第一 設(shè)置模塊還用于根據(jù)分發(fā)線程接收任務(wù)命令的頻率和工作線程處理任務(wù)的時長,設(shè)置線程 池中工作線程的數(shù)量。
[0012] 進一步地,該裝置還包括:第二設(shè)置模塊,用于預(yù)先在分發(fā)線程與線程池之間設(shè)置 任務(wù)命令消息隊列,任務(wù)命令消息隊列采用鏈表方式,任務(wù)命令消息先進先出;分發(fā)線程將 接收到的任務(wù)命令消息依次添加到任務(wù)命令消息隊列的尾部,工作線程依次從任務(wù)命令消 息隊列的頭部取出任務(wù)命令進行任務(wù)處理。
[0013] 進一步地,工作線程的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài),包括:工作線程的 起始狀態(tài)調(diào)用pthread_cond_wait消息設(shè)置成睡眠狀態(tài)。
[0014] 進一步地,分發(fā)線程利用條件變量喚醒工作線程,包括:分發(fā)線程采用廣播方式, 調(diào)用pthread_cond_signal消息喚醒線程池中的所有工作線程。
[0015] 與現(xiàn)有技術(shù)相比,本發(fā)明包括:控制器的分發(fā)線程接收其他控制器發(fā)送來的任務(wù) 命令消息,控制器包括分發(fā)線程和線程池,線程池包括至少一個工作線程,分發(fā)線程和線程 池之間包括任務(wù)命令消息隊列;工作線程的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài);分發(fā) 線程將接收到的任務(wù)命令消息添加到任務(wù)命令消息隊列中,并利用條件變量喚醒工作線 程;工作線程從任務(wù)命令消息隊列取出任務(wù)命令進行任務(wù)處理,當任務(wù)命令消息隊列為空 時,工作線程切換到睡眠狀態(tài)。本發(fā)明通過設(shè)置分發(fā)線程和線程池,將接收任務(wù)命令和處理 任務(wù)分開到不同的線程,從而解決多控制器之間快速的任務(wù)命令通信和慢速的任務(wù)處理的 矛盾。此外,在分發(fā)線程和線程池之間建立可共享的任務(wù)命令消息隊列,若分發(fā)線程接收到 來自其他控制器的任務(wù)命令,會將任務(wù)命令加入到任務(wù)命令消息隊列中,線程池的工作線 程從任務(wù)命令消息隊列中取出任務(wù)命令進行任務(wù)處理,因此,分發(fā)線程能夠及時地對接收 到的任務(wù)命令進行處理,而不會因為工作線程任務(wù)處理時間較長使得控制器之間的任務(wù)命 令通信成為瓶頸,從而提高設(shè)備的性能。
【專利附圖】
【附圖說明】
[0016] 圖1是本發(fā)明多控制器之間任務(wù)處理的方法的流程示意圖。
[0017] 圖2是本發(fā)明多控制器之間任務(wù)處理的裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0018] 以下將結(jié)合附圖所示的【具體實施方式】對本發(fā)明進行詳細描述。
[0019] 圖1是多控制器之間任務(wù)處理的方法的流程示意圖,如圖1所示,該方法包括:
[0020] 步驟11,設(shè)置分發(fā)線程和線程池,該線程池包括至少一條工作線程;
[0021] 在本步驟中,相對于接收任務(wù)命令,處理任務(wù)耗時較長,所以控制器將接收任務(wù)命 令和處理任務(wù)分開到不同的線程,具體的,控制器設(shè)置分發(fā)線程和線程池,其中分發(fā)線程接 收來自其他控制器的任務(wù)命令,并將任務(wù)命令進行分發(fā);線程池中的工作線程處理任務(wù)。
[0022] 控制器可以根據(jù)分發(fā)線程接收任務(wù)命令的頻率和工作線程處理任務(wù)的時長,來設(shè) 置線程池中工作線程的數(shù)量,例如,分發(fā)線程每秒接收1個命令任務(wù),工作線程處理1個任 務(wù)需要10秒,那么線程池中可以設(shè)置10?15個工作線程。
[0023] 步驟12,在分發(fā)線程與線程池之間設(shè)置任務(wù)命令消息隊列。
[0024] 在本步驟中,控制器預(yù)先在分發(fā)線程與線程池之間建立可共享的任務(wù)命令消息隊 列,該任務(wù)命令消息隊列采用鏈表方式,任務(wù)命令消息先進先出。
[0025] 步驟13,工作線程的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài)。
[0026] 在本步驟中,工作線程的起始狀態(tài)調(diào)用pthread_cond_wait消息設(shè)置成睡眠狀態(tài)
[0027] 步驟14,分發(fā)線程接收其他控制器發(fā)送來的任務(wù)命令消息,將接收到的任務(wù)命令 消息添加到任務(wù)命令消息隊列中,并利用條件變量喚醒工作線程。
[0028] 在本步驟中,分發(fā)線程接收其他控制器發(fā)送來的任務(wù)命令消息,將接收到的任務(wù) 命令消息依次添加到任務(wù)命令消息隊列的尾部。
[0029] 分發(fā)線程采用廣播方式,調(diào)用pthread_cond_signal消息喚醒線程池中的所有工 作線程。
[0030] 步驟15,工作線程從任務(wù)命令消息隊列取出任務(wù)命令進行任務(wù)處理,當任務(wù)命令 消息隊列為空時,工作線程切換到睡眠狀態(tài)。
[0031] 在本步驟中,工作線程依次從任務(wù)命令消息隊列的頭部取出任務(wù)命令進行任務(wù)處 理,直到工作線程發(fā)現(xiàn)任務(wù)命令消息隊列上無任務(wù)命令需要處理時,工作線程切換到睡眠 狀態(tài),一直睡眠到下次被分發(fā)線程喚醒。
[0032] 本發(fā)明通過設(shè)置分發(fā)線程和線程池,將接收任務(wù)命令和處理任務(wù)分開到不同的線 程,從而解決多控制器之間快速的任務(wù)命令通信和慢速的任務(wù)處理的矛盾。此外,在分發(fā)線 程和線程池之間建立可共享的任務(wù)命令消息隊列,若分發(fā)線程接收到來自其他控制器的任 務(wù)命令,會將任務(wù)命令加入到任務(wù)命令消息隊列中,線程池的工作線程從任務(wù)命令消息隊 列中取出任務(wù)命令進行任務(wù)處理,因此,分發(fā)線程能夠及時地對接收到的任務(wù)命令進行處 理,而不會因為工作線程任務(wù)處理時間較長使得控制器之間的任務(wù)命令通信成為瓶頸,從 而提1?設(shè)備的性能。
[0033] 圖2是本發(fā)明多控制器之間任務(wù)處理的裝置的結(jié)構(gòu)示意圖,如圖2所示,包括:
[0034] 第一設(shè)置模塊,用于設(shè)置分發(fā)線程和線程池,該線程池包括至少一條處理任務(wù)的 工作線程。
[0035] 具體地,第一設(shè)置模塊可以根據(jù)分發(fā)線程接收任務(wù)命令的頻率和工作線程處理任 務(wù)的時長,設(shè)置線程池中工作線程的數(shù)量。
[0036] 第二設(shè)置模塊,用于在分發(fā)線程與線程池之間設(shè)置任務(wù)命令消息隊列。
[0037] 具體地,預(yù)先在分發(fā)線程與線程池之間建立可共享的任務(wù)命令消息隊列,該任務(wù) 命令消息隊列采用鏈表方式,任務(wù)命令消息先進先出。
[0038] 分發(fā)線程,用于接收其他控制器發(fā)送來的任務(wù)命令消息;
[0039] 線程池,包括至少一個工作線程,所述工作線程用于任務(wù)處理;
[0040] 任務(wù)命令消息隊列,在分發(fā)線程和線程池之間,用于任務(wù)命令消息的傳遞;
[0041] 其中,工作線程的起始狀態(tài)調(diào)用pthread_cond_wait消息設(shè)置成睡眠狀態(tài);分發(fā) 線程將接收到的任務(wù)命令消息依次添加到任務(wù)命令消息隊列的尾部,并采用廣播方式,調(diào) 用pthread_cond_signal消息喚醒線程池中的所有工作線程;工作線程依次從任務(wù)命令消 息隊列的頭部取出任務(wù)命令進行任務(wù)處理,直到工作線程發(fā)現(xiàn)任務(wù)命令消息隊列上無任務(wù) 命令需要處理時,工作線程切換到睡眠狀態(tài),一直睡眠到下次被分發(fā)線程喚醒。
[0042] 本發(fā)明通過設(shè)置分發(fā)線程和線程池,將接收任務(wù)命令和處理任務(wù)分開到不同的線 程,從而解決多控制器之間快速的任務(wù)命令通信和慢速的任務(wù)處理的矛盾。此外,在分發(fā) 線程和線程池之間建立可共享的任務(wù)命令消息隊列,若分發(fā)線程接收到來自其他控制器的 任務(wù)命令,會將任務(wù)命令加入到任務(wù)命令消息隊列中,線程池的工作線程從任務(wù)命令消息 隊列中取出任務(wù)命令進行任務(wù)處理,因此,分發(fā)線程能夠及時地對接收到的任務(wù)命令進行 處理,而不會因為工作線程任務(wù)處理時間較長使得控制器之間的任務(wù)命令消息通信成為瓶 頸,從而提高設(shè)備的性能。
[0043] 應(yīng)當理解,雖然本說明書根據(jù)實施方式加以描述,但并非每個實施方式僅包含一 個獨立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當將說 明書作為一個整體,各實施方式中的技術(shù)方案也可以經(jīng)適當組合,形成本領(lǐng)域技術(shù)人員可 以理解的其他實施方式。
[0044] 上文所列出的一系列的詳細說明僅僅是針對本發(fā)明的可行性實施方式的具體說 明,它們并非用于限制本發(fā)明的保護范圍,凡未脫離本發(fā)明技藝精神所作的等效實施方式 或變更均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1. 一種多控制器之間任務(wù)處理的方法,其特征在于,包括: 控制器的分發(fā)線程接收其他控制器發(fā)送來的任務(wù)命令消息,所述控制器包括分發(fā)線程 和線程池,所述線程池包括至少一個工作線程,所述工作線程的起始狀態(tài)利用條件變量設(shè) 置成睡眠狀態(tài);所述分發(fā)線程和線程池之間包括任務(wù)命令消息隊列; 所述分發(fā)線程將接收到的任務(wù)命令消息添加到任務(wù)命令消息隊列中,并利用條件變量 喚醒工作線程; 所述工作線程從任務(wù)命令消息隊列取出任務(wù)命令進行任務(wù)處理,當任務(wù)命令消息隊列 為空時,工作線程切換到睡眠狀態(tài)。
2. 根據(jù)權(quán)利要求1所述的多控制器之間任務(wù)處理的方法,其特征在于,該方法還包括: 控制器預(yù)先設(shè)置分發(fā)線程和線程池; 根據(jù)分發(fā)線程接收任務(wù)命令的頻率和線程池中工作線程處理任務(wù)的時長,設(shè)置線程池 中工作線程的數(shù)量。
3. 根據(jù)權(quán)利要求1所述的多控制器之間任務(wù)處理的方法,其特征在于,該方法還包括: 控制器預(yù)先在分發(fā)線程與線程池之間設(shè)置可共享的任務(wù)命令消息隊列,所述任務(wù)命令 消息隊列米用鏈表方式,任務(wù)命令消息先進先出; 所述分發(fā)線程將接收到的任務(wù)命令消息添加到任務(wù)命令消息隊列中,包括:所述分發(fā) 線程將接收到的任務(wù)命令消息依次添加到任務(wù)命令消息隊列的尾部; 所述工作線程從任務(wù)命令消息隊列取出任務(wù)命令進行任務(wù)處理,包括:所述工作線程 依次從任務(wù)命令消息隊列的頭部取出任務(wù)命令進行任務(wù)處理。
4. 根據(jù)權(quán)利要求1所述的多控制器之間任務(wù)處理的方法,其特征在于,所述工作線程 的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài),包括: 所述工作線程的起始狀態(tài)調(diào)用pthread_cond_wait消息設(shè)置成睡眠狀態(tài)。
5. 根據(jù)權(quán)利要求1或4所述的多控制器之間任務(wù)處理的方法,其特征在于,所述分發(fā)線 程利用條件變量喚醒工作線程,包括: 所述分發(fā)線程采用廣播方式,調(diào)用pthread_C〇nd_signal消息喚醒線程池中的所有工 作線程。
6. -種多控制器之間任務(wù)處理的裝置,其特征在于,包括: 分發(fā)線程,用于接收其他控制器發(fā)送來的任務(wù)命令消息; 線程池,包括至少一個工作線程,所述工作線程用于任務(wù)處理; 任務(wù)命令消息隊列,在分發(fā)線程和線程池之間,用于任務(wù)命令消息的傳遞; 所述工作線程的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài);所述分發(fā)線程將接收到的任 務(wù)命令消息添加到任務(wù)命令消息隊列中,并利用條件變量喚醒工作線程;所述工作線程從 任務(wù)命令消息隊列取出任務(wù)命令進行任務(wù)處理,當任務(wù)命令消息隊列為空時,工作線程切 換到睡眠狀態(tài)。
7. 根據(jù)權(quán)利要求6所述的多控制器之間任務(wù)處理的裝置,其特征在于,該裝置還包括: 第一設(shè)置模塊,用于預(yù)先設(shè)置分發(fā)線程和線程池; 第一設(shè)置模塊還用于根據(jù)分發(fā)線程接收任務(wù)命令的頻率和工作線程處理任務(wù)的時長, 設(shè)置線程池中工作線程的數(shù)量。
8. 根據(jù)權(quán)利要求6所述的多控制器之間任務(wù)處理的裝置,其特征在于,該裝置還包括: 第二設(shè)置模塊,用于在分發(fā)線程與線程池之間設(shè)置任務(wù)命令消息隊列,所述任務(wù)命令 消息隊列米用鏈表方式,任務(wù)命令消息先進先出; 所述分發(fā)線程將接收到的任務(wù)命令消息依次添加到任務(wù)命令消息隊列的尾部,所述工 作線程依次從任務(wù)命令消息隊列的頭部取出任務(wù)命令進行任務(wù)處理。
9. 根據(jù)權(quán)利要求6所述的多控制器之間任務(wù)處理的裝置,其特征在于,所述工作線程 的起始狀態(tài)利用條件變量設(shè)置成睡眠狀態(tài),包括: 所述工作線程的起始狀態(tài)調(diào)用pthread_cond_wait消息設(shè)置成睡眠狀態(tài)。
10. 根據(jù)權(quán)利要求6或9所述的多控制器之間任務(wù)處理的裝置,其特征在于,所述分發(fā) 線程利用條件變量喚醒工作線程,包括: 所述分發(fā)線程采用廣播方式,調(diào)用pthread_C〇nd_signal消息喚醒線程池中的所有工 作線程。
【文檔編號】G06F9/46GK104156261SQ201410392321
【公開日】2014年11月19日 申請日期:2014年8月11日 優(yōu)先權(quán)日:2014年8月11日
【發(fā)明者】李美欣 申請人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司