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

一種數(shù)據(jù)處理方法及裝置制造方法

文檔序號:6627756閱讀:176來源:國知局
一種數(shù)據(jù)處理方法及裝置制造方法
【專利摘要】本發(fā)明實施例公開了一種數(shù)據(jù)處理方法及裝置。該方法包括:主進程內(nèi)的主線程接收目標CPU密集型任務,將目標CPU密集型任務所封裝成的目標數(shù)據(jù)處理任務提交到任務請求隊列中;工作線程在到達預設處理時機時,將任務請求隊列中的目標數(shù)據(jù)處理任務轉(zhuǎn)移至任務處理隊列中,運行預先建立的代碼執(zhí)行引擎,基于任務處理隊列中的目標數(shù)據(jù)處理任務,調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),在目標CPU密集型任務被執(zhí)行完畢后通知主線程;主線程接收工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的通知,獲得目標CPU密集型任務對應的結(jié)果。本方案在解決任務阻塞問題的同時,降低系統(tǒng)資源占用率和提高任務處理效率。
【專利說明】一種數(shù)據(jù)處理方法及裝置

【技術(shù)領域】
[0001] 本發(fā)明涉及數(shù)據(jù)處理領域,特別涉及一種數(shù)據(jù)處理方法及裝置。

【背景技術(shù)】
[0002] Node, js為一個事件驅(qū)動I/O服務端JavaScript環(huán)境,其基于Google的v8引擎, 目的是為了提供可擴充網(wǎng)絡程序,如web服務。
[0003] 實際應用中,Node, js主要適用于數(shù)據(jù)密集型實時(data-intensive real-time) 交互的應用場景,即基于Node, js搭建數(shù)據(jù)密集型實時應用程序。其中,所搭建的數(shù)據(jù)密集 型實時應用程序的主進程內(nèi)的主線程按照順序處理所對應任務隊列中的數(shù)據(jù)密集型任務, 并且,在其中任何一個任務本身沒有完成之前,其他任務無法被執(zhí)行,其中,具體體現(xiàn)為:其 它任務的回調(diào)、監(jiān)聽器、超時、nextTickO等的函數(shù)都得不到運行的機會。
[0004] 其中,數(shù)據(jù)密集型實時應用程序并不是只有1/0密集型任務,還會存在CPU密集型 任務,例如:對數(shù)據(jù)加/解密、數(shù)據(jù)壓縮/解壓或者根據(jù)用戶的身份對圖片做些個性化處理 等。然而,對于同時存在1/0密集型任務和CPU密集型任務的數(shù)據(jù)密集型實時應用程序而 言,當數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的主線程致力于做復雜耗時的CPU密集型任務 時,由于主線程完成一個任務之前其他任務無法被執(zhí)行,因此,任務隊列中的1/0密集型任 務就會被阻塞,此時,程序最好的情況是變慢,最糟糕的情況是停滯不動,像死掉一樣,嚴重 影響到用戶的使用體驗。
[0005] 現(xiàn)有技術(shù)中,為了解決上述的任務阻塞問題,預先為主進程開辟一個子進程,在處 理過程中,通過ipc通信方式將CPU密集型任務交給子進程,子進程執(zhí)行完畢后,再通過ipc 通信方式通知主進程,并將結(jié)果返回給主進程。具體的:Node, js中管理子進程的child_ process模塊通過fork ()方法創(chuàng)建新的子進程實例方式來創(chuàng)建一個子進程,主進程可以通 過.send(message)函數(shù)發(fā)送消息給子進程,用.οηΓ message')監(jiān)聽子進程發(fā)送的消 息,而子進程可以用process. onC message',callback)監(jiān)聽主進程發(fā)送的消息,并通過 process, send (message)向主進程發(fā)送消息。
[0006] 盡管現(xiàn)有的開辟新進程的方法在一定程度上解決了任務阻塞問題,但是,開辟新 進程會帶來如下問題:(1)系統(tǒng)資源占用率較大;(2)由于進程間通信效率不高導致任務處 理效率較低。


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

[0007] 基于上述問題,本發(fā)明實施例公開了一種數(shù)據(jù)處理方法及裝置,以在解決任務阻 塞問題的同時,降低系統(tǒng)資源占用率和提高任務處理效率。技術(shù)方案如下:
[0008] 第一方面,本發(fā)明實施例提供了一種數(shù)據(jù)處理方法,包括:
[0009] 基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的主線程接收目標 (PU密集型任務,并將所述目標CPU密集型任務封裝成目標數(shù)據(jù)處理任務,其中,所述目標 數(shù)據(jù)處理任務包括執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名稱以及所需傳遞的 參數(shù);
[0010] 所述主線程將所述目標數(shù)據(jù)處理任務提交到任務請求隊列中,其中,其中,該任務 請求隊列為該主進程內(nèi)的預設的工作線程所對應的用于接收主線程提交的數(shù)據(jù)處理任務 的隊列;
[0011] 所述工作線程在到達預設處理時機時,將所述任務請求隊列中的所述目標數(shù)據(jù)處 理任務轉(zhuǎn)移至任務處理隊列中,并運行預先建立的代碼執(zhí)行引擎,基于所述任務處理隊列 中的目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名稱以 及所需傳遞的參數(shù),調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),以執(zhí)行所述目標CPU密集 型任務;
[0012] 所述工作線程在所述目標CPU密集型任務被執(zhí)行完畢后,通過線程間通信方式通 知所述主線程;
[0013] 所述主線程接收所述工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的通知,通過執(zhí)行回調(diào)函 數(shù)獲得所述目標CPU密集型任務對應的結(jié)果。
[0014] 可選的,所述工作線程處于運行狀態(tài);
[0015] 所述預設處理時機為:所述工作線程按照預設任務處理規(guī)則檢測所述任務請求隊 列的時刻。
[0016] 可選的,所述工作線程處于睡眠狀態(tài);
[0017] 所述主線程將所述目標數(shù)據(jù)處理任務提交到任務請求隊列中后,還包括:
[0018] 激活預設信號,其中,所述預設信號能夠使得處于睡眠狀態(tài)的工作線程獲知;
[0019] 所述預設處理時機為:所述工作線程獲知所述主線程所激活的預設信號的時刻。
[0020] 可選的,所述預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)通過js腳本語言編寫。
[0021] 可選的,所述預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)通過C++語言編寫;
[0022] 調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),包括:
[0023] 加載所述預設邏輯函數(shù)存儲文件;
[0024] 調(diào)用所加載的預設邏輯函數(shù)存儲文件中的邏輯函數(shù)。
[0025] 可選的,所述代碼執(zhí)行引擎為v8 VM。
[0026] 第二方面,本發(fā)明實施例還提供了一種數(shù)據(jù)處理裝置,包括:
[0027] 用于執(zhí)行基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的主線程 的功能的主線程模塊、用于執(zhí)行基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程 內(nèi)的工作線程的功能的工作線程模塊;
[0028] 所述主線程模塊包括任務接收子模塊、任務封裝子模塊、任務提交子模塊、通知接 收子模塊和結(jié)果處理子模塊,所述工作線程模塊包括任務轉(zhuǎn)移子模塊、任務處理子模塊和 通知發(fā)送子模塊;
[0029] 其中,所述任務接收子模塊,用于接收目標CPU密集型任務;
[0030] 所述任務封裝子模塊,用于將所述目標CPU密集型任務封裝成目標數(shù)據(jù)處理任 務,其中,所述目標數(shù)據(jù)處理任務包括執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名 稱以及所需傳遞的參數(shù);
[0031 ] 所述任務提交子模塊,用于將所述目標數(shù)據(jù)處理任務提交到任務請求隊列中,其 中,所述任務請求隊列為所述主進程內(nèi)的預設的工作線程所對應的用于接收主線程提交的 數(shù)據(jù)處理任務的隊列;
[0032] 所述任務轉(zhuǎn)移子模塊,用于在到達預設處理時機時,將所述任務請求隊列中的所 述目標數(shù)據(jù)處理任務轉(zhuǎn)移至任務處理隊列中;
[0033] 所述任務處理子模塊,用于運行預先建立的代碼執(zhí)行引擎,基于所述任務處理隊 列中的目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名稱 以及所需傳遞的參數(shù),調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),以執(zhí)行所述目標CPU密 集型任務;
[0034] 所述通知發(fā)送子模塊,用于在所述目標CPU密集型任務被執(zhí)行完畢后,通過線程 間通信方式通知所述主線程;
[0035] 所述通知接收子模塊,用于接收所述工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的通知;
[0036] 所述結(jié)果處理子模塊,用于通過執(zhí)行回調(diào)函數(shù)獲得所述目標CPU密集型任務對應 的結(jié)果。
[0037] 可選的,所述工作線程處于運行狀態(tài);
[0038] 所述預設處理時機為:所述工作線程按照預設任務處理規(guī)則檢測所述任務請求隊 列的時刻。
[0039] 可選的,所述工作線程處于睡眠狀態(tài);
[0040] 所述主線程模塊,還包括:信號激活子模塊,用于將所述目標數(shù)據(jù)處理任務提交到 任務請求隊列中后,激活預設信號,其中,所述預設信號能夠使得處于睡眠狀態(tài)的工作線程 獲知;
[0041] 所述預設處理時機為:所述工作線程獲知所述主線程所激活的預設信號的時刻。
[0042] 可選的,所述預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)通過js腳本語言編寫。
[0043] 可選的,所述預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)通過C++語言編寫;
[0044] 所述任務處理子模塊,具體用于運行預先建立的代碼執(zhí)行引擎,基于所述任務處 理隊列中的目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的 名稱以及所需傳遞的參數(shù),加載所述預設邏輯函數(shù)存儲文件,調(diào)用所加載的預設邏輯函數(shù) 存儲文件中的邏輯函,以執(zhí)行所述目標CPU密集型任務。
[0045] 可選的,所述代碼執(zhí)行引擎為v8 VM。
[0046] 與現(xiàn)有技術(shù)相比,本方案將CPU密集型任務交給主進程內(nèi)的不同于主線程的工作 線程來處理,使得主線程可以處理CPU密集型任務以外的耗時短的I/O密集型任務,而工作 線程可以處理CPU密集型任務。由于進程內(nèi)的線程共享系統(tǒng)資源,并且,線程間通信效率較 高,因此,可以達到在解決任務阻塞問題的同時,降低系統(tǒng)資源占用率和提高任務處理效率 的目的。

【專利附圖】

【附圖說明】
[0047] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0048] 圖1為本發(fā)明實施例所提供的一種數(shù)據(jù)處理方法的流程圖;
[0049] 圖2為本發(fā)明實施例所提供的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。

【具體實施方式】
[0050] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。
[0051] 為了在解決任務阻塞問題的同時,降低系統(tǒng)資源占用率和提高任務處理效率,本 發(fā)明實施例提供了 一種數(shù)據(jù)處理方法及裝置。
[0052] 為了清楚起見,下面首先對本發(fā)明實施例所提供的一種數(shù)據(jù)處理方法進行介紹。
[0053] 本領域技術(shù)人員可以理解的是,對于一個應用程序而言,其對應一個主進程,該主 進程可以創(chuàng)建線程和其他進程,并且,所創(chuàng)建的第一個線程為主線程。并且,實現(xiàn)本發(fā)明實 施例所提供的數(shù)據(jù)處理方法的功能模塊為在Node, js內(nèi)增加的C++模塊。
[0054] 如圖1所示,一種數(shù)據(jù)處理方法,可以包括:
[0055] S101,基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的主線程接收 目標CPU密集型任務;
[0056] 其中,對于存在I/O密集型任務和CPU密集型任務的基于Node, js所搭建的數(shù)據(jù) 密集型實時應用程序而言,主進程內(nèi)的主線程可以接收目標CPU密集型任務和I/O密集型 任務。具體的,當該主線程接收到I/O密集型任務后,可以自行處理,且自行處理的過程與 現(xiàn)有技術(shù)相同,在此不做介紹;而當該主線程接收到CPU密集型任務后,由于CPU密集型任 務復雜且耗時,為了避免任務阻塞的問題,可以執(zhí)行本實施例后續(xù)的步驟,即通過專門的負 責執(zhí)行CPU密集型任務的工作線程來處理該目標CPU密集型任務。
[0057] 具體的,實際應用中,CPU密集型任務可以包括:對數(shù)據(jù)加/解密、數(shù)據(jù)壓縮/解壓 和根據(jù)用戶的身份對圖片做些個性化處理等。并且,CPU密集型任務可以由用戶發(fā)出,也可 以在應用程序運行過程中由操作系統(tǒng)發(fā)出,這都是合理的。
[0058] S102,該主線程將該目標CPU密集型任務封裝成目標數(shù)據(jù)處理任務;
[0059] 具體的,該目標數(shù)據(jù)處理任務包括執(zhí)行該目標CPU密集型任務所需的邏輯函數(shù)的 名稱以及所需傳遞的參數(shù)。其中,對該目標CPU密集型任務進行封裝的目的是便于工作線 程處理,且所封裝成的目標數(shù)據(jù)處理任務的類型為工作線程能夠處理的任務類型。
[0060] 并且,需要強調(diào)的是,該目標數(shù)據(jù)處理任務所包括的執(zhí)行該目標CPU密集型任務 的邏輯函數(shù)以及所需傳遞的參數(shù)的確定方式可以與現(xiàn)有技術(shù)中通過主線程處理該目標CPU 密集型任務時確定邏輯函數(shù)以及所需傳遞的參數(shù)的方式相同。
[0061] S103,該主線程將該目標數(shù)據(jù)處理任務提交到任務請求隊列中;
[0062] 其中,該任務請求隊列為該主進程內(nèi)的預設的工作線程所對應的用于接收主線程 提交的數(shù)據(jù)處理任務的隊列。
[0063] 實際應用中,主線程在將該目標數(shù)據(jù)處理任務提交到任務請求隊列中后,還可以 激活預設信號,其中,該預設信號能夠使得處于睡眠狀態(tài)的工作線程獲知。
[0064] 為了清楚起見,需要說明的是,關(guān)于開辟工作線程的具體技術(shù)實現(xiàn)可以為:在主進 程啟動初始化過程中,加入一個創(chuàng)建工作線程的過程,從而完成工作線程的創(chuàng)建。其中,所 創(chuàng)建的工作線程可以預設任務處理規(guī)則處理基于CPU密集型任務所封裝成的數(shù)據(jù)處理任 務,其對應一個用于接收主線程所提交的基于CPU密集型任務所封裝成的數(shù)據(jù)處理任務的 任務請求隊列和用于放置待處理的基于CPU密集型任務所封裝成的數(shù)據(jù)處理任務的任務 處理隊列;并且,可以在處理完畢任務處理隊列中的任務后,檢測任務請求隊列,如果任務 請求隊列中存在數(shù)據(jù)處理任務則將所存在的任務轉(zhuǎn)移至任務處理隊列,而在任務請求隊列 中不存在任務時,該工作線程會處于睡眠狀態(tài),直到檢測到主線程提交數(shù)據(jù)處理任務到任 務請求隊列中后所激活的預設信號。
[0065] S104,該工作線程在到達預設處理時機時,將該任務請求隊列中的該目標數(shù)據(jù)處 理任務轉(zhuǎn)移至任務處理隊列中;
[0066] 需要說明的是,對于該工作線程處于運行狀態(tài)時,預設處理時機可以為:該工作線 程按照預設任務處理規(guī)則檢測該任務請求隊列的時刻。對于這種情況而言,即使主線程激 活預設信號,該工作線程也不會立即將目標數(shù)據(jù)處理任務轉(zhuǎn)移到任務處理隊列中,而是達 到該工作線程按照預設任務處理規(guī)則檢測該任務請求隊列的時刻時,將該任務請求隊列中 的該目標數(shù)據(jù)處理任務轉(zhuǎn)移至任務處理隊列中。
[0067] 需要說明的是,該工作線程可以處于睡眠狀態(tài);
[0068] 該主線程將該目標數(shù)據(jù)處理任務提交到任務請求隊列中后,還可以包括:
[0069] 激活預設信號,其中,該預設信號能夠使得處于睡眠狀態(tài)的工作線程獲知;
[0070] 該預設處理時機可以為:該工作線程獲知該主線程所激活的預設信號的時刻。
[0071] S105,該工作線程運行預先建立的代碼執(zhí)行引擎,基于該任務處理隊列中的目標 數(shù)據(jù)處理任務所包含的執(zhí)行該目標CPU密集型任務所需的邏輯函數(shù)的名稱以及所需傳遞 的參數(shù),調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),以執(zhí)行該目標CPU密集型任務;
[0072] 其中,該工作線程在將該任務請求隊列中的該目標數(shù)據(jù)處理任務轉(zhuǎn)移至任務處理 隊列中后,該工作線程可以運行預先建立的代碼執(zhí)行引擎,基于該任務處理隊列中的目標 數(shù)據(jù)處理任務所包含的執(zhí)行該目標CPU密集型任務所需的邏輯函數(shù)的名稱以及所需傳遞 的參數(shù),調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),以執(zhí)行該目標CPU密集型任務。具體 的,該代碼執(zhí)行引擎可以為v8 VM,當然并不局限與此。
[0073] 需要強調(diào)的是,在工作線程處理主線程所提交的任務之前,可以建立該工作線程 所對應的代碼執(zhí)行引擎,專門用于執(zhí)行預設邏輯函數(shù)存儲文件中的代碼,其中,該工作線程 的代碼執(zhí)行引擎可以與主線程的代碼執(zhí)行引擎并行執(zhí)行,并且,該工作線程的代碼執(zhí)行引 擎的生命周期與主線程的代碼執(zhí)行引擎的生命周期相同。并且,建立該工作線程所對應的 代碼執(zhí)行引擎的方式可以采用現(xiàn)有技術(shù)實現(xiàn),例如:具體方式可以與建立主線程所對應的 代碼執(zhí)行引擎的方式相同。實際應用中,該預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)可以通過 js腳本語目編寫。
[0074] 當然,該預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)可以通過C++語言編寫;
[0075] 相應的,調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),可以包括:
[0076] 加載該預設邏輯函數(shù)存儲文件;
[0077] 調(diào)用所加載的預設邏輯函數(shù)存儲文件中的邏輯函數(shù)。
[0078] 需要強調(diào)的是,對于預設邏輯函數(shù)存儲文件中的邏輯函數(shù)通過js腳本語言編寫 的情況而言,由于js腳本語言編寫的邏輯函數(shù)中處理json格式的字符串是非常容易的,因 此,為了簡化處理邏輯,目標數(shù)據(jù)處理任務中的所需傳遞的參數(shù)可以采用json格式的字符 串,此時,調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù)后的返回值也為json格式的字符串。
[0079] S106,該工作線程在該目標CPU密集型任務被執(zhí)行完畢后,通過線程間通信方式 通知該主線程;
[0080] S107,該主線程接收該工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的通知;
[0081] S108,該主線程通過執(zhí)行回調(diào)函數(shù)獲得該目標CPU密集型任務對應的結(jié)果。
[0082] 具體的,該工作線程在該目標CPU密集型任務被執(zhí)行完畢后,可以通過現(xiàn)有的線 程間通信方式通知該主線程;而該主線程在接收到該工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的 通知后,可以通過執(zhí)行現(xiàn)有技術(shù)中的回調(diào)函數(shù)獲得該目標CPU密集型任務對應的結(jié)果,進 而基于該結(jié)果執(zhí)行該目標CPU密集型任務對應的處理。具體的,基于該結(jié)果執(zhí)行該目標CPU 密集型任務對應的處理可以例如:輸出以展示給用戶,或者,利用該結(jié)果繼續(xù)執(zhí)行后續(xù)的運 算處理等。
[0083] 簡而言之,主線程生成一個關(guān)于CPU密集型任務的目標數(shù)據(jù)處理任務,在該目標 數(shù)據(jù)處理任務中指定好執(zhí)行CPU密集型任務所需的邏輯函數(shù)和所需傳遞的參數(shù),進而該主 線程將該目標數(shù)據(jù)處理任務拋給工作線程;而該工作線程在執(zhí)行該目標數(shù)據(jù)處理任務過程 中調(diào)用邏輯函數(shù)存儲文件中的相應的邏輯函數(shù),進而完成該CPU密集型任務。
[0084] 與現(xiàn)有技術(shù)相比,本方案將CPU密集型任務交給主進程內(nèi)的不同于主線程的工作 線程來處理,使得主線程可以處理CPU密集型任務以外的耗時短的I/O密集型任務,而工作 線程可以處理CPU密集型任務。由于進程內(nèi)的線程共享系統(tǒng)資源,并且,線程間通信效率較 高,因此,可以達到在解決任務阻塞問題的同時,降低系統(tǒng)資源占用率和提高任務處理效率 的目的。
[0085] 相應于上述方法實施例,本發(fā)明實施例還提供了一種數(shù)據(jù)處理裝置,如圖2所示, 可以包括:
[0086] 用于執(zhí)行基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的主線程 的功能的主線程模塊210、用于執(zhí)行基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主 進程內(nèi)的工作線程的功能的工作線程模塊220 ;
[0087] 所述主線程模塊210包括任務接收子模塊211、任務封裝子模塊212、任務提交子 模塊213、通知接收子模塊214和結(jié)果處理子模塊215,所述工作線程模塊220包括任務轉(zhuǎn) 移子模塊221、任務處理子模塊222和通知發(fā)送子模塊223 ;
[0088] 其中,所述任務接收子模塊211,用于接收目標CPU密集型任務;
[0089] 所述任務封裝子模塊212,用于將所述目標CPU密集型任務封裝成目標數(shù)據(jù)處理 任務,其中,所述目標數(shù)據(jù)處理任務包括執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的 名稱以及所需傳遞的參數(shù);
[0090] 所述任務提交子模塊213,用于將所述目標數(shù)據(jù)處理任務提交到任務請求隊列中, 其中,其中,該任務請求隊列為該主進程內(nèi)的預設的工作線程所對應的用于接收主線程提 交的數(shù)據(jù)處理任務的隊列;
[0091] 所述任務轉(zhuǎn)移子模塊221,用于在到達預設處理時機時,將所述任務請求隊列中的 所述目標數(shù)據(jù)處理任務轉(zhuǎn)移至任務處理隊列中;
[0092] 所述任務處理子模塊222,用于運行預先建立的代碼執(zhí)行引擎,基于所述任務處理 隊列中的目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名 稱以及所需傳遞的參數(shù),調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),以執(zhí)行所述目標CPU 密集型任務;
[0093] 所述通知發(fā)送子模塊223,用于在所述目標CPU密集型任務被執(zhí)行完畢后,通過線 程間通信方式通知所述主線程;
[0094] 所述通知接收子模塊214,用于接收所述工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的通 知;
[0095] 所述結(jié)果處理子模塊215,用于通過執(zhí)行回調(diào)函數(shù)獲得所述目標CPU密集型任務 對應的結(jié)果。
[0096] 與現(xiàn)有技術(shù)相比,本方案將CPU密集型任務交給主進程內(nèi)的不同于主線程的工作 線程來處理,使得主線程可以處理CPU密集型任務以外的耗時短的I/O密集型任務,而工作 線程可以處理CPU密集型任務。由于進程內(nèi)的線程共享系統(tǒng)資源,并且,線程間通信效率較 高,因此,可以達到在解決任務阻塞問題的同時,降低系統(tǒng)資源占用率和提高任務處理效率 的目的。
[0097] 具體的,所述工作線程處于運行狀態(tài);
[0098] 所述預設處理時機為:所述工作線程按照預設任務處理規(guī)則檢測所述任務請求隊 列的時刻。
[0099] 具體的,所述工作線程處于睡眠狀態(tài);
[0100] 所述主線程模塊210,還可以包括:信號激活子模塊,用于將所述目標數(shù)據(jù)處理任 務提交到任務請求隊列中后,激活預設信號,其中,所述預設信號能夠使得處于睡眠狀態(tài)的 工作線程獲知;
[0101] 所述預設處理時機可以為:所述工作線程獲知所述主線程所激活的預設信號的時 刻。
[0102] 具體的,所述預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)通過js腳本語言編寫。
[0103] 具體的,所述預設邏輯函數(shù)存儲文件內(nèi)的邏輯函數(shù)通過C++語言編寫;
[0104] 所述任務處理子模塊222,具體用于運行預先建立的代碼執(zhí)行引擎,基于所述任務 處理隊列中的目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù) 的名稱以及所需傳遞的參數(shù),加載所述預設邏輯函數(shù)存儲文件,調(diào)用所加載的預設邏輯函 數(shù)存儲文件中的邏輯函,以執(zhí)行所述目標CPU密集型任務。
[0105] 具體的,所述代碼執(zhí)行引擎可以為v8 VM。
[0106] 對于系統(tǒng)或裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡 單,相關(guān)之處參見方法實施例的部分說明即可。
[0107] 需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實 體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存 在任何這種實際的關(guān)系或者順序。而且,術(shù)語"包括"、"包含"或者其任何其他變體意在涵 蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要 素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備 所固有的要素。在沒有更多限制的情況下,由語句"包括一個......"限定的要素,并不排 除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
[0108] 本領域普通技術(shù)人員可以理解實現(xiàn)上述方法實施方式中的全部或部分步驟是可 以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于計算機可讀取存儲介質(zhì)中, 這里所稱得的存儲介質(zhì),如:R0M/RAM、磁碟、光盤等。
[0109] 以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在 本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍 內(nèi)。
【權(quán)利要求】
1. 一種數(shù)據(jù)處理方法,其特征在于,包括: 基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的主線程接收目標CPU密 集型任務,并將所述目標CPU密集型任務封裝成目標數(shù)據(jù)處理任務,其中,所述目標數(shù)據(jù)處 理任務包括執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名稱以及所需傳遞的參數(shù); 所述主線程將所述目標數(shù)據(jù)處理任務提交到任務請求隊列中,其中,該任務請求隊列 為該主進程內(nèi)的預設的工作線程所對應的用于接收主線程提交的數(shù)據(jù)處理任務的隊列; 所述工作線程在到達預設處理時機時,將所述任務請求隊列中的所述目標數(shù)據(jù)處理任 務轉(zhuǎn)移至任務處理隊列中,并運行預先建立的代碼執(zhí)行引擎,基于所述任務處理隊列中的 目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名稱以及所 需傳遞的參數(shù),調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),以執(zhí)行所述目標CPU密集型任 務; 所述工作線程在所述目標CPU密集型任務被執(zhí)行完畢后,通過線程間通信方式通知所 述主線程; 所述主線程接收所述工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的通知,通過執(zhí)行回調(diào)函數(shù)獲 得所述目標CPU密集型任務對應的結(jié)果。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述工作線程處于運行狀態(tài); 所述預設處理時機為:所述工作線程按照預設任務處理規(guī)則檢測所述任務請求隊列的 時刻。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述工作線程處于睡眠狀態(tài); 所述主線程將所述目標數(shù)據(jù)處理任務提交到任務請求隊列中后,還包括: 激活預設信號,其中,所述預設信號能夠使得處于睡眠狀態(tài)的工作線程獲知; 所述預設處理時機為:所述工作線程獲知所述主線程所激活的預設信號的時刻。
4. 根據(jù)權(quán)利要求1-3任意一項所述的方法,其特征在于,所述預設邏輯函數(shù)存儲文件 內(nèi)的邏輯函數(shù)通過js腳本語言編寫。
5. 根據(jù)權(quán)利要求1-3任意一項所述的方法,其特征在于,所述預設邏輯函數(shù)存儲文件 內(nèi)的邏輯函數(shù)通過C++語言編寫; 調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),包括: 加載所述預設邏輯函數(shù)存儲文件; 調(diào)用所加載的預設邏輯函數(shù)存儲文件中的邏輯函數(shù)。
6. 根據(jù)權(quán)利要求1-3任意一項所述的方法,其特征在于,所述代碼執(zhí)行引擎為v8 VM。
7. -種數(shù)據(jù)處理裝置,其特征在于,包括: 用于執(zhí)行基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的主線程的功 能的主線程模塊、用于執(zhí)行基于Node, js所搭建的數(shù)據(jù)密集型實時應用程序的主進程內(nèi)的 工作線程的功能的工作線程模塊;所述主線程模塊包括任務接收子模塊、任務封裝子模塊、 任務提交子模塊、通知接收子模塊和結(jié)果處理子模塊,所述工作線程模塊包括任務轉(zhuǎn)移子 模塊、任務處理子模塊和通知發(fā)送子模塊; 其中,所述任務接收子模塊,用于接收目標CPU密集型任務; 所述任務封裝子模塊,用于將所述目標CPU密集型任務封裝成目標數(shù)據(jù)處理任務,其 中,所述目標數(shù)據(jù)處理任務包括執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名稱以及 所需傳遞的參數(shù); 所述任務提交子模塊,用于將所述目標數(shù)據(jù)處理任務提交到任務請求隊列中,其中,所 述任務請求隊列為所述主進程內(nèi)的預設的工作線程所對應的用于接收主線程提交的數(shù)據(jù) 處理任務的隊列; 所述任務轉(zhuǎn)移子模塊,用于在到達預設處理時機時,將所述任務請求隊列中的所述目 標數(shù)據(jù)處理任務轉(zhuǎn)移至任務處理隊列中; 所述任務處理子模塊,用于運行預先建立的代碼執(zhí)行引擎,基于所述任務處理隊列中 的目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型任務所需的邏輯函數(shù)的名稱以及 所需傳遞的參數(shù),調(diào)用預設邏輯函數(shù)存儲文件中的邏輯函數(shù),以執(zhí)行所述目標CPU密集型 任務; 所述通知發(fā)送子模塊,用于在所述目標CPU密集型任務被執(zhí)行完畢后,通過線程間通 信方式通知所述主線程; 所述通知接收子模塊,用于接收所述工作線程發(fā)出的關(guān)于任務執(zhí)行完畢的通知; 所述結(jié)果處理子模塊,用于通過執(zhí)行回調(diào)函數(shù)獲得所述目標CPU密集型任務對應的結(jié) 果。
8. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述工作線程處于運行狀態(tài); 所述預設處理時機為:所述工作線程按照預設任務處理規(guī)則檢測所述任務請求隊列的 時刻。
9. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述工作線程處于睡眠狀態(tài); 所述主線程模塊,還包括:信號激活子模塊,用于將所述目標數(shù)據(jù)處理任務提交到任 務請求隊列中后,激活預設信號,其中,所述預設信號能夠使得處于睡眠狀態(tài)的工作線程獲 知; 所述預設處理時機為:所述工作線程獲知所述主線程所激活的預設信號的時刻。
10. 根據(jù)權(quán)利要求7-9任意一項所述的裝置,其特征在于,所述預設邏輯函數(shù)存儲文件 內(nèi)的邏輯函數(shù)通過js腳本語言編寫。
11. 根據(jù)權(quán)利要求7-9任意一項所述的裝置,其特征在于,所述預設邏輯函數(shù)存儲文件 內(nèi)的邏輯函數(shù)通過C++語言編寫;所述任務處理子模塊,具體用于運行預先建立的代碼執(zhí) 行引擎,基于所述任務處理隊列中的目標數(shù)據(jù)處理任務所包含的執(zhí)行所述目標CPU密集型 任務所需的邏輯函數(shù)的名稱以及所需傳遞的參數(shù),加載所述預設邏輯函數(shù)存儲文件,調(diào)用 所加載的預設邏輯函數(shù)存儲文件中的邏輯函,以執(zhí)行所述目標CPU密集型任務。
12. 根據(jù)權(quán)利要求7-9任意一項所述的裝置,其特征在于,所述代碼執(zhí)行引擎為v8 VM。
【文檔編號】G06F9/46GK104216768SQ201410486131
【公開日】2014年12月17日 申請日期:2014年9月22日 優(yōu)先權(quán)日:2014年9月22日
【發(fā)明者】尤嘉 申請人:北京金山安全軟件有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1