欧美亚洲韩国_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视频在线精品免费观看2 | 91在线精品视频 | 亚州午夜精品 | 午夜啪啪网站 | 亚洲精选一区二区三区 | 成人中文字幕在线 | 欧美午夜精品久久久久久人妖 | 欧美成人自拍视频 | 欧美1区2区3区 | 免费观看一区二区 | 免费在线一区二区三区 | 美女视频91 | av影片在线看| 色狗网站 | 四虎永久在线精品 | 伊人99热 | 国产视频福利在线观看 | 深爱五月激情五月 | 盗摄一区二区 | 91在线色| 国产18页 | 中文字幕在线视频网站 | 天天综合影院 | 国产美女精品 | 久久成人激情视频 | 欧美一区视频在线 | 亚洲精品成人区在线观看 | 国产污视频网站 | 国产免费一区二区三区 | 国产精品一区免费 | 亚洲精品国产精品国自产网站 | 国产91在线高潮白浆在线观看 | 狠狠爱综合网 | 成人永久视频 | 亚洲高清视频在线观看免费 | 久久新视频 | 午夜影视网 | 天堂成人在线视频 | 久久天天操 | 中文字幕亚洲第一 | 欧美亚洲国产一区二区三区 | 欧美一级在线 | 国产精品综合一区二区 | 美腿丝袜av | 永久91嫩草亚洲精品人人 | 麻豆久久久久久久久久 | 婷婷久久精品 | 亚洲精品一线二线三线 | 成人av网站大全 | 黄色一级片a | 97超碰人人模人人人爽人人爱 | av中文在线播放 | 91香蕉国产在线观看软件 | 亚洲精品推荐 | 色哟哟一区二区 | 亚洲成人h | 天天操精品 | 综合色网站| 欧美香蕉在线 | 91精品国产福利一区二区三区 | 一区在线视频 | 日本在线观看视频网站 | 涩涩片影院 | 毛片无遮挡高清免费观看 | 自拍理论片| 欧美一区二区三区激情 | 97视频免费观看 | 超碰在线看 | 一级黄色日本片 | 重囗味sm一区二区三区 | 中文字幕你懂的 | 爽爽影院在线 | 亚洲网站免费观看 | 亚洲精品国产二区 | 91av官网| 毛片网站视频 | 日韩免费一级 | 国产探花一区二区 | 欧美激情啪啪 | 亚洲伊人精品 | 亚洲精品久久久一区二区三区 | 色永久 | 成人aⅴ视频 | 超碰97国产| 日本一区高清 | 日韩欧美视频 | 免费成人小视频 | 伊人狼人在线 | 欧美日韩亚洲天堂 | 精品一区在线 | 在线观看av资源 | 亚洲毛片儿 | 香蕉av一区二区三区 | 伊人激情综合 | 色播在线播放 | 女人18毛片一区二区三区 | 天堂中文在线视频 | 可以在线观看av的网站 | 国产八区 | 国产精品igao视频网免费播放 | 黑人干亚洲人 | 日韩精品一区二区视频 | 国产第一色 | 一级久久片 | 曰曰操 | 国产最爽的乱淫视频国语对白 | av全黄| 人人夜| 亚洲欧美精品在线 | 日本免费网站 | 午夜视频在线观看免费视频 | 午夜av网 | 91久久久久久久久久久久久 | 亚洲视频手机在线观看 | 亚洲高清毛片 | 日韩午夜在线 | 亚洲女人天堂 | 精品香蕉99久久久久网站 | 中文字幕av网站 | 四虎永久在线精品免费网址 | 91精品啪在线观看国产线免费 | 三级a视频 | 丁香婷婷九月 | 中文在线国产 | 男女在线视频 | 国产日韩在线免费观看 | 国产又大又黄又粗 | 亚洲va欧美va久久久久久久 | 精品亚洲一区二区三区四区五区高 | 插插射射 | 麻豆自拍视频 | 成人免费毛片日本片视频 | a级片在线视频 | 成人精品久久久 | 高清乱码毛片入口 | 国产一区h| 国产日韩精品视频 | 久草手机在线视频 | 中文亚洲欧美 | 狠狠爱天天干 | 欧美日韩中字 | 四虎中文字幕 | 日本一道本 | 中文字幕天堂 | 亚洲国产精品区 | 97自拍视频在线 | 91av免费看 | 奇米影视播放器 | 亚洲乱码国产乱码精品精大量 | 337p日本大胆噜噜噜噜 | 在线观看免费视频一区 | 亚洲国产成人精品久久 | 亚洲黄色一区 | 97精品一区二区三区 | 欧美一级在线播放 | 亚洲国产欧美日韩在线精品一区 | 亚洲热在线 | 国产精品色在线网站 | 中文字幕自拍偷拍 | 久久久成人免费视频 | 天堂成人在线 | 亚洲天堂av在线播放 | 亚洲一区精品在线观看 | 精品亚洲永久免费 | 黄色在线免费视频 | 一级黄色片毛片 | 久久香蕉精品 | 九草视频在线 | 丰满岳乱妇一区二区三区 | 久久夜夜夜 | 粉嫩av一区二区三区在线播放 | 亚洲免费观看高清在线观看 | 一本色道综合久久欧美日韩精品 | 国产欧美一区二区三区在线看蜜臂 | 九九视频网 | 亚洲天堂中文字幕在线 | 亚洲激情在线 | 奇米色播 | 在线看片a | 日韩激情啪啪 | 久久国产热视频 | 久久久一本精品99久久精品66 | 亚洲自拍一区在线观看 | 国产一级片一区 | 黄色三级三级三级 | 视频一区二区三区在线观看 | 玖玖国产精品视频 | 性高跟鞋xxxxhd人妖 | 亚洲天堂爱爱 | 中文字幕亚洲在线 | 日产精品一区 | 96亚洲精品久久久蜜桃 | 久草国产在线视频 | 亚洲va欧美va天堂v国产综合 | 天天拍夜夜爽 | 好男人www在线视频 亚洲视频一二 | 夜夜春亚洲嫩草一区二区 | 日韩一区二区三区在线观看视频 | 欧洲做受高潮免费看 | 亚洲爱爱视频 | 综合久久久 | 日本三级网站在线观看 | 精品久久久久一区二区国产 | 欧美精产国品一二三区 | 日本在线免费观看视频 | 久久网伊人| 日本高清网站 | 国产精品国产三级国产aⅴ入口 | 日韩在线黄色 | 日韩福利视频在线观看 | 亚洲人久久 | av成人在线免费观看 | 97久久精品| 性久久久久 | 在线成人亚洲 | 在线观看av片 | 久草国产精品 | 日皮毛片| 欧美伦理影院 | 天堂999| 免费网站看av | 亚洲爽爆av| 国产偷亚洲偷欧美偷精品 | 免费av网址大全 | 99久久婷婷国产精品综合 | 欧美韩国日本 | 国产精品―色哟呦 | 91成年人视频| 国内成人自拍视频 | 亚洲免费av网址 | fc2成人免费人成在线观看播放 | 久久精品9 | 福利一区福利二区 | 国产五月天婷婷 | 狠狠久久亚洲欧美专区 | www.五月激情 | 免费麻豆国产一区二区三区四区 | 久久久久a | 成人性生交大片免费看中文 | www在线观看视频 | 国产精品综合在线 | 日韩av色图 | 国产在线高潮 | 亚洲欧洲日韩av | 亚洲欧美偷拍一区 | 劲爆欧美第一页 | 亚洲影音| 久久综合欧美 | 亚洲国产成人精品久久久国产成人一区 | 18色av| 狠狠干免费视频 | 亚洲图片欧美在线看 | 在线观看 中文字幕 | 欧美成人xxx | 国产精品久久777777毛茸茸 | 亚洲砖区免费 | 后进极品白嫩翘臀在线视频 | 亚洲毛片在线 | 国产亚洲欧美精品永久 | 狼人色综合 | 中文字幕在线观看地址 | 国产精品美女一区 | 特黄一级大片 | 国产精品911| 成人自拍偷拍 | 日韩免费观看 | 日韩欧美国产亚洲 | 免费观看一级黄色片 | 日韩在线播放视频 | 自拍亚洲一区 | 69精品在线观看 | 国产毛片aaa | 亚洲激情自拍偷拍 | www色日本| 超碰97久久 | 伊人9| 亚洲资源在线观看 | 91在线欧美 | 噜噜色av | 精品一区精品二区 | 成人免费三级 | 亚洲精品偷拍 | 国产亚洲片 | 韩国性猛交╳xxx乱大交 | 亚洲成人a√ | 色01看片网 | k8经典成人理伦片 | 五月婷婷丁香在线 | 亚洲精品456在线播放 | 亚洲五香丁香 | 欧美性色网站 | 人人爱人人草 | 亚洲第一色播 | 亚洲一二三 | 污污的视频网站在线观看 | 在线观看亚洲专区 | 88av在线看 | 夜夜爽网站 | 天天操天天干天天爱 | 成人性生活视频 | 免费大片在线观看www | 午夜一区二区三区四区 | 国产不卡视频一区二区三区 | 亚洲精品久久久久avwww潮水 | 97人人爽人人爽人人爽人人爽 | 国产精品传媒在线观看 | 一级黄色日本 | 成人在线91 | 午夜精品福利在线 | 久久久久久久国产 | 久久综合色网 | 久久美女视频 | 国产精品每日更新 | 国产精品视频第一页 | 一区二区三区四区蜜桃 | 一区二三区| 亚洲一区二区日本 | 玖玖精品在线 | 亚洲性xx| 香蕉97视频观看在线观看 | 天天综合网在线 | 91丝袜呻吟高潮美腿白嫩在线观看 | 日韩午夜影院 | 天天操女人 | 一区二区日韩视频 | 91在线小视频 | 午夜影视在线观看 | 精品久久久久久亚洲精品 | 91精品国| 日韩三区在线 | 学生孕妇videosex性欧美 | 欧美精产国品一二三区 | 你懂的在线播放 | 国产精品成人一区二区三区 | 国产原创在线观看 | 超碰在线最新 | 四色在线| 99久久黄色 | 男女在线观看视频 | 久久精品探花 | 精品国产一区在线观看 | 免费av网址大全 | 男人午夜影院 | 中文字幕免 | 一 级做人爱全视频在线看 91亚洲人人在字幕国产 | 在线视频一区二区 | 日韩一区二区在线视频 | 欧美极品在线播放 | 九九精品在线观看 | 亚洲爱v| 免费中文字幕视频 | 日韩一区二 | 天天超碰| 日韩av在线播 | 欧美射射 | 免费a在线| 成年人视频在线 | 亚洲美女偷拍 | 欧美干干干 | 97超碰人人模人人人爽人人爱 | 成人免费视频播放 | 免费福利av| 午夜视频一区二区三区 | 国产精品一区二区三区在线 | 精品国产免费久久久久久婷婷 | 亚洲乱码国产乱码精品精 | 亚洲成av在线 | 俄罗斯女人裸体性做爰 | 欧美日韩网站 | 在线观看欧美视频 | 国产小视频在线免费观看 | www.四虎精品| 中日韩在线观看视频 | 日本精品久久久久久久 | 国产精品有码 | 中文字幕亚洲精品在线 | 欧美大胆视频 | 夜夜综合网| 亚洲第一黄色网址 | 91精品一本久道久久丁香狠狠躁 | 久久狠狠爱 | 亚洲最大免费视频 | 五月综合视频 | 一级片在线免费观看视频 | 日本久久精品 | 国产视频入口 | 国产精品初高中害羞小美女文 | 亚洲美女中文字幕 | 日本大尺度做爰呻吟舌吻 | 干一干操一操 | 天天操夜操 | 免费中文视频 | 香蕉福利 | 欧美久久久久 | 都市激情 亚洲 | 中文字幕精品一区二区精品 | 亚洲图片激情小说 | 免费黄色片网站 | 锦绣未央在线观看 | 8090av| 美女性高潮视频 | 午夜无毒不卡 | 五月精品| 国产三级一区二区三区 | 激情午夜天 | 91破解版无限看 | 国产精品国产三级国产aⅴ 精品欧美久久 | 亚洲欧美视频在线 | 天天婷婷 | 亚洲精品一卡 | 免费黄色大片网站 | 国语av | 精品三级| 国产专区一区二区三区 | 国产精品久久久久久99 | 神马午夜精品 | 性猛交xxxx乱大交孕妇2 | 亚洲国产97在线精品一区 | 成人av高清在线观看 | 亚洲熟乱| 在线看片资源 | 香蕉视频链接 | 亚洲精品男人天堂 | 久久成人久久爱 | 国产一区欧美一区 | 污视频网站入口 | 青娱乐伊人 | 青草av在线 | 久久久久久久久久久网站 | 好看的毛片网站 | 欧美日韩免费网站 | 色8久久| 热热色av | av中文在线播放 | 日韩第二页 | 成人永久免费视频 | 午夜视频免费在线 | 日韩污视频在线观看 | 依人成人综合网 | 一级黄视频 | 黄色片视频免费看 | 中文字幕另类 | 波多野结衣一区二区三区四区 | 黄色污污视频 | 中文字字幕第183页 成人禁污污啪啪入口 | 日韩中文字幕视频在线观看 | 亚洲美女网站在线观看 | 天天天天操 | 国产视频精品一区二区三区 | 国产精久久久久 | 秋霞av网| 不卡欧美 | 亚洲第一页综合 | 成人中文在线 | 有码一区 | 国内外成人在线视频 | 久久久亚洲国产精品麻豆综合天堂 | www黄色com| 欧美男女啪啪 | 男人天堂视频网 | 自拍偷拍第二页 | 亚洲一线在线观看 | 国产美女激情 | 狠狠干美女 | 农村老妇性真猛 | 黄瓜视频在线观看 | 国产激情啪啪 | 91成人天堂久久成人 | 国产乱码一区二区三区 | 日本内谢少妇xxxxx少交 | 一级片少妇 | 蜜乳av网站 | www日本色 | av不卡在线 | 亚洲精品久久久久久久久久 | 欧美精品在线一区二区三区 | 国产精品亚洲а∨天堂免在线 | 精品久久久久久久久久久久久久 | 伊人98 | 国产人澡人澡澡澡人视频 | 色呦呦网站在线观看 | 伊人影视久久 | 蜜臀久久99精品久久久久宅男 | 伊人网视频 | 国产综合激情 | 伊人天堂在线 | 在线看黄的网站 | 国产又黄又嫩又滑又白 | 亚洲日本香蕉视频 | 欧美脚交 | 成人性生交大片免费看r链接 | 日韩一级片网址 | 天天操网站 | 99久久精品国产麻豆演员表 | 真实国产乱啪福利露脸 | 99久久婷婷| 日韩黄色三级视频 | 日日夜夜噜 | 久久久天堂国产精品女人 | 综合激情婷婷 | 欧美日韩在线观看一区二区三区 | 97人人精品| 免费观看91视频 | 亚洲国产免费av | 久草综合网 | 五月婷综合 | 免费黄色在线播放 | 人人干人人舔 | 凹凸日日摸日日碰夜夜 | 亚洲成a人v| 日韩中文字幕在线看 | 精品自拍偷拍 | 国产伦精品一区二区三区在线播放 | 成人免费视频高清 | 国产精品国产馆在线真实露脸 | 日本免费黄色网 | 久久久久亚洲视频 | 国产大奶 | 蜜桃久久久久久久 | 在线中文av | 亚洲欧美v| 久久久综合久久 | 一级小毛片 | 国产精品久久久久久久久免费桃花 | 在线观看福利片 | 日韩av一级 | 蜜桃视频日韩 | 欧美视频一区二区在线观看 | 国产精品久久久久久免费播放 | 1024手机在线看片 | 91精品在线看 | 丁香花五月 | 伊人久久国产精品 | 国产乱国产乱300精品 | 久久性感视频 | 免费观看的黄色网址 | av首页在线观看 | 国产成人免费av | 欧美大片在线看免费观看 | 素人av在线 | 在线免费观看污污 | 懂色av蜜臀av粉嫩av分享吧最新章节 | 国产xxxx性hd极品 | 在线免费毛片 | 干干干日日日 | 色爱综合网 | 男女啪啪免费看 | 国产黄a三级三级看三级 | 欧美色就是色 | 黄色片网站免费在线观看 | 欧美激情综合五月色丁香 | 久久99综合 | 久久大尺度 | 亚洲国产精品区 | 亚洲精品女人 | 波多野结衣在线视频免费观看 | 四虎网址在线观看 | 国产精品人人做人人爽 | 亚洲图片视频小说 | 人人爽夜夜爽 | 最近更新2019中文字幕 | 中文字幕乱码在线 | 国产网友自拍 | 亚洲国产中文字幕在线观看 | 手机看片日韩日韩 | 91精品国产91久久久久久吃药 | 成人av黄色 | 亚洲制服丝袜在线播放 | 一级黄色网址 | 欧美一级片在线免费观看 | 波多野结衣在线观看一区 | 麻豆av一区二区三区 | 少妇精品一区二区三区 | 亚洲视频网 | 日韩精品视频免费播放 | av免费黄色 | 日批视频免费在线观看 | 色婷婷六月 | 国产麻豆一区 | 欧美乱人伦 | 97超级碰碰碰 | 在线视频精品免费 | 亚洲午夜av久久乱码 | 日本一级做a爱片 | av高清一区 | 国产欧美一区二区精品老汉影院 | 日韩插| 亚洲图片自拍偷拍区 | 成人一级片 | av天天操| 最新视频 - 88av | 黄色一级片免费看 | 欧美在线三级 | 91高潮胡言乱语对白刺激国产 | 日本xxx在线观看 | 国产日韩欧美精品在线 | aaaa毛片| 精品人成| 久久精品不卡 | 91桃色免费视频 | www.超碰在线.com | 8x8x最新网址 | 国产激情精品 | а√中文在线资源库 | 丁香啪啪 | 88av在线播放 | 手机在线小视频 | 午夜国产 | 欧美高清hd19 | 老鸭窝久久 | 久久黄色小说 | 第一章激情艳妇 | 极品尤物一区二区三区 | 伊人黄 | 成人精品影院 | 亚洲一区91| 宅男666在线观看免费网站 | 最新中文字幕第一页 | 免费在线观看视频 | 日韩啪啪网站 | 午夜手机福利 | av黄色影院 | 999av视频| 亚洲情欲网 | 成人在线观看一区 | 国产在线激情视频 | 91精品国| 神马久久香蕉 | 欧洲影院 | 香蕉成人臿臿在线观看 | 日韩免费播放 | 成人福利视频在线 | 中文字幕日韩视频 | 91原创国产 | 亚洲免费播放 | 91亚洲天堂 | 黄色成人在线视频 | 国产一级性生活 | 青青草原国产在线观看 | 国产精品福利在线播放 | 国内精品99| 亚洲乱码视频 | 看片网址国产福利av中文字幕 | 亚洲国产一区二区在线 | 超碰.com| 国产精品嫩草影院桃色 | 伊人焦 | 三级国产在线观看 | 在线免费观看国产 | 根深蒂固在线观看 | 日本黄色中文字幕 | 欧美综合精品 | 小视频在线免费观看 | 91视频国产区 | 日韩欧美福利视频 | 天天av天天爽 | 真实偷拍激情啪啪对白 | 手机看片日韩在线 | 免费观看国产视频 | 成年人毛片视频 | 狠狠干一区 | 欧美伦理影院 | 亚洲激情福利 | 丁香婷婷激情五月 | 四虎永久在线视频 | 黄色三级在线播放 | 亚洲精品国产一区二区 | 艳妇荡乳豪妇荡乳av精东 | 黄色av日韩 | 二区三区在线观看 | 毛片在线免费视频 | 亚洲性网| 亚洲一区第一页 | 婷婷国产视频 | 日韩av在线天堂 | 国产精品久久久久久久久久免费 | 国产做爰视频免费播放 | 日韩婷婷 | 亚洲成人1234| 国产精品看片 | 中国肥胖女人真人毛片 | 天堂激情网 | 99久久久成人国产精品 | 国产a∨精品一区二区三区仙踪林 | 一本不卡| 最新毛片网 | 超碰在线9| www.日本在线 | 亚洲婷婷久久综合 | 经典三级久久 | 日本aa视频 | 国产精品久久久久久久久久久新郎 | 日韩欧美黄色片 | 中文在线不卡 | 999精品视频在线观看 | 91国产视频在线 | 午夜剧场福利 | 黄色小说网站在线观看 | 日本三级一区 | 一区二区高清视频 | 污网站在线播放 | 看片久久 | 天天射夜夜骑 | 国产亚洲综合一区二区 | 国产91久| 精品日本一区二区三区 | 亚洲三级久久 | 91老司机在线视频 | 国产最新毛片 | 国产精品成人在线 | 亚洲一区二区天堂 | 日韩综合在线视频 | 97超碰中文字幕 | 一本之道av| 免费看片黄色 | 国产免费人成xvideos视频 | 国产高清在线观看 | 日本精品视频在线 | 欧美手机在线视频 | 欧美成人一区二区三区高清 | 久草这里只有精品 | 午夜久久视频 | a级大片在线观看 | 国产成人免费看一级大黄 | 国产毛片视频 | 逼特逼视频在线观看 | 久久伊人操| 污污视频在线免费看 | 欧美一级欧美三级 | 欧美日韩国产精品一区 | 毛片视频网 | 久久精品国产77777蜜臀 | 青青草原伊人网 | 亚洲精品乱码 | 日日干夜夜骑 | 尤物福利在线 | 久久久96| 巨大黑人极品videos精品 | 日韩视频免费观看高清 | 欧美αv | 九热精品 | 久久国产美女 | 蜜桃久久av| 女人18毛片水真多 | 国产视频在线观看一区 | 免费中文字幕 | av色播 | 国产乱码精品一区二三赶尸艳谈 | 日韩免费在线观看视频 | 国产少妇在线 | 午夜激情福利 | 国产一区二区三区在线看 | 人人澡超碰碰97碰碰碰 | 在线观看国产视频 | 婷婷色在线视频 | 狠狠躁夜夜 | 96精品国产 | 99色热 | 日本三级午夜理伦三级三 | 在线观看不卡av | 日韩三级黄 | 天天爱av | 91看片免费 | 91天堂在线视频 | 国产丝袜一区二区三区 | www.色网站| 综合国产在线 | 成人片在线播放 | 国产成人+综合亚洲+天堂 | 国产亚洲欧美精品久久久久久 | 国产日韩网站 | 小柔的淫辱日记(1~7) | 嫩草在线观看视频 | 精品一区二区三区av | 顶破超薄肉色丝袜进入 | 亚洲麻豆| 亚洲人掀裙打屁股网站 | 毛片视频网| 香蕉性视频| 久久一级片 | japanese国产打屁股 | 亚洲偷怕 | 一区二区三区日韩精品 | 曰韩精品| 天堂网av2014 | 国产性av | 中文av字幕 | 五月婷婷六月色 | 亚州欧美在线 | 奇米影视首页 | 国产 日韩 欧美 中文 在线播放 | 综合色av | 99久久99久久精品国产片桃花 | 亚洲国产传媒 | 黄色成人在线视频 | 另类专区亚洲 | 18av在线视频 | 136微拍宅男导航在线 | 不卡视频在线播放 | 狠狠狠狠狠 | 色综合天天综合网国产成人网 | 性久久久久久久久久久 | 久久久片| 黄色aa毛片 | 免费视频成人 | 亚洲v成人天堂影视 | 91片黄在线观看喷潮 | 亚洲精品香蕉 | 黄色一级免费视频 | 妻色成人网 | 日韩在线www | 国产在线观看免费视频今夜 | 免费小视频在线观看 | 亚洲乱码一区av黑人高潮 | jizz内谢中国亚洲jizz | www.成人av| 亚洲精品国产一区二区三区四区在线 | 西欧毛片| 成人免费在线播放视频 | 美女黄色一级片 | 成人免费一区二区三区在线观看 | 日韩一区二区三免费高清在线观看 | 亚洲a成人 | 成人免费在线观看网站 | 免费的三级网站 | 性感美女一级片 | 国产永久在线观看 | 欧美极品在线视频 | 欧美一级片在线播放 | 日本在线观看中文字幕 | www.av日韩| 午夜a级片 | 亚洲免费a | 成人午夜性视频 | 日本大尺度做爰呻吟舌吻 | 久久伊人五月天 | 香蕉黄色网 | 国产视频在线免费观看 | 久久精品一区二区国产 | 久操视频在线观看 | 成年人免费小视频 | 亚洲精品一二三四区 | 成人黄色小视频 | 国产91色| 亚洲国产三区 | 色老头在线观看 | 九色91在线| 成人婷婷| 日韩理论片在线观看 | 日韩精品综合 | 一级成人欧美一区在线观看 | 99精品免费视频 | 中文字幕毛片 | www国产91| 国产情侣自拍av | 免费在线日韩 | 国产黄视频在线观看 | 男人和女人搞鸡 | 露出调教羞耻91九色 | 亚洲性视频网站 | 欧美亚洲国产一区二区三区 | 激情综合av | 久久久久成人网 | 亚洲乱码一区二区三区在线观看 | 激情综合五月婷婷 | 欧美性网址 | 婷婷丁香激情五月 | 可以免费看毛片的网站 | 亚洲福利久久 | 久久久久亚洲av毛片大全 | 色涩久久 | 亚洲免费中文字幕 | 在线观看日批视频 | 天天综合天天色 | 天堂视频在线免费观看 | 国产亚洲第一页 | 污网站在线看 | 伊人久久视频 | 69精品人人人人 | 99re国产精品视频 | 国产日本在线视频 | 337p粉嫩色噜噜噜大肥臀 | 五月婷婷狠狠干 | 国产精品拍拍 | 久久午夜夜伦鲁鲁片 | 日韩久草| 国产精品日韩av | 亚洲国产精品嫩草影院 | 摸一摸操一操 | 日韩欧美天堂 | 夜夜撸 | 激情偷拍| 一久久 | 香蕉伊人网 | 亚洲男人的天堂在线视频 | 国产香蕉视频在线播放 | 久久久噜噜噜 | 国产伦理一区二区 | av在线第一页 | 朝桐光一区二区三区 | 久草精品在线观看 | 蜜色视频 | 国产做爰xxxⅹ高潮视频12p | 中文字幕1区2区3区 欧洲天堂网 | 不卡免费视频 | 亚洲自拍偷拍精品视频 | 亚洲91影院 | 久久艹综合 | 日韩精品在线免费视频 | 黄色网在线播放 | 九九欧美| 国产毛片久久久久久久 | 香蕉精品视频在线观看 | 国产男女精品 | 国产噜噜噜噜久久久久久久久 | 99热麻豆| 日韩美女一区二区三区 | 不卡影院av| 午夜精品久久久久久久96蜜桃 | 长篇爽欲亲伦96部小说 | 人人干人人插 | 婷婷的五月| 欧美另类视频 | 华人永久免费视频 | 日本精品久久久久久久 | 天堂在线视频免费观看 | www.狠狠操| 欧美日韩综合一区二区三区 | 日韩精品一区二区在线播放 | 呦女精品 | 一区二区的视频 | 成人欧美视频 | 人人艹视频| 久久天堂精品 | 久久国产精品毛片 | 啪啪影音| 亚洲性猛交xxxx乱大交 | 婷婷视频在线 | 亚洲区自拍 | 狠狠久久久 | 一级午夜| 一区二区精品在线 | 天堂av资源在线观看 | 日本不卡免费 | 99久久亚洲精品 | 中文精品一区二区三区 | 高清乱码毛片 | 玩偶游戏在线观看免费 | 91精品久久久久久久久中文字幕 | 香蕉视频色 | 久久精品视频在线 | 欧美日韩一区二区三区不卡视频 | 91久久国产综合精品女同国语 | 懂色av一二三三区免费 | 日本在线成人 | av在线免费网站 | 91av在线免费观看 | 国模精品视频 | 在线播放亚洲 | 色一情一交一乱一区二区三区 | 91狠狠 | 男女午夜激情 | 欧美视频在线观看一区二区 | 懂色av蜜臀av粉嫩av分享吧最新章节 | 欧美性xxxx在线播放 | 羞羞动漫在线观看 | 欧美成欧美va | 国产日批| 日韩一级在线视频 | 青青草av | 人人澡人人添 | 好色艳妇小说 | ,午夜性刺激免费看视频 | 影音先锋婷婷 | 日韩高清二区 | 国内精品免费视频 | 99精品国产一区二区三区 | 久久综合九色综合欧美狠狠 | 国产精品视频播放 | 日韩一区二区三免费高清在线观看 | 天天躁日日躁狠狠很躁 | 国产精品一级片 | 好男人www| 日韩av在线资源 | 中文字幕69| 黑人操欧美人 | 好吊妞这里只有精品 | 毛片com| 五月天激情国产综合婷婷婷 | 久久久久久不卡 | 国产精品50页 | 国产污视频 | 欧美成人激情视频 | 67194午夜 | 亚洲精品7777 | 99热久| 久久依人网 | 国产99久久精品一区二区300 |