欧美亚洲韩国_av电影院在线看_久久久久97_台湾佬中文娱乐网欧美电影

站長資訊網
最全最豐富的資訊網站

聊聊Node.js中的多進程和多線程

大家都知道 Node 是單線程的,卻不知它也提供了多進(線)程模塊來加速處理一些特殊任務,本文便帶領大家了解下 Node.js 的多進(線)程,希望對大家有所幫助!

聊聊Node.js中的多進程和多線程

我們都知道 Node.js 采用的是單線程、基于事件驅動的異步 I/O 模型,其特性決定了它無法利用 CPU 多核的優勢,也不善于完成一些非 I/O 類型的操作(比如執行腳本、AI 計算、圖像處理等),為了解決此類問題,Node.js 提供了常規的多進(線程)方案(關于進程、線程的討論,可參見筆者的另一篇文章 Node.js 與并發模型),本文便為大家介紹 Node.js 的多進(線)程機制。

child_process

我們可使用 child_process 模塊創建 Node.js 的子進程,來完成一些特殊的任務(比如執行腳本),該模塊主要提供了 execexecFileforkspwan 等方法,下面我們就簡單介紹下這些方法的使用。

exec

const { exec } = require('child_process');  exec('ls -al', (error, stdout, stderr) => {   console.log(stdout); });

該方法根據 options.shell 指定的可執行文件處理命令字符串,在命令的執行過程中緩存其輸出,直到命令執行完成后,再將執行結果以回調函數參數的形式返回。

該方法的參數解釋如下:

  • command:將要執行的命令(比如 ls -al);

  • options:參數設置(可不指定),相關屬性如下:

    • cwd:子進程的當前工作目錄,默認取 process.cwd() 的值;

    • env:環境變量設置(為鍵值對對象),默認取 process.env 的值;

    • encoding:字符編碼,默認值為:utf8

    • shell:處理命令字符串的可執行文件,Unix 上默認值為 /bin/shWindows 上默認值取 process.env.ComSpec 的值(如為空則為 cmd.exe);比如:

      const { exec } = require('child_process');  exec("print('Hello World!')", { shell: 'python' }, (error, stdout, stderr) => {   console.log(stdout); });

      運行上面的例子將輸出 Hello World!,這等同于子進程執行了 python -c "print('Hello World!')" 命令,因此在使用該屬性時需要注意,所指定的可執行文件必須支持通過 -c 選項來執行相關語句。

      注:碰巧 Node.js 也支持 -c 選項,但它等同于 --check 選項,只用來檢測指定的腳本是否存在語法錯誤,并不會執行相關腳本。

    • signal:使用指定的 AbortSignal 終止子進程,該屬性在 v14.17.0 以上可用,比如:

      const { exec } = require('child_process');  const ac = new AbortController(); exec('ls -al', { signal: ac.signal }, (error, stdout, stderr) => {});

      上例中,我們可通過調用 ac.abort() 來提前終止子進程。

    • timeout:子進程的超時時間(如果該屬性的值大于 0,那么當子進程運行時間超過指定值時,將會給子進程發送屬性 killSignal 指定的終止信號),單位毫米,默認值為 0

    • maxBuffer:stdout 或 stderr 所允許的最大緩存(二進制),如果超出,子進程將會被殺死,并且將會截斷任何輸出,默認值為 1024 * 1024

    • killSignal:子進程終止信號,默認值為 SIGTERM

    • uid:執行子進程的 uid

    • gid:執行子進程的 gid

    • windowsHide:是否隱藏子進程的控制臺窗口,常用于 Windows 系統,默認值為 false

  • callback:回調函數,包含 errorstdoutstderr 三個參數:

    • error:如果命令行執行成功,值為 null,否則值為 Error 的一個實例,其中 error.code 為子進程的退出的錯誤碼,error.signal 為子進程終止的信號;
    • stdoutstderr:子進程的 stdoutstderr,按照 encoding 屬性的值進行編碼,如果 encoding 的值為 buffer,或者 stdoutstderr 的值是一個無法識別的字符串,將按照 buffer 進行編碼。

execFile

const { execFile } = require('child_process');  execFile('ls', ['-al'], (error, stdout, stderr) => {   console.log(stdout); });

該方法的功能類似于 exec,唯一的區別是 execFile 在默認情況下直接用指定的可執行文件(即參數 file 的值)處理命令,這使得其效率略高于 exec(如果查看 shell 的處理邏輯,筆者感覺這效率可忽略不計)。

該方法的參數解釋如下:

  • file:可執行文件的名字或路徑;

  • args:可執行文件的參數列表;

  • options:參數設置(可不指定),相關屬性如下:

    • shell:值為 false 時表示直接用指定的可執行文件(即參數 file 的值)處理命令,值為 true 或其它字符串時,作用等同于 exec 中的 shell,默認值為 false
    • windowsVerbatimArguments:在 Windows 中是否對參數進行引號或轉義處理,在 Unix 中將忽略該屬性,默認值為 false
    • 屬性 cwdenvencodingtimeoutmaxBufferkillSignaluidgidwindowsHidesignal 在上文中已介紹,此處不再重述。
  • callback:回調函數,等同于 exec 中的 callback,此處不再闡述。

fork

const { fork } = require('child_process');  const echo = fork('./echo.js', {   silent: true }); echo.stdout.on('data', (data) => {   console.log(`stdout: ${data}`); });  echo.stderr.on('data', (data) => {   console.error(`stderr: ${data}`); });  echo.on('close', (code) => {   console.log(`child process exited with code ${code}`); });

該方法用于創建新的 Node.js 實例以執行指定的 Node.js 腳本,與父進程之間以 IPC 方式進行通信。

該方法的參數解釋如下:

  • modulePath:要運行的 Node.js 腳本路徑;

  • args:傳遞給 Node.js 腳本的參數列表;

  • options:參數設置(可不指定),相關屬性如:

    • detached:參見下文對 spwanoptions.detached 的說明;

    • execPath:創建子進程的可執行文件;

    • execArgv:傳遞給可執行文件的字符串參數列表,默認取 process.execArgv 的值;

    • serialization:進程間消息的序列號類型,可用值為 jsonadvanced,默認值為 json

    • slient: 如果為 true,子進程的 stdinstdoutstderr 將通過管道傳遞給父進程,否則將繼承父進程的 stdinstdoutstderr;默認值為 false

    • stdio:參見下文對 spwanoptions.stdio 的說明。這里需要注意的是:

      • 如果指定了該屬性,將忽略 slient 的值;
      • 必須包含一個值為 ipc 的選項(比如 [0, 1, 2, 'ipc']),否則將拋出異常。
    • 屬性 cwdenvuidgidwindowsVerbatimArgumentssignaltimeoutkillSignal 在上文中已介紹,此處不再重述。

spwan

const { spawn } = require('child_process');  const ls = spawn('ls', ['-al']); ls.stdout.on('data', (data) => {   console.log(`stdout: ${data}`); });  ls.stderr.on('data', (data) => {   console.error(`stderr: ${data}`); });  ls.on('close', (code) => {   console.log(`child process exited with code ${code}`); });

該方法為 child_process 模塊的基礎方法,execexecFilefork 最終都會調用 spawn 來創建子進程。

該方法的參數解釋如下:

  • command:可執行文件的名字或路徑;

  • args:傳遞給可執行文件的參數列表;

  • options:參數設置(可不指定),相關屬性如下:

    • argv0:發送給子進程 argv[0] 的值,默認取參數 command 的值;

    • detached:是否允許子進程可以獨立于父進程運行(即父進程退出后,子進程可以繼續運行),默認值為 false,其值為 true 時,各平臺的效果如下所述:

      • Windows 系統中,父進程退出后,子進程可以繼續運行,并且子進程擁有自己的控制臺窗口(該特性一旦啟動后,在運行過程中將無法更改);
      • 在非 Windows 系統中,子進程將作為新進程會話組的組長,此刻不管子進程是否與父進程分離,子進程都可以在父進程退出后繼續運行。

      需要注意的是,如果子進程需要執行長時間的任務,并且想要父進程提前退出,需要同時滿足以下幾點:

      • 調用子進程的 unref 方法從而將子進程從父進程的事件循環中剔除;
      • detached 設置為 true
      • stdioignore

      比如下面的例子:

      // hello.js const fs = require('fs'); let index = 0; function run() {   setTimeout(() => {     fs.writeFileSync('./hello', `index: ${index}`);     if (index < 10) {       index += 1;       run();     }   }, 1000); } run();  // main.js const { spawn } = require('child_process'); const child = spawn('node', ['./hello.js'], {   detached: true,   stdio: 'ignore' }); child.unref();
    • stdio:子進程標準輸入輸出配置,默認值為 pipe,值為字符串或數組:

      • 值為字符串時,會將其轉換為含有三個項的數組(比如 pipe 被轉換為 ['pipe', 'pipe', 'pipe']),可用值為 pipeoverlappedignoreinherit
      • 值為數組時,其中數組的前三項分別代表對 stdinstdoutstderr 的配置,每一項的可用值為 pipeoverlappedignoreinheritipc、Stream 對象、正整數(在父進程打開的文件描述符)、null(如位于數組的前三項,等同于 pipe,否則等同于 ignore)、undefined(如位于數組的前三項,等同于 pipe,否則等同于 ignore)。
    • 屬性 cwdenvuidgidserializationshell(值為 booleanstring)、windowsVerbatimArgumentswindowsHidesignaltimeoutkillSignal 在上文中已介紹,此處不再重述。

小結

上文對 child_process 模塊中主要方法的使用進行了簡短介紹,由于 execSyncexecFileSyncforkSyncspwanSync 方法是 execexecFilespwan 的同步版本,其參數并無任何差異,故不再重述。

cluster

通過 cluster 模塊我們可以創建 Node.js 進程集群,通過 Node.js 進程進群,我們可以更加充分地利用多核的優勢,將程序任務分發到不同的進程中以提高程序的執行效率;下面將通過例子為大家介紹 cluster 模塊的使用:

const http = require('http'); const cluster = require('cluster'); const numCPUs = require('os').cpus().length;  if (cluster.isPrimary) {   for (let i = 0; i < numCPUs; i++) {     cluster.fork();   } } else {   http.createServer((req, res) => {     res.writeHead(200);     res.end(`${process.pid}n`);   }).listen(8000); }

上例通過 cluster.isPrimary 屬性判斷(即判斷當前進程是否為主進程)將其分為兩個部分:

  • 為真時,根據 CPU 內核的數量并通過 cluster.fork 調用來創建相應數量的子進程;
  • 為假時,創建一個 HTTP server,并且每個 HTTP server 都監聽同一個端口(此處為 8000)。

運行上面的例子,并在瀏覽器中訪問 http://localhost:8000/,我們會發現每次訪問返回的 pid 都不一樣,這說明了請求確實被分發到了各個子進程。Node.js 默認采用的負載均衡策略是輪詢調度,可通過環境變量 NODE_CLUSTER_SCHED_POLICYcluster.schedulingPolicy 屬性來修改其負載均衡策略:

NODE_CLUSTER_SCHED_POLICY = rr // 或 none  cluster.schedulingPolicy = cluster.SCHED_RR; // 或 cluster.SCHED_NONE

另外需要注意的是,雖然每個子進程都創建了 HTTP server,并都監聽了同一個端口,但并不代表由這些子進程自由競爭用戶請求,因為這樣無法保證所有子進程的負載達到均衡。所以正確的流程應該是由主進程監聽端口,然后將用戶請求根據分發策略轉發到具體的子進程進行處理。

由于進程之間是相互隔離的,因此進程之間一般通過共享內存、消息傳遞、管道等機制進行通訊。Node.js 則是通過消息傳遞來完成父子進程之間的通信,比如下面的例子:

const http = require('http'); const cluster = require('cluster'); const numCPUs = require('os').cpus().length;  if (cluster.isPrimary) {   for (let i = 0; i < numCPUs; i++) {     const worker = cluster.fork();     worker.on('message', (message) => {       console.log(`I am primary(${process.pid}), I got message from worker: "${message}"`);       worker.send(`Send message to worker`)     });   } } else {   process.on('message', (message) => {     console.log(`I am worker(${process.pid}), I got message from primary: "${message}"`)   });   http.createServer((req, res) => {     res.writeHead(200);     res.end(`${process.pid}n`);     process.send('Send message to primary');   }).listen(8000); }

運行上面的例子,并訪問 http://localhost:8000/,再查看終端,我們會看到類似下面的輸出:

I am primary(44460), I got message from worker: "Send message to primary" I am worker(44461), I got message from primary: "Send message to worker" I am primary(44460), I got message from worker: "Send message to primary" I am worker(44462), I got message from primary: "Send message to worker"

利用該機制,我們可以監聽各子進程的狀態,以便在某個子進程出現意外后,能夠及時對其進行干預,以保證服務的可用性。

cluster 模塊的接口非常簡單,為了節省篇幅,這里只對 cluster.setupPrimary 方法做一些特別聲明,其它方法請查看官方文檔:

  • cluster.setupPrimary 調用后,相關設置將同步到在 cluster.settings 屬性中,并且每次調用都基于當前 cluster.settings 屬性的值;
  • cluster.setupPrimary 調用后,對已運行的子進程沒有影響,只影響后續的 cluster.fork 調用;
  • cluster.setupPrimary 調用后,不影響后續傳遞給 cluster.fork 調用的 env 參數;
  • cluster.setupPrimary 只能在主進程中使用。

worker_threads

前文我們對 cluster 模塊進行了介紹,通過它我們可以創建 Node.js 進程集群以提高程序的運行效率,但 cluster 基于多進程模型,進程間高成本的切換以及進程間資源的隔離,會隨著子進程數量的增加,很容易導致因系統資源緊張而無法響應的問題。為解決此類問題,Node.js 提供了 worker_threads,下面我們通過具體的例子對該模塊的使用進行簡單介紹:

// server.js const http = require('http'); const { Worker } = require('worker_threads');  http.createServer((req, res) => {   const httpWorker = new Worker('./http_worker.js');   httpWorker.on('message', (result) => {     res.writeHead(200);     res.end(`${result}n`);   });   httpWorker.postMessage('Tom'); }).listen(8000);  // http_worker.js const { parentPort } = require('worker_threads');  parentPort.on('message', (name) => {   parentPort.postMessage(`Welcone ${name}!`); });

上例展示了 worker_threads 的簡單使用,在使用 worker_threads 的過程中,需要注意以下幾點:

  • 通過 worker_threads.Worker 創建 Worker 實例,其中 Worker 腳本既可以為一個獨立的 JavaScript 文件,也可以為字符串,比如上例可修改為:

    const code = "const { parentPort } = require('worker_threads'); parentPort.on('message', (name) => {parentPort.postMessage(`Welcone ${name}!`);})"; const httpWorker = new Worker(code, { eval: true });
  • 通過 worker_threads.Worker 創建 Worker 實例時,可以通過指定 workerData 的值來設置 Worker 子線程的初始元數據,比如:

    // server.js const { Worker } = require('worker_threads'); const httpWorker = new Worker('./http_worker.js', { workerData: { name: 'Tom'} });  // http_worker.js const { workerData } = require('worker_threads'); console.log(workerData);
  • 通過 worker_threads.Worker 創建 Worker 實例時,可通過設置 SHARE_ENV 以實現在 Worker 子線程與主線程之間共享環境變量的需求,比如:

    const { Worker, SHARE_ENV } = require('worker_threads'); const worker = new Worker('process.env.SET_IN_WORKER = "foo"', { eval: true, env: SHARE_ENV }); worker.on('exit', () => {   console.log(process.env.SET_IN_WORKER); });
  • 不同于 cluster 中進程間的通信機制,worker_threads 采用的 MessageChannel 來進行線程間的通信:

    • Worker 子線程通過 parentPort.postMessage 方法發送消息給主線程,并通過監聽 parentPortmessage 事件來處理來自主線程的消息;
    • 主線程通過 Worker 子線程實例(此處為 httpWorker,以下均以此代替 Worker 子線程)的 postMessage 方法發送消息給 httpWorker,并通過監聽 httpWorkermessage 事件來處理來自 Worker 子線程的消息。

在 Node.js 中,無論是 cluster 創建的子進程,還是 worker_threads 創建的 Worker 子線程,它們都擁有屬于自己的 V8 實例以及事件循環,所不同的是:

  • 子進程之間的內存空間是互相隔離的,而 Worker 子線程共享所屬進程的內存空間;
  • 子進程之間的切換成本要遠遠高于 Worker 子線程之間的切換成本。

盡管看起來 Worker 子線程比子進程更高效,但 Worker 子線程也有不足的地方,即cluster 提供了負載均衡,而 worker_threads 則需要我們自行完成負載均衡的設計與實現。

總結

本文介紹了 Node.js 中 child_processclusterworker_threads 三個模塊的使用,通過這三個模塊,我們可以充分利用 CPU 多核的優勢,并以多進(線)程的模式來高效地解決一些特殊任務(比如 AI、圖片處理等)的運行效率。每個模塊都有其適用的場景,文中僅對其基本使用進行了說明,如何結合自己的問題進行高效地運用,還需要大家自行摸索。最后,本文若有紕漏之處,還望大家能夠指正,祝大家快樂編碼每一天。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
主站蜘蛛池模板: 伊人免费在线观看 | 波多野结衣在线观看视频 | 国产精品欧美色图 | 久久久久久久久久久高潮一区二区 | 91精品久久久久久久99蜜桃 | 亚洲精品久久久久久久久久久 | 亚洲一区二区三区免费观看 | 国产精品久久久久久久久免费相片 | 日韩一级视频 | 亚洲欧美成人aⅴ大片 | 精品久久久久香蕉网 | 午夜精| av资源首页| 一级片少妇 | 在线观看中文字幕 | 色婷婷av一区二区三区之e本道 | 在线观看av毛片 | 国产一区二区三区四区在线观看 | 婷婷激情六月 | 免费福利视频在线观看 | 亚洲欧美日韩国产综合 | 毛片网站入口 | 国产一区二区三区久久 | 亚洲欧美综合 | 夜夜爽天天操 | 久久久久免费精品视频 | 国产伦精品一区二区三区千人斩 | 怡红院成人在线 | 日韩一级精品 | 青娱乐自拍视频 | 高跟91娇喘| 免费播放毛片精品视频 | 天堂岛av | 男人插女人下面视频 | 免费男女视频 | 人人干人人插 | 亚洲热在线 | 二级毛片在线观看 | 人体毛片| 中文字幕欧美日韩在线 | 黑人精品欧美一区二区蜜桃 | 偷操| 在线观看国产欧美 | 日日撸夜夜操 | 夜夜躁狠狠躁 | 亚洲欧美日韩精品在线 | 成人做爰100| 欧美淫 | 午夜精品福利一区二区 | 四虎影视最新网址 | 国产小视频网址 | 男女午夜免费视频 | 精品久久综合1区2区3区激情 | 欧美日韩毛片 | 91视频国产免费 | 久久青青 | 国产亚洲精品成人 | 波多野结衣三区 | 国产精品久久久久桃色tv | 8x8ⅹ成人永久免费视频 | 精品www久久久久久奶水 | 欧美一级片在线免费观看 | 中文字幕一区二区三区四区五区 | 38激情| 亚洲产国偷v产偷v自拍涩爱 | 少妇捆绑紧缚av | 樱花视频在线免费观看 | 操碰视频在线 | 亚洲精品中文字幕在线观看 | 一区二区不卡视频在线观看 | 国产成人一级片 | 久久国产a| 亚洲永久免费网站 | 91久久精品国产91久久 | 日韩av专区 | 国产91久 | 色夜av| 香蕉视频网站在线 | 国产在线一区二区三区四区 | 久久露脸国产精品 | 日本精品入口免费视频 | 欧美在线播放一区 | 尤物毛片| 95国产精品 | 黄色一集片 | 波多野结衣一区二区三区在线 | 久久九九国产 | 看看屋午夜 | 亚洲综合自拍偷拍 | 国内自拍视频在线播放 | chinese hd xxxx tube麻豆tv| 日韩一级二级三级 | 成人av国产 | 2019中文字幕在线视频 | 久久久久久久久久免费视频 | 欧美精品一二区 | 91丨九色丨海角社区 | 一本一道久久a久久精品综合蜜臀 | 亚洲欧美综合另类自拍 | 亚洲免费小视频 | 二级黄色录像 | 禁断介护老人中文字幕 | 精品视频在线免费观看 | 第一毛片 | 毛片首页 | 国产高清在线免费 | 人人射 | 天天网综合 | 大尺度做爰啪啪床戏 | 丁香婷婷六月天 | 亚洲成av人片在线观看天堂无码 | 懂色av中文一区二区三区天美 | 亚洲乱码国产乱码精品 | 欧美成人精品激情在线观看 | 国产精品久久久久久久妇 | 亚洲激情av | 亚洲精品婷婷 | 永久免费看成人av的动态图 | 亚洲综合免费视频 | 国产成人精品久久久 | 极品粉嫩国产48尤物在线播放 | 徐锦江一级淫片免费看 | 国产自在线 | 日本中文字幕网站 | 亚洲wwwxxx| 亚洲图欧美 | 蜜臀av中文字幕 | 亚洲香蕉av在线一区二区三区 | 中国av片 | 一级做a爰片久久毛片潮喷 欧美猛操 | 免费成人av| 日韩大片免费在线观看 | 天天综合av | 亚洲精品一区在线 | 性欧美另丰满69xxxxx | 一级免费黄色片 | 欧美日韩精品中文字幕 | av免费观看网址 | 美女伊人网 | 揄拍成人国产精品视频99 | 中文字幕亚洲在线 | 综合色88| 天天摸天天操天天干 | 超碰99在线观看 | 神马久久网 | 亚州视频一区二区三区 | 国产资源久久 | 久久国产精品一区二区三区 | 中文在线天堂网 | 91精品视频在线 | 原创真实夫妻啪啪av | 亚洲wwwwww| 一区二区视频播放 | 午夜精品免费 | 成人免费毛片观看 | 日韩欧美成人一区二区三区 | 欧美激情在线一区 | 成人av黄色 | 亚洲自拍偷拍精品 | 欧美xxxⅹ性欧美大片 | 亚洲视频在线观看免费 | 成人福利网站在线观看 | 91久久久久久久久 | 在线视频自拍 | 国产精品综合网 | 日韩综合在线观看 | 中日精品一色哟哟 | jizz免费在线观看 | 亚洲无吗在线视频 | 色站在线 | 一级片久久久久久久 | 欧美日韩网 | 亚洲va国产va天堂va久久 | 日日夜夜狠狠爱 | 性欧美69| 国产小视频免费观看 | 免费在线看黄的网站 | 日韩1级片 | 18成人免费观看网站 | 西西午夜影院 | 丁香婷婷深情五月亚洲 | 亚洲女人天堂 | 亚洲三级国产 | 成年男女免费视频网站 | 亚洲123区 | 国产精选h网站 | 1级黄色大片| 亚洲精品自拍偷拍视频 | 假日游船 | 成人免费看片 | 成人在线不卡视频 | av成人免费观看 | 精品免费在线观看 | 久久草视频| 色婷婷国产精品综合在线观看 | 2021国产精品视频 | 中文字幕在线播放第一页 | 精品卡一卡二卡3卡高清乱码 | 毛片啪啪啪 | 久久黄视频 | 一级做a爰片毛片 | 亚洲三级免费观看 | 成年人小视频 | 亚洲不卡在线视频 | 亚洲性生活大片 | 色黄视频 | 免费观看成年人视频 | 免费在线看视频 | 免费日韩一区 | 操操日日| 精品免费 | 天天操夜夜爽 | 夜色成人| 日韩av在线一区 | h网站在线播放 | 免费公开在线视频 | 亚洲成av人乱码色午夜 | 91精品国产乱码久久久久久久久 | 99热精品在线 | 99视频免费看 | 欧美人日b | 国产影视一区 | 手机在线小视频 | 超碰人人射 | 色视频网址 | 伊人网欧美| 在线观看免费中文字幕 | 欧美大黄视频 | 91精品久久久久久久久久入口 | 亚洲xx在线 | 男女av在线 | 久久机热这里只有精品 | 国产露脸91国语对白 | 亚洲乱码一区av黑人高潮 | 成人第一页| 91国语对白 | 亚州综合 | 综合激情自拍 | 亚洲第一精品在线 | 国产精品77777 | 国产精品一品二区三区的使用体验 | 久射网| 久久精品这里有 | 日韩精品免费观看 | 亚洲日本欧美日韩高观看 | 日美毛片 | 永久免费av | 国产一区二区亚洲 | 人人超碰人人 | 日韩在线黄色 | 久久尹人| 午夜成人免费视频 | 免费看片黄色 | 国产无毛片 | 天天操穴 | 落日余晖 | 亚洲色无码播放 | 色呦呦官网| 亚洲人高潮女人毛茸茸 | 免费国产视频在线观看 | 精久久久 | 免费av黄色 | 久久露脸国产精品 | 亚洲天堂免费av | 视频一区在线免费观看 | 日韩国产欧美视频 | 国产资源在线看 | 日本久久久久久久久 | 国产三级免费观看 | 啪啪免费 | 欧美色成人 | 狠狠草视频 | 亚洲天堂网在线观看 | 麻豆精品国产传媒mv男同 | 亚洲一片黄| 亚洲视频在线免费 | 精品一区二区三区视频 | 亚洲 激情| 久久亚洲一区二区三区四区 | 黄色福利在线观看 | 午夜无遮挡 | 潘金莲裸体一级淫片视频 | 久久久成人精品 | 黄色国产片 | 亚洲欧美在线播放 | 2024av| 久久久亚洲国产精品麻豆综合天堂 | 香蕉久久夜色精品 | 一区二区三区四区五区六区 | 中文字幕日产av | 久草福利在线播放 | 亚洲黄色免费视频 | 围产精品久久久久久久 | 国产精品伦一区二区在线 | 五月婷影院 | 亚洲精品你懂的 | 国产日本欧美一区二区 | 91免费网站在线观看 | 成人av中文字幕 | 福利在线观看 | 亚洲免费在线 | 91国偷自产一区二区开放时间 | 91亚洲免费 | 操你啦影院 | 欧美一级黄色网 | 看污片网站 | 放几个免费的毛片出来看 | 日韩欧美中文字幕一区 | 成人私密视频 | 狠狠a| 色黄视频在线观看 | 免费看一级一片 | 九色91视频 | 国产精品久久久久久久久久妇女 | 色婷婷久久久亚洲一区二区三区 | 久草国产精品视频 | 亚洲人体av | 一级片在线免费 | 久久久精品视频在线 | 久久日本视频 | 伊人久久大香线蕉综合网站 | 亚洲精品一区在线观看 | 国产精品免费一区 | 色多多污污| 久久久久久久久久久久久av | 欧美综合激情网 | 久久国产视频播放 | 伊人久久中文字幕 | 青草视频在线播放 | 91精品亚洲 | 销魂奶水汁系列小说 | 不良视频在线观看 | 国产日韩一级片 | 欧美三级韩国三级日本三斤在线观看 | av男人的天堂在线 | 性午夜 | 国内少妇精品 | 日韩不卡视频在线 | 国产在线免费观看 | 午夜视频在线观看一区二区 | 狠狠干五月天 | 欧美日韩综合网 | 黄色一级大片免费看 | 成人免费看视频 | 国产色呦呦 | 枫花恋在线观看 | 青青操久久 | 日本三级中国三级99人妇网站 | 青青成人 | 成人在线欧美 | 亚洲一片 | 亚洲一区二区三区欧美 | 综合激情在线 | 一区二区三区国产精华 | 成人在线不卡 | 国产精品一区二区三区四区五区 | 国产精品久久久精品 | 国产精品自拍99 | 亚洲精品你懂的 | 久久精品99国产国产精 | 国产欧美一区二区三区鸳鸯浴 | 91视色| jlzzjlzz国产精品久久 | 免费成人蒂法网站 | 日韩中文字幕视频 | 成人小视频在线免费观看 | 国产午夜精品久久久久久免费视 | 中文字幕第10页 | 龚玥菲三级露全乳视频 | 真实新婚偷拍xxxxx | 国产免费高清 | 色94色欧美sute亚洲线路二 | 国产精品久久久久久久久 | 好吊色欧美一区二区三区视频 | 亚洲无吗av| 风间由美av在线 | 又色又爽又黄无遮挡的免费视频 | 综合国产精品 | 中文字幕在线免费看 | 色噜噜狠狠一区二区三区 | 国产成人精品av在线观 | 亚洲一区二区久久久 | 精品视频一区二区 | 在线观看欧美一区二区三区 | 国模私拍一区二区三区 | 欧美美女一区二区 | 一区二区三区手机在线观看 | 国产对白自拍 | 国产精品久久九九 | 国产成人免费视频网站高清观看视频 | av色噜噜| 午夜影院福利视频 | 午夜草草 | 日韩精品一区二区三 | 我要操婊 | 狼人色综合| 丁香在线 | 成人免费毛片嘿嘿连载 | 波多野结衣毛片 | 免费在线中文字幕 | 成人手机视频在线观看 | 亚洲精品高清视频 | 久久国产精品久久久 | 欧美综合亚洲 | 国产91精品久久久久久久 | 狠狠久久亚洲欧美专区 | 国产情侣激情自拍 | 午夜精品久久久 | 毛片aaaa | 午夜精品久久久久久久爽 | jizz成人 | 91亚洲视频 | 97超碰精品 | 五月天婷婷在线观看 | 99久久精品久久久久久动态片 | 国产伦精品一区二区三区视频我 | 亚洲 欧美 日韩 偷拍 | 国产黄频在线观看 | av撸撸在线| av在线等 | 一级片久久久久久久 | 国产91精品看黄网站在线观看 | 国产a∨精品一区二区三区仙踪林 | 最新中文字幕一区 | 大陆av在线 | 在线视频三区 | 免费av在线播放 | 久久人人艹| 欧美成人精品欧美一级乱黄 | 欧洲成人精品 | www.中文字幕| 亚洲风情av| 一本色道久久综合亚洲精品小说 | 国产高潮在线观看 | 日本一级黄色大片 | 精品久久久久久亚洲综合网站 | 亚洲国产精品18久久久久久 | 国产美女激情 | 欧美午夜大片 | 日韩精品一区二区在线观看 | 欧美日在线 | 久久免费在线观看视频 | 成人免费在线观看网站 | 亚洲欧洲精品一区二区 | 欧美三区在线观看 | 米奇7777狠狠狠狠视频 | 五月婷婷色 | av日韩在线免费观看 | 不用播放器可以看的av | 两性动态视频 | 久久澡 | 国产冒白浆 | 老妇裸体性猛交视频 | 国产做爰全过程免费视频 | 污视频导航 | 色接久久 | 在线艹 | 黄色一级网站 | 精品久久一区二区 | 欧美一级二级三级视频 | 日本青青草| 久久国产精品亚州精品毛片 | 亚洲日批视频 | 日日操夜夜撸 | 91免费高清视频 | 男人的天堂国产 | 亚洲播放器 | 一级片aaa | 黄色av网站在线观看 | 亚洲 视频 一区 | 日本中文在线 | 欧美性天堂 | 日韩免费高清视频网站 | 神马香蕉久久 | 一区二区三区免费观看 | 国产精品3区 | 男人日女人免费视频 | 超碰精品| 在线播放亚洲视频 | 亚洲国产一区二 | 99视频+国产日韩欧美 | 亚洲免费观看视频 | 五月天综合视频 | 欧美人伦 | 精品成人网 | 国产色视频在线 | 日韩精美视频 | 国产嫩草影院久久久久 | 绯色av一本一道道久久精品 | 国产精品一区二区三区免费视频 | 欧美成人性生活 | 自拍偷拍视频二区 | 日韩av网站在线 | 五月婷婷激情综合网 | 国产性猛交普通话对白 | 99热在线观看免费 | 日韩av不卡在线 | 男人免费视频 | 国产女人18水真多18精品一级做 | 国产亚洲精品久久久久婷婷瑜伽 | 亚洲欧美强伦一区二区 | 九九精品视频在线 | 精品国产毛片 | 国产精品毛片va一区二区三区 | 国产一级片久久 | 国产日韩精品一区二区三区在线 | 精品国产乱码久久久久久蜜臀网站 | 麻豆传媒一区二区三区 | 丁香婷婷在线 | 99re在线观看 | 吃奶在线观看 | 在线播放国产视频 | 91亚洲精华国产精华精华液 | 亚洲乱码一区二区三区 | 亚洲香蕉久久 | 天天爱天天操 | 久久精品久久久久久久久久久久久 | 中文在线字幕免费观 | 五十路在线视频 | 销魂美女一区二区 | 成年人看的网站 | 久久精品亚洲精品 | 青青草国产 | 国产999久久久| 夜夜躁狠狠躁日日躁av | 中国女人和老外的毛片 | 欧美激情亚洲激情 | 国产精品视频久久久久久 | 成人免费看片视频 | 欧美国产片| 日韩porn| 久久aⅴ国产欧美74aaa | 久久岛国| 亚洲蜜桃妇女 | 少妇高潮露脸国语对白 | 欧美特级视频 | 精品国产乱码久久久久久影片 | 国产成人免费网站 | 国产又爽又黄又嫩又猛又粗 | 视频二区三区 | 两性免费视频 | 亚洲日日操 | www.av在线.com | 欧美综合成人 | 欧美福利片在线观看 | 久久人人爽人人爽人人片亚洲 | 国产欧美日韩中文字幕 | 午夜高清| 成人图片小说 | 在线欧美亚洲 | 日本色妞 | 夜夜嗨av 禁果av 粉嫩av懂色av | 国产成人高清 | 麻豆精品国产传媒mv男同 | 18欧美性xxxx极品hd | 91视频在线观看网 | 国产又大又黑又粗 | 亚洲男女av| 91看片网| 亚洲一区区| www黄在线观看 | 黄色va | 99视频国产精品免费观看a | 免费在线毛片 | 日韩精品三级 | 日日夜夜精品免费视频 | 狠狠鲁狠狠干 | 国产91在线高潮白浆在线观看 | 奇米久久 | 亚洲视频二区 | 国产精品中文字幕在线 | 性生交大片免费视频 | 最新国产中文字幕 | 国产高清不卡一区 | av网站中文字幕 | 国产私人影院 | 91捆绑91紧缚调教91 | 亚洲干干干 | 国产高清久久久 | 狠狠躁18三区二区一区传媒剧情 | 爱豆国产剧免费观看大全剧集 | 日本韩国欧美中文字幕 | 日韩精品久久久久 | 亚洲三级a| 久久免费国产视频 | 亚色在线观看 | 夜夜草免费视频 | 中文字幕在线免费视频 | 亚洲性猛交富婆 | 久久久久在线视频 | 婷婷亚洲五月 | 真实新婚偷拍xxxxx | 想要视频在线 | 成人免费毛片aaaaaa片 | 超碰在线综合 | 粉嫩久久99精品久久久久久夜 | 91porny在线 | 精品免费久久久 | 免费视频一区 | 欧洲成人精品 | 一级久久 | 性欧美大战久久久久久久83 | 天天舔天天插 | 国产美女久久 | 激情网站视频 | 37p粉嫩大胆色噜噜噜 | 色婷婷国产精品综合在线观看 | 欧美性网址| 亚洲免费在线观看 | 日韩在线观看网站 | 久久精品国产亚洲沈樵 | 亚洲乱码国产乱码精品精大量 | 在线观看的av网址 | 久久久久高清 | 性久久久久久久久 | 精品国产一区二区三区久久久蜜月 | 国产一区二区黄色 | 超碰免费在线播放 | 亚洲一区二区三区乱码aⅴ蜜桃女 | 精品欧美日韩 | 日本91网站 | 红桃视频国产精品 | 888奇米影视 | 韩国一级片在线观看 | 欧美成人精品欧美一级乱黄 | 成人福利在线观看 | 日日干,夜夜操 | 在线免费观看中文字幕 | 99久久综合国产精品二区 | 91精选视频| 久久99久久99精品免观看粉嫩 | 色播99| 亚洲一区精品二人人爽久久 | 日韩小视频在线观看 | 国产精品成人av性教育 | 亚洲特黄特色 | 美女高潮黄又色高清视频免费 | 日韩字幕在线观看 | 亚洲免费成人 | 精品免费久久久 | 亚洲国产毛片aaaaa无费看 | 久久久久久久黄色片 | 六月综合网 | 337p亚洲精品色噜噜噜 | 后进极品白嫩翘臀在线视频 | 欧美成人图区 | 成人夜色| 91视频在线视频 | 五月婷在线视频 | 91丨九色丨国产在线观看 | 日韩精品中文字幕一区 | 91丝袜呻吟高潮美腿白嫩 | 亚洲国产三级在线观看 | 在线国产播放 | 日本在线观看网站 | 亚洲国产成人欧美激情 | 亚洲视频h | 日本精品网站 | 狼色网| 香蕉国产精品 | 337p粉嫩大胆噜噜噜亚瑟影院 | 伊人伊人伊人 | 欧洲中文字幕 | 涩涩片影院 | 综合网亚洲| 一本到在线观看 | 欧美大片免费播放器 | 青草一区二区 | 99少妇 | 成人高潮视频 | 日韩精品五区 | 亚洲视频在线免费播放 | 国产福利视频一区二区 | xnxx国产 | 亚洲精品乱码久久久久久9色 | 在线视频观看免费 | 一级黄色国产片 | 欧美精品一区在线观看 | 青青草成人在线观看 | 国产精品国产三级国产普通话蜜臀 | 美女毛片视频 | 国产成人三级在线观看视频 | 亚洲爱v| 成人av一区| 免费激情片 | 天天曰| 久久精品视屏 | 五月婷婷综合激情 | 9999免费视频 | 国产福利精品视频 | 伊人艹| 国产成人激情视频 | 一级做a爱片久久毛片 | 国产成人精品久久二区二区 | 在线观看mv的中文字幕网站 | 六月丁香在线视频 | 欧美日本三级 | 少妇又紧又色又爽又刺激 | 国产 丝袜 欧美中文 另类 | 在线观看涩涩视频 | 欧美午夜剧场 | 黄色av一区二区三区 | 成人在线精品 | 东方av伊甸园 | 久久精品综合 | 天天爽一爽 | 久久欧美一区二区三区 | 欧美综合亚洲 | 欧美用舌头去添高潮 | 午夜三级视频 | 中文字幕91爱爱 | 五月婷婷,六月丁香 | 成人免费看视频 | 婷婷午夜 | av在线精品 | 波多野结衣一二三区 | 亚鲁鲁国产 | 成人国产一区二区 | 奇米在线777| 国产黑丝在线 | 浮力影院国产第一页 | 一区二区三区在线看 | 天天操天天干天天操 | 黄色小视频免费观看 | 天堂在线中文资源 | 色图视频| 中文字幕无线码一区 | 99久久精品日本一区二区免费 | 在线播放免费人成毛片乱码 | www黄色片 | 91久久国产精品 | 91网站在线免费看 | 日韩成人免费 | 亚洲一级片 | 国产精品一二三区成毛片视频 | jizz内谢中国亚洲jizz | 久久综合导航 | 玖玖爱国产 | jizz97| 国精产品一区 | 亚洲成年 | 在线精品视频播放 | 天天色天天干天天 | 国产精品视频久久久久久 | 日本一二三区不卡 | 91精品国产高潮对白 | 91啪国产| 成人免费一区二区三区 | 日韩中文字幕免费 | 狠狠干in | 色婷婷综合成人 | 8x8x最新网址 | 九九色精品 | 成人亚洲精品 | 日韩一区二区三区视频在线观看 | av观看网站| 久久毛片视频 | 欧美阿v| 国产欧精精久久久久久久 | www.五月天激情 | 国产一区91 | 国内偷拍第一页 | 精品美女视频 | 久久99精品久久久久久无毒不卡8 | 九色精品| 欧美一级射 | 成人精品视频一区二区三区尤物 | 精品一区二区三区久久久 | 国产精品久久久久久亚洲影视 | 狠狠操中文字幕 | 亚洲男人第一天堂 | 日本a级黄色 | 精品国偷自产在线视频 | 少妇一级淫片日本 | 四虎视频国产精品免费 | 日韩av影片在线观看 | 欧美在线播放一区二区 | 打开每日更新在线观看 | 在线看黄网 | 国产精品久久久久久久不卡 | 国产91在线观看丝袜 | 色综合图片| 国产综合精品久久 | 亚洲久久在线观看 | 国产日韩精品一区 | 露脸丨91丨九色露脸 | 台湾佬在线 | 欧美一级片网址 | 欧美一区二区三区在线播放 | 日本特级a一片免费观看 | 日韩美女在线视频 | 鸥美一级片| 深爱激情五月婷婷 | 裸体毛片 | 四虎影院在线免费播放 | 久久三级黄色片 | 性生活三级视频 | 黄色在线观看国产 | 在线观看午夜视频 | 日本系列第一页 | 天天操天天爽天天干 | 日本亚洲黄色 | 黄色com| 亚洲一区二区三区免费 | 久久精品国产精品亚洲毛片 | 老司机午夜免费视频 | 日韩成人精品视频 | 2022天天操 | 久久精品麻豆 | 99国产成人综合久久精品欧美 | 欧美日日日 | 一区二区三区免费在线 | 午夜精品久久久久 | 久久精品99| 久久艹久久 | 国产中文字幕不卡 | 亚洲综合五月 | 国产在线精品一区二区三区不卡 | 免费日韩在线 | 亚洲乱亚洲乱妇 | 91高清视频免费观看 | 亚洲天堂小视频 | 欧美日韩国产一级 | www.色呦呦 | 免费毛片视频网站 | 91精品国产自产91精品 | 男人的天堂在线播放 | 欧美日韩国产精品综合 | xxx色 | www.色播| 天天草av | 99爱视频在线观看 | 66m—66摸成人免费视频 | 已婚少妇露脸日出白浆 | 国产精品欧美综合亚洲 | 欧美日韩性 | 天天操天天插天天干 | 国产靠逼视频 | 国产亚洲一区精品 | 国产乱码精品一区二区三区五月婷 | 性色av免费在线观看 | 日韩毛片网站 | 日b视频免费看 | 五月婷婷六月丁香 | 日本a级黄色 | 97人人模人人爽人人喊网 | 国产在线中文字幕 | 午夜性福利 | 久热精品视频在线 | 国产三级欧美三级日产三级99 | 黄色1级视频 | 日韩女优中文字幕 | 日日躁夜夜躁白天躁晚上躁91 | 99久久香蕉 | 福利视频在线播放 | 激情视频在线观看网址 | 国产大尺度在线 | 日韩精品综合 | 欧美极品喷水 | 99国产精品久久久久久久 | 欧美 日韩 国产 一区 | 国产一区二区网站 | 中文字幕成人在线观看 | 超碰免费在线播放 | 欧美高清精品 | 成人精品国产免费网站 | 在线免费观看日韩av | 91蝌蚪91密月 | 又粗又硬国语对白 | 日本人体视频 | 色婷婷网 | 在线精品一区 | 国产一级片免费观看 | 天天看av | 成人中文字幕+乱码+中文字幕 | 亚洲狠狠操 | 亚洲成人午夜影院 | 蜜臀久久99精品久久久无需会员 | 久久久精品视频在线 | 国产精品女教师久久二区二区 | 欧美日本韩国一区二区三区 | 国产成人av免费观看 | 精品国产理论 | 中文字幕一级 | 色呦| 国产精品精 | 亚洲精品一区二区三区99 | 日本精品视频 | 免费在线观看黄色片 | 国产精品二区一区二区aⅴ 免费中文视频 | 成人精品动漫 | 九九99精品 | 日本精品一区二区三区四区的功能 | 黄色av网站在线免费观看 | 久久久久久久久久影视 | 午夜高清福利 | 亚洲一区二区在线视频 | 亚洲一级黄色大片 | 国产精品剧情av | 国产精品刘玥久久一区 | 老熟妇毛片 | 91精品国产综合久久福利 | a天堂在线资源 | 夜夜av | www.青青草| 国产色噜噜噜在线观看精品 | 开心激情网站 | 重囗味sm一区二区三区 | 亚洲国产综合精品久久久久久 | 免费av在线网站 | 中文字幕日韩在线播放 | 日日狠狠久久 | 日韩成人一级片 | 中文字幕一区一区三区 | 亚洲一区二区三区婷婷 | 国产寡妇色xxⅹ交肉视频 | 国产福利av| 亚洲国产视频一区 | 亚洲大尺度专区 | 国产淫视频 | 在线艹| 五月婷婷六月丁香 | 天堂中文在线资源 | aaaaaa毛片| 亚洲字幕在线观看 | 亚洲字幕在线观看 | 妖精视频一区二区 | 男女涩涩| 日日操夜夜爱 | 在线观看日韩欧美 | 亚洲免费大全 | 国产精品7777 | 91亚洲国产成人久久精品网站 | 日本一区二区三区网站 | 亚洲h在线观看 | 一区二区三区三区在线 | 日韩社区| av国产片| 亚洲一区色图 | 亚洲视频精品在线观看 | 黑人干亚洲人 | 亚洲视频国产一区 | 亚洲天堂社区 | 日韩一区二区三区四区 | 日韩中文字幕第一页 | 99精品视频在线免费观看 | 日韩精品免费一区二区三区竹菊 | 91 在线观看 | 日本午夜视频 | 天天操精品 | 蜜桃成人在线视频 | 超碰在线免费看 | 男人的天堂在线视频 | 亚洲成人黄色网址 | 新91视频在线观看 | a毛片基地 | 国产人久久人人人人爽 | 免费簧片在线观看 | 国产一区二区免费在线观看 | 欧美一级视频 | 今天最新中文字幕mv高清 | 中文字幕在线字幕中文 | 午夜私人福利 | 欧美第一视频 | 午夜视频网 | 欧美国产日韩精品 | 国产精品免费av一区二区 | 黄色a网站 | 成人动漫在线免费观看 | gav久久 | 日本免费福利视频 | 啪啪网站免费观看 | 自拍偷拍福利视频 | 一久久久| 色婷婷av一区二区三区gif | 91精品国产综合久久蜜臀 | 日韩手机在线视频 | 亚洲一区黄色 | 亚洲国产精品人人爽夜夜爽 | 亚洲黄色影院 | 久久久高潮 | 欧美亚洲| 亚洲精品国产一区黑色丝袜 | 国产免费黄色 | 毛片的网站 | 中文字幕免费高清网站 | 国语对白99 | aaa黄色一级片 | 午夜影院欧美 | 星空大象mv高清在线观看 | 国产av毛片| 桃色视频在线 | 一级片视频在线 | 欧美在线免费看 | 日韩在线一 | 国产成人免费视频网站高清观看视频 | 午夜在线观看免费 | 国产伊人久 | 国产亚洲精品久久久久四川人 |