• / 12
  • 下載費用:30 金幣  

實現JAVASCRIPT多任務機制的方法和設備.pdf

摘要
申請專利號:

CN201510381861.3

申請日:

2015.07.02

公開號:

CN104991823A

公開日:

2015.10.21

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效IPC(主分類):G06F 9/48申請日:20150702|||公開
IPC分類號: G06F9/48 主分類號: G06F9/48
申請人: 北京京東尚科信息技術有限公司; 北京京東世紀貿易有限公司
發明人: 夏萬強
地址: 100080北京市海淀區杏石口路65號西杉創意園西區11C樓東段1-4層西段1-4層
優先權:
專利代理機構: 中科專利商標代理有限責任公司11021 代理人: 倪斌
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201510381861.3

授權公告號:

||||||

法律狀態公告日:

2019.05.17|||2015.11.18|||2015.10.21

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

為了解決在前端瀏覽器環境和后端node.js環境中統一使用Javascript多任務機制的問題,本發明提供了一種用于實現Javascript多任務機制的方法。該方法包括:在Javascript環境中使用主動對象來模擬需要執行的一個或多個任務;以及使用Javascript自身的事件循環機制對已由所述主動對象模擬的所述一個或多個任務進行執行調度。通過上述方法,可以解決在前端瀏覽器環境和后端node.js環境中統一使用Javascript多任務機制的問題。

權利要求書

權利要求書
1.  一種用于實現Javascript多任務機制的方法,包括:
在Javascript環境中使用主動對象來模擬需要執行的一個或多個任務;以及
使用Javascript自身的事件循環機制對已由所述主動對象模擬的所述一個或多個任務進行執行調度。

2.  根據權利要求1所述的方法,還包括:
在進行執行調度之前,將所述主動對象注冊到框架中。

3.  根據權利要求1所述的方法,還包括:
所述主動對象接收相關事件,并將接收到的相關事件放入所述主動對象的事件隊列中。

4.  根據權利要求3所述的方法,其中,所述主動對象接收相關事件并將接收到的相關事件放入所述主動象的事件隊列中包括:
定時檢查業務定時器是否觸發;以及
如果觸發,將所述相關事件加入與所觸發的業務定時器對應的主動對象的事件隊列中。

5.  根據權利要求3所述的方法,還包括:
當所述主動對象接收到所述相關事件時,設置Javascript定時為零的定時器任務,以將所述Javascript定時為零的定時器任務添加到Javascript自身的事件循環隊列中;以及
使用Javascript自身的事件循環機制對所述Javascript定時為零的定時器任務進行執行調度。

6.  根據權利要求1-5中任一項所述的方法,還包括:
根據所進行的執行調度,所述主動對象從所述主動對象的事件隊列取出事件,并根據所述主動對象的當前狀態對所取出的事件進行分發處理。

7.  根據權利要求6所述的方法,其中,所述分發處理是按狀態機的方式實現的。

8.  一種用于實現Javascript多任務機制的設備,所述設備包括:
模擬模塊,被配置為在Javascript環境中使用主動對象來模擬需要執行的一個或多個任務;以及
調度模塊,被配置為使用Javascript自身的事件循環機制對已由所述主動對象模擬的所述一個或多個任務進行執行調度。

9.  根據權利要求8所述的設備,還包括:
注冊模塊,被配置為在所述調度模塊進行執行調度之前,將所述主動對象注冊到框架中。

10.  根據權利要求8所述的設備,還包括:
收發模塊,被配置為使所述主動對象接收相關事件,并將接收到的相關事件放入所述主動對象的事件隊列中。

11.  根據權利要求8所述的設備,還包括:
定時檢測模塊,被配置為定時檢查框架的業務定時器是否觸發,
其中,如果觸發,所述收發模塊使得將所述相關事件加入與所觸發的業務定時器對應的主動對象的事件隊列中。

12.  根據權利要求8所述的設備,還包括:
定時模塊,被配置為當所述主動對象接收到所述相關事件時,設置Javascript定時為零的定時器任務,以將所述Javascript定時為零的定時器任務添加到Javascript自身的事件循環隊列中,
其中,所述調度模塊使用Javascript自身的事件循環機制對所述Javascript定時為零的定時器任務進行執行調度。

13.  根據權利要求8-12所述的設備,還包括:
執行模塊,被配置為根據所述調度模塊進行的執行調度,使所述主動對象從所述主動對象的事件隊列取出事件,并根據所述主動對象的當前狀態對所取出的事件進行分發處理。

14.  根據權利要求13所述的設備,其中,所述執行模塊按狀態機的方式進行所述分發處理。

說明書

說明書實現Javascript多任務機制的方法和設備
技術領域
本發明涉及互聯網技術領域,并具體地涉及一種用于實現Javascript多任務機制的方法和設備。
背景技術
隨著互聯網技術的發展,Javascript不但占據了瀏覽器端的運行環境,而且利用node.js技術開始在服務器后端應用上也得到發展。但無論在瀏覽器環境還是在后端的node.js運行環境,Javascript都是在單線程里運行,所有的任務都是順序執行的,這在早期的web網站型應用只利用Javascript處理頁面交互還是足夠的,并能帶來很多便利,但隨著互聯網富應用(rich internet application)逐漸普及以及Javascript涉及后臺業務實現的情況下,Javascript多任務機制成為必須。
目前在瀏覽器端和node.js后端服務器環境存在一些技術來實現Javascript下的多任務機制。
在支持HTML5的前端瀏覽器環境可以使用Web Worker來實現Javascript的多任務,每個Web Worker在瀏覽器的單個線程中執行。早期的瀏覽器使用iFrame技術來模擬多任務機制,瀏覽器里每個Frame在單獨的線程里運行。后端的node.js環境中可以子進程來實現多任務,也可以通過纖程(fiber)來實現多任務。
然而使用Web Worker技術必須使用支持HTML5的瀏覽器,而早期的瀏覽器如IE6、IE7等并不支持HTML5,而且因為HTML5標準尚未完成,還存在瀏覽器兼容問題;Web Worker之間的交互還存在一些不便。此技術比較適合實現IO和密集計算等性質的多任務。
Node.js中使用子進程實現多任務較耗資源,子進程之間的交互不太方便;使用纖程需要擴展node.js,纖程本身使用的是V8系統的線程實現,纖程之間交互不方便。
上述技術要不限制在瀏覽器端,要不限制在node.js環境中,無法在前后兩端統一使用。
因此,需要能夠實現在前后兩端統一使用的Javascript多任務機制的方法和設備。
發明內容
因此,需要一種能夠減輕或解決上述問題的用于實現Javascript多任務機制的方法。
根據本發明的一個方案,提供了一種用于實現Javascript多任務機制的方法,包括:在Javascript環境中使用主動對象來模擬需要執行的一個或多個任務;以及使用Javascript自身的事件循環機制對已由所述主動對象模擬的所述一個或多個任務進行執行調度。
根據本發明的另一方案,提供了一種用于實現Javascript多任務機制的設備,該設備包括模擬模塊,被配置為在Javascript環境中使用主動對象來模擬需要執行的一個或多個任務;以及調度模塊,被配置為使用Javascript自身的事件循環機制對已由該主動對象模擬的該一個或多個任務進行執行調度。
本發明的上述技術方案通過使用Javascript自身的事件循環機制來實現多任務的執行調度,任務執行的順序和事件到達的順序一致,保證操作語義上的穩定性,且可以適用于前后端的運行環境,消除了瀏覽器兼容問題。
附圖說明
通過下面結合附圖對發明進行的詳細描述,將使本發明的上述特征和優點更加明顯,其中:
圖1是示出根據本發明的實施例的Javascript多任務機制的示意圖;
圖2是示出根據本發明的一個實施例的Javascript多任務機制實現方法的示意流程圖;
圖3是示出根據本發明的另一實施例的Javascript多任務機制實 現方法的示意流程圖;以及
圖4是示出根據本發明的一個實施例的Javascript多任務機制實現設備的示意框圖。
具體實施方式
下面,參考附圖詳細說明本發明的優選實施方式。在附圖中,雖然示于不同的附圖中,但相同的附圖標記用于表示相同的或相似的組件。為了清楚和簡明,對已知功能和結構的詳細描述將被省略,以避免使本發明的主題不清楚。
Javascript運行環境是基于事件循環(Event Loop)機制的,運行時(Runtime)逐步從事件隊列中取出事件并調用相應的事件處理程序來執行,如果沒有事件,則進入空閑狀態。
在本發明的實施例中,使用主動對象模擬需要執行的任務,每個主動對象都在自己獨立的運行環境中運行,主動對象里包含了該對象運行所需要的所有狀態信息。主動對象之間通過發送事件進行交互,主動對象里定義了如何處理各種事件的方法。
在Javascript環境中所有主動對象都在主線程里運行,但相互不干擾,不共享狀態。本發明的實施例使用主動對象模擬任務,然后使用Javascript自身的事件循環機制實現分時調度,從而實現多任務機制。
圖1示出了根據本發明的實施例的Javascript多任務機制的示意圖。
在該示意圖中,Javascript事件循環負責運行環境的事件分發處理,UI事件(UI event)、IO事件(IO event)、系統事件(System event)以及定時器事件(Timer event)都由它來調度分發。
框架(Framework)包含了所有主動對象列表,管理業務事件的發布/訂閱,管理所有業務任務相關的定時器。在圖1的一般性示例的一個實現示例中,其可包括以下屬性
activeObjects:[],主動對象列表,用于管理所有主動對象的生命周期
subscribes:{},主動對象訂閱的業務事件的地圖,管理業務事件的發布和訂閱
timeEvents:[],業務相關的定時事件
timerId:0,業務定時事件檢查的定時器
tickRate:50,業務定時事件檢查時間間隔,以毫秒為單位
tick:function  業務定時事件的定時處理函數
框架(Framework)可定時(如每隔10ms)檢查定時器列表(timer list)中的業務定時器是否觸發,若觸發則將相應的事件加入到任務的事件隊列里。而在使用主動對象來模擬任務時,每當主動對象接收到事件,就會設置Javascript定時任務(將定時時間設置為0),以此來對該任務做執行調度。當Javascript事件循環開始處理該定時事件時,執行對應的任務。任務的執行則是從該任務事件隊列中取出第一個事件進行分發,任務對象(即,對應的主動對象)可根據當前狀態對事件進行處理。任務對象可按狀態機方式實現。
框架(Framework)管理所有的主動對象,所有主動對象在使用前可注冊到框架中,框架可提供按照名稱或ID獲取主動對象的接口。框架還實現了一個事件總線(Event Bus),主動對象可以訂閱一些事件,也可以根據業務需要發布特定事件,事件總線會將相應的事件發送到訂閱者(相應主動對象)的事件隊列中,以此激活該主動對象的執行調度,來處理此事件。框架也在定時器列表(timer list)中管理所有主動對象的定時器,定時檢查定時器是否觸發。
主動對象類似一個輕量級線程,一直處于運行狀態等待事件(例如框架根據該主動對象的訂閱發送的事件)的來臨。當接收到事件時,該對象加入到Javascript事件循環中等待執行。圖1中示出的主動對象的各項屬性如下:
EventQueue  事件隊列,用于存儲所有收到的業務事件
DeferQueue  延遲事件隊列,存儲所有當前狀態不能處理且需要延后處理的事件;
Properties  可能狀態對象,定義主動對象可能出現的狀態;
State       當前狀態對象,每個狀態對象定義了所有它能處理的 事件的處理邏輯和狀態遷移前后的處理邏輯
Dispatch    事件分發處理,取出事件隊列中的一個事件交給當前狀態進行事件處理
事件的發送和處理是異步的,主動對象的一個執行周期,就是從自己的事件隊列中取出一個事件,將該事件分發,根據主動對象當前狀態和事件類型作相應的業務處理。處理事件過程中也會發生對象狀態的遷移。主動對象的內部可采用狀態機的機制。當主動對象的當前狀態不適合處理所分發的事件時,可以忽略該事件,或者將該事件加入延遲事件隊列,當對象處于合適的狀態時再召回這些事件,這就是事件的延遲和召回機制。主動對象之間可以有父子關系,父對象負責管理子對象的生命周期,這對應于任務和子任務之間的關系。主動對象之間通過事件傳遞進行交互,相互間不共享任何狀態,整個交互機制是基于事件驅動的異步交互方式。
每個事件包含了事件類型信息、發送者信息和相關數據。事件的各項屬性如下:
type   定義事件類型
sender 定義事件發送對象
data   定義事件的數據
事件的處理和發送是異步的,事件發送只是將該事件加入到目標任務的事件隊列中,只有到下次調度時,事件才執行。
基于上述的實現機制,下面參考圖2和圖3描述根據本發明實施例的Javascript多任務機制實現方法的示意流程圖。
圖2示出了根據本發明實施例的Javascript多任務機制實現方法的簡要視圖。
如圖2中所示,在步驟210中,在Javascript環境中使用主動對象來模擬需要執行的一個或多個任務。
在步驟220中,使用Javascript自身的事件循環機制對已由主動對象模擬的該一個或多個任務進行執行調度。
而在根據本發明的其他實施例中,Javascript多任務機制實現方法還可包括更多步驟。圖3示出了這樣的一個示例。
在圖3的步驟310中,在Javascript環境中使用主動對象來模擬需要執行的一個或多個任務
在步驟320中,例如在進行執行調度之前,將主動對象注冊到框架。此時,主動對象可訂閱相關事件,也可以根據業務需要發布特定事件。
框架可提供按照名稱或ID來獲取主動對象的接口。
在步驟330中,主動對象可發送/接收相關事件,并將接收到的相關事件放入該主動對象的事件隊列(Event Queue)中。
主動對象可通過框架實現的事件總線接收相關事件。在步驟340的一些實現示例中,框架可定時(如每隔10ms)檢查其定時器列表中的業務定時器是否觸發,若觸發則可將相應的事件加入到對應任務(即與所觸發的業務定時器對應的主動對象)的事件隊列里。
在步驟340中,在接收到相關事件時,主動對象設置Javascript定時為零的定時器任務。
定時為零的定時器任務會直接加入到javascript的事件循環隊列里,而不需要定時器的分時操作。
在步驟350中,利用Javascript自身的事件循環機制來對所設置的Javascript定時器為零的定時器任務進行執行調度。
Javascript事件循環在處理該定時事件時,執行對應的任務。
在步驟360中,主動對象根據步驟350中的調度從事件隊列取出事件,并根據該主動對象的當前狀態(State)對所取出的事件進行分發處理。
在步驟360的一些實現示例中,可從任務事件隊列中取出第一個事件進行分發,對應的主動對象可根據當前狀態(State)對事件進行處理。其中,任務對象可按狀態機方式實現所述處理。
雖然本發明附圖2和3以特定的順序描述了本發明的一些實施例,然而需要注意的是,這些實施例可采用更多或更少的步驟,且并非必須按照圖中所示的順序來執行這些步驟。
圖4示出了根據本發明的一些實施例的Javascript多任務機制實現設備。如圖4所示,該實現設備包括:模擬模塊410,被配置為在 Javascript環境中使用主動對象來模擬需要執行的一個或多個任務;調度模塊420,被配置為使用Javascript自身的事件循環機制對已由主動對象模擬的該一個或多個任務進行執行調度。
在一些實施例中,該實現設備還可包括注冊模塊430,被配置為在調度模塊420進行執行調度之前,將主動對象注冊到框架。其中,框架可提供按照名稱或ID來獲取主動對象的接口。
在一些實施例中,該實現設備還可包括收發模塊440,被配置為使主動對象可發送/接收相關事件,并將接收到的相關事件放入該主動對象的事件隊列(Event Queue)中。其中,主動對象可通過框架實現的事件總線(未示出)接收相關事件。
在一些實施例中,該實現設備還可以包括定時檢測模塊470,被配置為定時檢查框架的業務定時器是否觸發。如果被觸發,收發模塊440使得將該相關事件加入與所觸發的業務定時器對應的主動對象的事件隊列中。
在一些實施例中,該實現設備還可以包括定時模塊450,被配置為在主動對象接收到相關事件時,使主動對象設置Javascript定時為零的定時器任務。此時,調度模塊420利用Javascript自身的事件循環機制來對定時模塊450設置的Javascript定時為零的定時器任務進行執行調度。
在一些實施例中,該實現設備還包括執行模塊460,用于根據調度模塊420的調度,使主動對象從該主動對象的事件隊列取出事件并根據該主動對象的當前狀態對所取出的事件進行分發處理。
在一些示例中,該分發處理是按狀態機的方式進行的。
本發明的上述Javascript多任務機制實現設備可通過軟件、硬件或其二者的組合來實現。例如,可通過軟件模塊的形式實現,或通過專用硬件的形式實現,本發明不對此進行限制。此外,在實際的實現中,也可以包括比圖4中所示的模塊多或少的模塊來實現該設備。該設備也可以包括/涉及未示出的更多組件,例如用于存儲數據的存儲模塊等。
本發明實施例的上述技術方案通過Javascript自身的事件循環機 制來實現多任務的執行調度,任務執行的順序和事件到達的順序一致,保證操作語義上的穩定性。可以適用于前后端的運行環境,消除了瀏覽器兼容問題。業務任務被抽象為活動對象,通過事件進行交互,從設計上比較符合面向對象的設計方法,異步事件機制也消除了回調方式帶來的復雜性。
上面的描述僅用于實現本發明的實施方式,本領域的技術人員應該理解,在不脫離本發明的范圍的任何修改或局部替換,均應該屬于本發明的權利要求來限定的范圍,因此,本發明的保護范圍應該以權利要求書的保護范圍為準。

關 鍵 詞:
實現 JAVASCRIPT 任務 機制 方法 設備
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:實現JAVASCRIPT多任務機制的方法和設備.pdf
鏈接地址:http://www.rgyfuv.icu/p-6381709.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
山东11选5中奖结果走势图