• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Node.js的JavaScript并發(fā)控制流框架

    2015-11-19 03:54:04李軼
    江漢大學學報(自然科學版) 2015年2期
    關鍵詞:緩沖區(qū)計數器調用

    李軼

    (江漢大學 數學與計算機科學學院,湖北 武漢 430056)

    基于Node.js的JavaScript并發(fā)控制流框架

    李軼

    (江漢大學 數學與計算機科學學院,湖北 武漢 430056)

    Node.js因其異步I/O的特性,非常適合于服務器端的JavaScript開發(fā)。然而為實現此環(huán)境下異步I/O的并發(fā)控制,開發(fā)者不得不手工編寫繁瑣的代碼,因而給開發(fā)者造成了障礙。以并發(fā)計數器為基礎,可以設計一個并發(fā)控制流框架。該框架以直觀的調用形式,實現了異步I/O間的并發(fā)控制;其不僅有助于Node.js環(huán)境下的JavaScript開發(fā),更提高了開發(fā)者的開發(fā)效率。

    異步I/O;并發(fā);同步;并發(fā)計數器;JavaScript

    0 引言

    時至今日,JavaScript的應用領域早已從前端的Web瀏覽器,延伸到后臺服務器。作為一個基于V8[1]引擎的服務器端JavaScript環(huán)境,Node.js[2]從發(fā)布之初就備受矚目。Node.js以V8引擎的輕量、高效、快速為基礎,同時又提供了基于事件驅動的異步I/O(Asynchronous I/O)特性[3],使其非常適合于開發(fā)不同規(guī)模的數據密集型、實時型分布式應用。

    1 異步I/O與并發(fā)控制

    異步I/O又稱為非阻塞式I/O,它是Node.js具有的獨特特性。不同于傳統(tǒng)的每客戶一服務線程的服務器架構,Node.js是單線程腳本環(huán)境。其核心思想是用一個服務線程應對多個客戶請求。當服務進程響應客戶請求執(zhí)行I/O操作(如網絡I/O、文件I/O或數據庫I/O等)時,異步I/O可避免因服務線程被I/O操作阻塞而無法響應其他用戶請求的情況。因此,異步I/O不僅避免了多服務線程對服務器資源的過多占用,又提高了服務線程的執(zhí)行效率,從而使一個服務線程就能應對大量的并發(fā)客戶請求。

    在調用異步I/O函數時,通常都需要指定一個或多個回調函數作為其參數。這是因為異步I/O的非阻塞特性,異步函數在調用后會立即返回。當I/O操作完成后,需要回調函數通知調用者I/O操作完成。此外,回調函數可能還帶有若干參數,其是I/O操作所返回的數據。

    有時為實現某一特定功能或為提高程序執(zhí)行效率,多個異步I/O之間既需要并發(fā)(concurrency)[4],又需要在彼此間進行同步(synchronization)[5]。例如,有3個異步I/O可并發(fā)執(zhí)行,但同時要求3個異步I/O全部完成后,才能執(zhí)行下一步操作。此時,最通常的辦法是通過設置并檢查多個標志位來實現。假設3個異步I/O函數分別為ioA、ioB和ioC。為達成此目標,需要設置3個I/O標志位,分別為:tagA、tagB、tagC,并將其初值設為false。此后,在每個I/O函數的異步回調中,再將該標識位置設為true,并檢查其余標志位。若所有標志位全為true,則表明并發(fā)全部完成,可進行下一步操作。例程如下:

    由此可以看出,這種復雜繁瑣的代碼,雖然在執(zhí)行邏輯上正確,但是在程序編寫,代碼可讀性及程序調試上存在諸多不便。特別是在開發(fā)較為復雜邏輯的系統(tǒng)時,隨著標志位的增加,復雜繁瑣的代碼已經成為開發(fā)者的阻礙。因此需要一種方法,將復雜的代碼簡化;也就是說需要一種并發(fā)控制流框架,實現異步I/O間的并發(fā)控制。

    2 任務對象與并發(fā)任務緩沖區(qū)

    為解決上述問題,可考慮應用并發(fā)計數器機制。每個異步I/O的調用,可封裝成為一個任務對象;依據任務對象的數目,設置并發(fā)計數器的初值。當某個任務完成時(即當其I/O函數的回調函數被調用時)將并發(fā)計數器值減1;若并發(fā)計數器的值減1后為0,則表明所有并發(fā)任務均執(zhí)行完畢。如此,多個異步I/O間的并發(fā)控制就可抽象為任務及并發(fā)任務計數器的相關操作。

    對異步I/O任務而言,其具體屬性包括:任務名、任務函數和任務參數;此外,還需要為多個并發(fā)任務建立一個并發(fā)緩沖區(qū),其狀態(tài)圖如圖1所示。并發(fā)緩沖區(qū)創(chuàng)建后為就緒狀態(tài),當需要同步的多個并發(fā)任務加入緩沖區(qū)后,就可啟動并發(fā)同步過程。由于任務函數中包含了異步調用,任務函數執(zhí)行完后會立即返回,但此時并不能認為該任務完成,而是在未來某個時刻,在該任務中的異步回調得到執(zhí)行后,才可認為該任務執(zhí)行完畢。在該任務完成后,并發(fā)計數器的值會自動減1,并檢查其值。若為0則表明所有并發(fā)任務均執(zhí)行完畢,緩沖區(qū)返回就緒態(tài)。此外,當某任務執(zhí)行出錯時,緩沖區(qū)進入終止狀態(tài);當某任務超時時,緩沖區(qū)進入超時狀態(tài)。在此兩種狀態(tài)下,都可重新將緩沖區(qū)復位為就緒態(tài)。

    圖1 并發(fā)任務緩沖區(qū)狀態(tài)圖Fig.1 State chart of concurrent task buffer

    3 基于計數器的并發(fā)控制流框架

    以上述討論作為基礎,可構造一個以并發(fā)計數器為核心的并發(fā)控制流框架。該框架以Node.js的模塊形式為用戶提供調用接口,模塊命名為“concurrentBuf”。另外,由于Node.js為單線程腳本環(huán)境,因此也無需考慮計數器操作的線程安全問題。

    3.1 模塊接口規(guī)范(Module interface specifications)

    3.1.1 create函數 模塊的唯一調用接口為函數“create”,該函數用于創(chuàng)建一個新的并發(fā)緩沖區(qū)對象。其函數聲明為:function create(name,timeoutMs)。

    其中參數name為并發(fā)緩沖區(qū)的名稱;timeoutMs為并發(fā)任務超時毫秒數,即在所有任務中,最長的任務耗時不得超過timeoutMs的毫秒數;否則認為并發(fā)同步超時。

    3.1.2 并發(fā)任務緩沖區(qū)對象的方法 并發(fā)任務緩沖區(qū)對象有如下方法。

    1)push方法

    該方法將一個并發(fā)任務放入緩沖區(qū)。

    其方法聲明為:push(name,task,argsAry)。

    其中參數name為并發(fā)任務名;task為任務函數;argsAry為函數task的參數數組,其中每個元素為一個參數對象。參數對象具有屬性type和屬性value;其中type屬性為字符串類型,其用于指示參數的類型。特別需要注意的是,參數的類型除包括JavaScript標準類型之外,還包括類型“callback”,其表示該參數為一回調函數;屬性value則用來存儲實際的參數值。

    2)reset方法

    該方法將并發(fā)任務緩沖區(qū)重新復位,無需任何參數。

    3)start方法

    該方法啟動并發(fā)緩沖區(qū)中的所有任務,無需任何參數。

    4)onError方法

    其聲明格式為:onError(errorCb)。

    該方法用于指定當某個并發(fā)任務發(fā)生執(zhí)行錯誤時的事件處理函數,通過參數errorCB指定。該方法返回并發(fā)緩沖區(qū)本身的引用。錯誤事件處理函數errorCb的函數聲明為:function(taskName,e)。其中參數taskName為發(fā)生錯誤的任務名;參數e為錯誤對象。

    5)onComplete方法

    其聲明格式為:onComplete(cb)。

    該方法用于指定并發(fā)任務全部完成時的事件處理函數,通過參數cb指定。

    6)onTimeout方法

    其聲明格式為:onTimeout(cb)。

    該方法用于指定并發(fā)任務超時的事件處理函數,通過參數cb指定。

    3.1.3 并發(fā)任務緩沖區(qū)對象的事件 并發(fā)任務緩沖區(qū)對象有如下事件。

    1)error事件

    當某個并發(fā)任務執(zhí)行中發(fā)生錯誤時,該事件被觸發(fā)。該事件的處理函數聲明為:function(taskName,e),由緩沖區(qū)對象的onError方法指定。

    其中參數taskName為發(fā)生錯誤的任務名,參數e為錯誤對象,其具有的屬性包括:code,message和stack;其中code屬性為錯誤代碼;message屬性為出錯信息字符串;stack屬性為出錯時的函數調用棧。

    2)complete事件

    當所有并發(fā)任務完成時,該事件被觸發(fā)。該事件處理函數由緩沖區(qū)對象的onComplete方法進行指定,該事件無其他參數。

    3)timeout事件

    當并發(fā)任務同步超時時,該事件被觸發(fā)。該事件處理函數由緩沖區(qū)對象的onComplete方法進行指定,該事件無其他參數。

    3.2 模塊實現

    3.2.1 create函數 函數create用于創(chuàng)建一個并發(fā)緩沖對象,此函數也是模塊對外暴露的唯一接口函數。其函數聲明為:function create(name,timeoutMs)。其中參數name為并發(fā)緩沖區(qū)名稱;timeoutMs為任務超時毫秒數。函數的返回值,即為并發(fā)緩沖區(qū)對象,其具有的方法和事件已經在上述模塊接口規(guī)范中進行了說明。

    3.2.2 并發(fā)任務計數器 本框架使用create函數的局部變量pCunter存儲引用計數值。由于閉包(closure)[6]的作用,pCunter受到保護,防止了其從外部被訪問,并具有和緩沖區(qū)對象相同的生存期。

    3.2.3 并發(fā)任務存儲 本框架使用create函數的局部變量pBuffer存儲任務隊列。pBuffer為一數組,其中的每個成員,都是一個任務對象。任務對象具有3個屬性:fName、fn和argary。其中fName為任務名;fn為任務函數;argary為任務函數參數值數組。

    同樣由于閉包的作用,pBuffer受到保護,防止了其從外部被訪問,并具有和緩沖區(qū)對象相同的生存期。

    3.2.4 并發(fā)任務緩沖區(qū)狀態(tài) 本框架使用模塊全局對象STATES,枚舉緩沖區(qū)的所有狀態(tài)。緩沖區(qū)對象的狀態(tài)轉換,如圖2所示。對象STATES包含以下屬性:ready、running、terminated和expired。屬性ready表示緩沖區(qū)就緒,其值為0;屬性running表示并發(fā)任務運行中,其值為1;屬性terminated表示緩沖區(qū)因某任務執(zhí)行異常而終止,其值為2;屬性expired表示任務執(zhí)行超時導致緩沖區(qū)并發(fā)同步超時,其值為3。

    圖2 并發(fā)任務緩沖區(qū)對象狀態(tài)圖Fig.2 Object state chart of concurrent task buffer

    對于緩沖區(qū)狀態(tài)的保存,則由模塊函數create的局部變量pState存儲。

    3.2.5 并發(fā)任務的加入 并發(fā)任務的加入由緩沖區(qū)對象的push方法完成,具體描述已在模塊接口定義規(guī)范中進行了說明,執(zhí)行流程較為簡單。push方法首先判斷緩沖區(qū)的當前狀態(tài),若不處于就緒態(tài),則方法直接返回;否則,push方法將任務名、任務函數以及任務參數數組封裝成為一個任務對象,并將之追加到pBuffer數組中。

    3.2.6 任務對象的封裝 如上所述,push方法會將任務名、任務函數以及任務參數數組封裝成為一任務對象。在對任務進行封裝時,有兩個需要注意的地方。

    首先,為捕獲任務函數中可能發(fā)生的執(zhí)行異常,需要對任務函數進行二次封裝。即在原任務函數的基礎上構造出一個新的函數,如圖3所示。此函數通過try…catch語句調用原任務函數,若發(fā)生異常,則在catch子句中終止超時計時器,并改變緩沖區(qū)狀態(tài)為終止態(tài)(STATUS.terminated),然后觸發(fā)緩沖區(qū)的error事件,并將捕獲的錯誤對象交由用戶進行處理。

    其次,為保證并發(fā)引用計數器在任務完成后能自動減1,還需要對任務參數數組中的回調函數進行二次封裝。圖4為任務回調的二次封裝函數執(zhí)行流程。二次封裝函數首先檢查當前緩沖區(qū)狀態(tài);若為運行態(tài)(STATUS.running),則將計數器減1,然后執(zhí)行用戶的任務回調函數。在用戶回調函數返回后,檢查計數器的值,若為0則表示所有并發(fā)任務均已完成,因此終止超時計時器,并設置緩沖區(qū)狀態(tài)為就緒態(tài),最后觸發(fā)緩沖區(qū)complete事件;若當前緩沖區(qū)狀態(tài)為非運行態(tài),說明有某任務執(zhí)行異常或超時,并發(fā)執(zhí)行失敗,因此直接返回即可。

    圖3 任務函數的二次封裝函數執(zhí)行流程圖Fig.3 Executive flow chart of the second wrapper function of task function

    圖4 任務回調的二次封裝函數執(zhí)行流程Fig.4 Flow chart of the second wrapper function of task callback

    由此可見,任務對象中的任務函數及參數數組中的回調函數都是其原函數的二次封裝函數。

    3.2.7 并發(fā)任務的啟動 并發(fā)任務的啟動由并發(fā)緩沖區(qū)對象的start方法完成。該方法的執(zhí)行流程較為簡單,首先啟動一個任務超時計時器,并設置好其超時回調函數;然后設置引用計數器pCunter的初值為pBuffer數組長度,并設置緩沖區(qū)狀態(tài)為運行態(tài)。最后,依次調用pBuffer數組中每個任務對象的任務函數。

    3.2.8 并發(fā)任務緩沖區(qū)復位 并發(fā)緩沖區(qū)復位由并發(fā)緩沖區(qū)對象的reset方法實現,其執(zhí)行流程較為簡單。首先檢查當前隊列狀態(tài)是否為終止態(tài)或超時態(tài)。若是,則清空pBuffer數組并更改狀態(tài)為就緒態(tài)(STATUS.ready)。

    3.3 模塊接口導出

    本模塊的唯一導出接口為函數create,通過Node.js的模塊對象module的exports屬性進行導出,示例如下:

    module.exports={"create":create};

    4 示例

    以一個簡單的實例演示本框架的使用方法。假設有兩個文件讀取操作,分別為文件A.txt和B.txt,需要并發(fā)控制完成,示例如下:

    程序首先通過require函數,分別獲得并發(fā)同步模塊parallelBuffer和Node.js的文件系統(tǒng)模塊fs。接著調用parallelBuffer的create函數,創(chuàng)建一個并發(fā)同步緩沖區(qū)buf;通過指定timeoutMs參數為5 000設定任務的最長超時為5 000 ms;接著調用其onError方法,onTimeout方法和onComplete方法,分別指定了任務在出錯、超時和所有任務完成時的事件處理函數。

    接下來,通過緩沖區(qū)對象的push方法,添加了兩個并發(fā)任務"read_fileA"及"read_fileB";其任務函數通過Node.js的fs文件系統(tǒng)模塊,分別讀取文件A.txt和文件B.txt的內容。任務函數的調用參數,被封裝為1個數組;本例中的任務函數需要2個參數,因此其參數數組包含2個元素,分別為文件名以及文件讀取完畢的回調函數。

    最后,程序通過緩沖區(qū)對象的start方法啟動并發(fā)任務。若所有并發(fā)任務執(zhí)行無誤,則程序將在控制臺輸出“所有任務并發(fā)同步完成!”。

    5 結語

    通過并發(fā)計數器的應用,在Node.js環(huán)境下成功地設計了一個并發(fā)控制流框架。解決了因多個異步I/O并發(fā)控制所導致的代碼繁瑣、邏輯復雜等的問題??蚣茉谠O計上簡潔易用,語義明確清晰,代碼可讀性強,符合開發(fā)者的一般邏輯;同時又采用純JavaScript實現,不依賴第三方模塊或組件,具有較好的通用性,稍加修改就能適用于各種JavaScript環(huán)境。

    [1]WIKIPEDIA.V8(JavaScript engine)[EB/OL].(2014-6-23)[2014-9-10]http://en.wikipedia.org/wiki/V8_(JavaScript_engine).

    [2]WIKIPEDIA.Node.js[EB/OL].(2014-7-10)[2014-9-10]http://en.wikipedia.org/wiki/Node.js.

    [3]WIKIPEDIA.Asynchronous I/O[EB/OL].(2014-6-11)[2014-9-10]http://en.wikipedia.org/wiki/Asynchronous_I/O.

    [4]WIKIPEDIA.Concurrency(computer science)[EB/OL].(2014-10-11)[2014-10-11]http://en.wikipedia.org/wiki/Concurrency_(computer_science).

    [5]WIKIPEDIA.Synchronization(computer science)[EB/OL].(2014-10-15)[2014-10-15]http://en.wikipedia.org/wiki/Synchronization_(computer_science).

    [6]WIKIPEDIA.Closure(computer science)[EB/OL].(2014-10-17)[2014-10-17]http://en.wikipedia.org/wiki/Closure_(computer_programming).

    [7]BURNHAM T.JavaScript異步編程:設計快速響應的網絡應用[M].北京:人民郵電出版社,2013.

    (責任編輯:范建鳳)

    JavaScript Concurrent Flow-Control Framework Based on Node.js

    LI Yi
    (School of Mathematics and Computer Science,Jianghan University,Wuhan 430056,Hubei,China)

    Because of the asynchronous characteristic of I/O,Node.js is quite suitable for developing server-side JavaScript applications.To implement concurrent asynchronous I/O control,developers have to write tedious code manually,it becomes a barrier to developers.Based on the concurrent counter,a concurrent flow-control framework can be constructed.The framework achieved concurrent control between multiple asynchronous I/O in a direct viewing way.Thus,it benefits server-side JavaScript developments and also promotes the efficiency of development.

    asynchronous I/O;concurrency;synchronization;concurrent counter;JavaScript

    TP393.01

    A

    1673-0143(2015)02-0170-07

    10.16389/j.cnki.cn42-1737/n.2015.02.013

    2014-10-27

    李 軼(1976—),男,實驗員,碩士,研究方向:網絡管理。

    猜你喜歡
    緩沖區(qū)計數器調用
    嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設計與實現
    采用虛擬計數器的電子式膜式燃氣表
    煤氣與熱力(2022年2期)2022-03-09 06:29:30
    核電項目物項調用管理的應用研究
    LabWindows/CVI下基于ActiveX技術的Excel調用
    測控技術(2018年5期)2018-12-09 09:04:46
    基于系統(tǒng)調用的惡意軟件檢測技術研究
    計數器競爭冒險及其處理的仿真分析
    關鍵鏈技術緩沖區(qū)的確定方法研究
    任意N進制計數器的設計方法
    河南科技(2014年10期)2014-02-27 14:09:30
    基于單片機的仰臥起坐計數器
    利用RFC技術實現SAP系統(tǒng)接口通信
    国产免费一级a男人的天堂| 亚洲欧美日韩卡通动漫| 成年免费大片在线观看| 青春草视频在线免费观看| 人人妻人人澡人人爽人人夜夜 | 国产视频内射| 国内精品久久久久精免费| 黄色配什么色好看| 日韩欧美精品v在线| 亚洲av成人av| 久久国内精品自在自线图片| 最近最新中文字幕大全电影3| 看十八女毛片水多多多| 亚洲精品成人久久久久久| 九九热线精品视视频播放| 日本五十路高清| 国产不卡一卡二| 国国产精品蜜臀av免费| av女优亚洲男人天堂| 最近最新中文字幕大全电影3| 免费av不卡在线播放| 久久精品国产自在天天线| 偷拍熟女少妇极品色| 可以在线观看的亚洲视频| 精品久久久久久久久久免费视频| 欧美日韩一区二区视频在线观看视频在线 | 久久久精品欧美日韩精品| 日本一二三区视频观看| 国产 一区 欧美 日韩| 国产精品一区二区在线观看99 | h日本视频在线播放| 日本色播在线视频| 亚洲av第一区精品v没综合| 人妻系列 视频| 亚洲人成网站在线观看播放| 天天躁夜夜躁狠狠久久av| 长腿黑丝高跟| 成人av在线播放网站| 国产精品麻豆人妻色哟哟久久 | 老熟妇乱子伦视频在线观看| 少妇丰满av| 综合色丁香网| a级毛色黄片| 日韩在线高清观看一区二区三区| 2022亚洲国产成人精品| 中文字幕熟女人妻在线| 欧美色欧美亚洲另类二区| 日韩欧美在线乱码| 日本五十路高清| 最近视频中文字幕2019在线8| 最近2019中文字幕mv第一页| 99精品在免费线老司机午夜| 男的添女的下面高潮视频| 国产av不卡久久| 亚洲欧美日韩高清专用| 成人一区二区视频在线观看| 色哟哟哟哟哟哟| av又黄又爽大尺度在线免费看 | 日本黄色片子视频| 18+在线观看网站| 男人舔奶头视频| 97在线视频观看| 国产精品美女特级片免费视频播放器| a级一级毛片免费在线观看| 久久久久久九九精品二区国产| 又粗又硬又长又爽又黄的视频 | 三级男女做爰猛烈吃奶摸视频| 国产精品av视频在线免费观看| 欧美成人a在线观看| 亚洲国产精品久久男人天堂| av天堂中文字幕网| 美女黄网站色视频| 亚洲av免费高清在线观看| 精品久久久久久久久久免费视频| 男的添女的下面高潮视频| 成年女人永久免费观看视频| 精品无人区乱码1区二区| 国产精品人妻久久久久久| 久久欧美精品欧美久久欧美| 深爱激情五月婷婷| 久久草成人影院| 久久久久国产网址| 精品一区二区免费观看| 男人的好看免费观看在线视频| 十八禁国产超污无遮挡网站| 91久久精品电影网| 久久久精品欧美日韩精品| 麻豆av噜噜一区二区三区| 亚洲性久久影院| 国产精品福利在线免费观看| 亚洲欧美日韩卡通动漫| 天堂影院成人在线观看| 色哟哟哟哟哟哟| 亚洲国产欧美人成| a级毛色黄片| 国产探花极品一区二区| 国产高清激情床上av| 久久午夜福利片| 中文字幕人妻熟人妻熟丝袜美| 日本黄色视频三级网站网址| 九色成人免费人妻av| 狂野欧美白嫩少妇大欣赏| 欧美高清成人免费视频www| 国产av在哪里看| 青青草视频在线视频观看| 蜜桃亚洲精品一区二区三区| 国产精品一区二区在线观看99 | 成人毛片60女人毛片免费| 男女边吃奶边做爰视频| 可以在线观看的亚洲视频| 国产 一区 欧美 日韩| 亚洲在久久综合| 99久久九九国产精品国产免费| 夫妻性生交免费视频一级片| 久久精品91蜜桃| 身体一侧抽搐| 国产午夜精品久久久久久一区二区三区| 热99在线观看视频| 变态另类丝袜制服| 我要搜黄色片| 毛片女人毛片| 久久精品国产99精品国产亚洲性色| 精品人妻一区二区三区麻豆| 99精品在免费线老司机午夜| 伊人久久精品亚洲午夜| 成人毛片a级毛片在线播放| 国产精品久久久久久精品电影| 最近手机中文字幕大全| 欧美变态另类bdsm刘玥| 欧美日韩在线观看h| 一个人观看的视频www高清免费观看| 天堂影院成人在线观看| 大型黄色视频在线免费观看| 欧美日韩乱码在线| 乱码一卡2卡4卡精品| 边亲边吃奶的免费视频| 一级毛片久久久久久久久女| 国产乱人偷精品视频| 成人毛片60女人毛片免费| 中国国产av一级| 97人妻精品一区二区三区麻豆| 卡戴珊不雅视频在线播放| 中文字幕人妻熟人妻熟丝袜美| 国产高潮美女av| 色哟哟·www| 亚洲va在线va天堂va国产| 毛片一级片免费看久久久久| 99久久久亚洲精品蜜臀av| 人人妻人人澡欧美一区二区| 国产一区亚洲一区在线观看| 亚洲内射少妇av| 久久久精品94久久精品| 亚洲国产精品成人综合色| 少妇人妻精品综合一区二区 | 在线国产一区二区在线| 插逼视频在线观看| 哪个播放器可以免费观看大片| 亚洲av成人av| 欧美成人a在线观看| 欧美3d第一页| 日韩大尺度精品在线看网址| 久久久久久久久久久免费av| 久久99蜜桃精品久久| 国产一区二区在线av高清观看| 亚洲va在线va天堂va国产| 日韩欧美国产在线观看| 婷婷精品国产亚洲av| 国产高潮美女av| 国产精品一区二区在线观看99 | 岛国在线免费视频观看| 校园春色视频在线观看| 国产白丝娇喘喷水9色精品| 边亲边吃奶的免费视频| 久久精品国产清高在天天线| 久久6这里有精品| 欧美成人免费av一区二区三区| 久久久久久久久久久免费av| 色综合亚洲欧美另类图片| 春色校园在线视频观看| 国产在视频线在精品| 免费观看在线日韩| 久久久久久久久久黄片| 精品欧美国产一区二区三| 亚洲av中文字字幕乱码综合| 99国产极品粉嫩在线观看| 深爱激情五月婷婷| 欧美高清性xxxxhd video| 夜夜看夜夜爽夜夜摸| 国产成人精品婷婷| 久久精品国产亚洲网站| 麻豆成人av视频| 精品久久久久久久久亚洲| 国产精品久久久久久av不卡| 午夜久久久久精精品| 悠悠久久av| 久久久精品94久久精品| 麻豆av噜噜一区二区三区| 色综合色国产| 国产高清视频在线观看网站| 国内精品宾馆在线| 国产伦精品一区二区三区四那| 99国产极品粉嫩在线观看| av视频在线观看入口| 日本三级黄在线观看| 国产熟女欧美一区二区| 国产精品,欧美在线| 精品一区二区三区视频在线| 免费人成在线观看视频色| 天天躁夜夜躁狠狠久久av| 精品久久久久久久久av| 乱系列少妇在线播放| 久久这里有精品视频免费| 久久热精品热| 一级毛片久久久久久久久女| 国产中年淑女户外野战色| 久久久欧美国产精品| 国产 一区精品| 欧美激情在线99| 秋霞在线观看毛片| 国产欧美日韩精品一区二区| 亚洲精品久久久久久婷婷小说 | 亚州av有码| 麻豆国产av国片精品| 99久久精品一区二区三区| 一进一出抽搐gif免费好疼| 爱豆传媒免费全集在线观看| 99久久精品国产国产毛片| 国产亚洲av片在线观看秒播厂 | 欧美成人一区二区免费高清观看| 久久久国产成人免费| 啦啦啦观看免费观看视频高清| 国产乱人视频| 国产精品女同一区二区软件| 国产精品一二三区在线看| 亚洲欧美成人精品一区二区| 久久国产乱子免费精品| 搡老妇女老女人老熟妇| 免费黄网站久久成人精品| av在线亚洲专区| 国内精品美女久久久久久| 国产精品免费一区二区三区在线| 久久久久九九精品影院| 国产亚洲av片在线观看秒播厂 | 日韩av在线大香蕉| 亚洲图色成人| h日本视频在线播放| 久久99热这里只有精品18| 好男人视频免费观看在线| 尤物成人国产欧美一区二区三区| 亚洲人成网站在线播放欧美日韩| 亚洲18禁久久av| 亚洲人与动物交配视频| 91精品一卡2卡3卡4卡| 男的添女的下面高潮视频| 性插视频无遮挡在线免费观看| 国产成人午夜福利电影在线观看| 亚洲av免费在线观看| 男人狂女人下面高潮的视频| 亚洲av中文av极速乱| 日韩高清综合在线| 国产伦在线观看视频一区| 亚洲国产欧美在线一区| 国产视频内射| av专区在线播放| 狂野欧美激情性xxxx在线观看| 久久久精品欧美日韩精品| 免费人成视频x8x8入口观看| 最近2019中文字幕mv第一页| 看片在线看免费视频| 成人特级黄色片久久久久久久| 国产亚洲91精品色在线| 三级毛片av免费| 国产伦理片在线播放av一区 | 麻豆国产97在线/欧美| 午夜爱爱视频在线播放| 赤兔流量卡办理| 国产精品无大码| 国产精品久久久久久av不卡| 久久久精品大字幕| 神马国产精品三级电影在线观看| 91在线精品国自产拍蜜月| 一卡2卡三卡四卡精品乱码亚洲| 国产熟女欧美一区二区| 亚洲av熟女| 亚洲国产日韩欧美精品在线观看| 亚洲内射少妇av| 中文在线观看免费www的网站| 日韩中字成人| 久久精品久久久久久久性| 麻豆久久精品国产亚洲av| 精品久久久久久久末码| 国产精品一区二区三区四区免费观看| 青春草亚洲视频在线观看| 中文字幕久久专区| 丰满人妻一区二区三区视频av| 老司机福利观看| 久久99精品国语久久久| 韩国av在线不卡| 国产精品综合久久久久久久免费| 午夜精品在线福利| 成人特级黄色片久久久久久久| 99久久无色码亚洲精品果冻| 91狼人影院| 少妇的逼好多水| 中文字幕人妻熟人妻熟丝袜美| 少妇丰满av| 国产一级毛片在线| 成人三级黄色视频| 欧美3d第一页| 国产精品无大码| 麻豆乱淫一区二区| 日产精品乱码卡一卡2卡三| 成人性生交大片免费视频hd| 亚洲成人av在线免费| 九九热线精品视视频播放| 中国美女看黄片| 最近中文字幕高清免费大全6| 国产91av在线免费观看| 特级一级黄色大片| 久久精品夜夜夜夜夜久久蜜豆| 99久久精品国产国产毛片| 搞女人的毛片| 亚洲欧洲国产日韩| 国内精品宾馆在线| 人人妻人人看人人澡| ponron亚洲| 激情 狠狠 欧美| 特大巨黑吊av在线直播| 美女脱内裤让男人舔精品视频 | 欧美精品国产亚洲| 成人无遮挡网站| av在线老鸭窝| 国产女主播在线喷水免费视频网站 | 欧美3d第一页| 亚洲成人精品中文字幕电影| 又爽又黄无遮挡网站| 午夜福利高清视频| 日韩 亚洲 欧美在线| 1000部很黄的大片| 亚洲国产精品成人久久小说 | a级毛色黄片| 亚洲精品亚洲一区二区| 少妇熟女欧美另类| 久久99精品国语久久久| 欧美3d第一页| 日韩欧美精品v在线| 国产视频内射| 深夜a级毛片| 亚洲成a人片在线一区二区| 久久热精品热| 一级黄片播放器| 日韩人妻高清精品专区| 99热6这里只有精品| 日韩人妻高清精品专区| 99热6这里只有精品| 久久精品人妻少妇| 日韩一区二区三区影片| 国产午夜精品久久久久久一区二区三区| 日本撒尿小便嘘嘘汇集6| 神马国产精品三级电影在线观看| 亚洲成a人片在线一区二区| 日韩精品青青久久久久久| 亚洲人与动物交配视频| 国产av在哪里看| 欧美色欧美亚洲另类二区| 日产精品乱码卡一卡2卡三| 99热全是精品| 欧美日韩在线观看h| 欧美3d第一页| 少妇丰满av| 一卡2卡三卡四卡精品乱码亚洲| 看非洲黑人一级黄片| 成人亚洲精品av一区二区| 亚洲精品成人久久久久久| 欧美成人精品欧美一级黄| 五月伊人婷婷丁香| 日本在线视频免费播放| 日韩欧美三级三区| 国产在线精品亚洲第一网站| 麻豆国产97在线/欧美| 麻豆一二三区av精品| 色综合站精品国产| 日韩在线高清观看一区二区三区| 日本免费a在线| 麻豆成人av视频| 国产成年人精品一区二区| 亚洲av不卡在线观看| 最新中文字幕久久久久| 51国产日韩欧美| 欧美日本视频| 亚洲av免费在线观看| 岛国在线免费视频观看| 国产精华一区二区三区| 国产激情偷乱视频一区二区| 久久精品夜夜夜夜夜久久蜜豆| 变态另类丝袜制服| 国产视频首页在线观看| 一进一出抽搐动态| 国产精品乱码一区二三区的特点| 中文精品一卡2卡3卡4更新| 亚洲久久久久久中文字幕| 99国产极品粉嫩在线观看| 午夜精品在线福利| 网址你懂的国产日韩在线| 激情 狠狠 欧美| 成人美女网站在线观看视频| 少妇丰满av| 国产精品一二三区在线看| 插逼视频在线观看| 亚洲欧美日韩卡通动漫| 91精品一卡2卡3卡4卡| 国产高清视频在线观看网站| 内地一区二区视频在线| 亚洲自拍偷在线| 国产精品久久久久久精品电影小说 | 青春草亚洲视频在线观看| 大又大粗又爽又黄少妇毛片口| 免费av毛片视频| 男女那种视频在线观看| 久久精品综合一区二区三区| 国产免费男女视频| 好男人视频免费观看在线| 夜夜看夜夜爽夜夜摸| 欧美不卡视频在线免费观看| 春色校园在线视频观看| 大型黄色视频在线免费观看| 婷婷色av中文字幕| 草草在线视频免费看| 十八禁国产超污无遮挡网站| 国产一区二区激情短视频| 日韩成人伦理影院| 少妇猛男粗大的猛烈进出视频 | 日韩一区二区三区影片| 久久精品国产自在天天线| 国产av一区在线观看免费| av又黄又爽大尺度在线免费看 | 亚洲色图av天堂| 国产成人影院久久av| 成人毛片60女人毛片免费| 精品无人区乱码1区二区| 哪个播放器可以免费观看大片| 别揉我奶头 嗯啊视频| 日韩三级伦理在线观看| 国产在线男女| 最近中文字幕高清免费大全6| av天堂中文字幕网| 日韩高清综合在线| 在线观看av片永久免费下载| 如何舔出高潮| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 亚洲国产色片| 2022亚洲国产成人精品| 成年av动漫网址| 国产精品国产三级国产av玫瑰| 成人综合一区亚洲| 超碰av人人做人人爽久久| 国产精品.久久久| 久久国内精品自在自线图片| av天堂在线播放| 一卡2卡三卡四卡精品乱码亚洲| 我的女老师完整版在线观看| 欧美变态另类bdsm刘玥| 69av精品久久久久久| 熟女电影av网| 非洲黑人性xxxx精品又粗又长| 婷婷色综合大香蕉| 又黄又爽又刺激的免费视频.| 国产一区二区亚洲精品在线观看| 内射极品少妇av片p| 午夜福利在线观看吧| 成人毛片60女人毛片免费| 国产亚洲欧美98| 久久精品国产亚洲av香蕉五月| 黄色欧美视频在线观看| 成人漫画全彩无遮挡| 欧美不卡视频在线免费观看| 1024手机看黄色片| 欧美日韩在线观看h| 久久精品国产鲁丝片午夜精品| 少妇的逼好多水| 国产免费男女视频| 男人的好看免费观看在线视频| 又粗又爽又猛毛片免费看| 老司机福利观看| 免费不卡的大黄色大毛片视频在线观看 | 午夜爱爱视频在线播放| 18禁黄网站禁片免费观看直播| 观看免费一级毛片| 中国国产av一级| 国产精品1区2区在线观看.| 国产淫片久久久久久久久| 中文欧美无线码| 亚洲天堂国产精品一区在线| 狂野欧美激情性xxxx在线观看| 99久久九九国产精品国产免费| 一本一本综合久久| 村上凉子中文字幕在线| 观看免费一级毛片| 美女xxoo啪啪120秒动态图| 国产高清不卡午夜福利| 国产中年淑女户外野战色| 国内揄拍国产精品人妻在线| 国产欧美日韩精品一区二区| 欧美激情在线99| 人妻夜夜爽99麻豆av| 国产单亲对白刺激| 黑人高潮一二区| 日韩在线高清观看一区二区三区| 一区二区三区免费毛片| 欧美又色又爽又黄视频| 亚洲美女搞黄在线观看| 97在线视频观看| 国产精品.久久久| 亚洲欧美中文字幕日韩二区| 色噜噜av男人的天堂激情| 亚洲三级黄色毛片| 一区二区三区四区激情视频 | 国产单亲对白刺激| 亚洲自偷自拍三级| 不卡视频在线观看欧美| 亚洲最大成人手机在线| 国产 一区精品| 国产成人a区在线观看| 我要搜黄色片| 寂寞人妻少妇视频99o| 麻豆av噜噜一区二区三区| 久久中文看片网| 日韩在线高清观看一区二区三区| 一边摸一边抽搐一进一小说| 日本五十路高清| 乱码一卡2卡4卡精品| 99九九线精品视频在线观看视频| 国产精品久久久久久久电影| 久久久国产成人精品二区| 色吧在线观看| 熟妇人妻久久中文字幕3abv| 精品欧美国产一区二区三| 美女大奶头视频| 精品久久久噜噜| 日日干狠狠操夜夜爽| 悠悠久久av| 亚洲av电影不卡..在线观看| 国产一区二区激情短视频| 国产黄片美女视频| 国产黄色视频一区二区在线观看 | 一区二区三区免费毛片| 亚洲真实伦在线观看| 亚洲天堂国产精品一区在线| 免费大片18禁| av在线蜜桃| 国产91av在线免费观看| 成人特级av手机在线观看| h日本视频在线播放| 51国产日韩欧美| 国产成人91sexporn| 国产精品不卡视频一区二区| 日本一二三区视频观看| 美女大奶头视频| 青春草视频在线免费观看| 亚洲国产精品成人综合色| 久久精品人妻少妇| 中文在线观看免费www的网站| 我要搜黄色片| 亚洲成人久久性| 九九爱精品视频在线观看| 国产精品爽爽va在线观看网站| 人体艺术视频欧美日本| 久久久国产成人精品二区| 天堂√8在线中文| 国产白丝娇喘喷水9色精品| 午夜激情福利司机影院| 99久久中文字幕三级久久日本| 国产免费男女视频| 国产人妻一区二区三区在| 一区福利在线观看| 亚洲成av人片在线播放无| 国产精华一区二区三区| 黄片wwwwww| 小蜜桃在线观看免费完整版高清| 一边摸一边抽搐一进一小说| 国产精品无大码| 成人一区二区视频在线观看| 好男人视频免费观看在线| 亚洲乱码一区二区免费版| 大又大粗又爽又黄少妇毛片口| 国产精品久久久久久av不卡| 只有这里有精品99| 日韩视频在线欧美| 性插视频无遮挡在线免费观看| 一区二区三区高清视频在线| 亚洲一区高清亚洲精品| 国产不卡一卡二| 丝袜喷水一区| 亚洲无线在线观看| 亚洲va在线va天堂va国产| 亚洲成人av在线免费| 国产老妇伦熟女老妇高清| 男人舔奶头视频| 久久久国产成人精品二区| 最新中文字幕久久久久| 国产亚洲av片在线观看秒播厂 | 色视频www国产| 久久久成人免费电影| 日韩大尺度精品在线看网址| a级毛片免费高清观看在线播放| 国产成人freesex在线| 最后的刺客免费高清国语| 91午夜精品亚洲一区二区三区| 中文字幕制服av| 免费不卡的大黄色大毛片视频在线观看 | 久久婷婷人人爽人人干人人爱| 中文字幕久久专区| 欧美日韩乱码在线| 中文亚洲av片在线观看爽| 热99re8久久精品国产|