久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

coroutine php_PHP 协程实现

發布時間:2023/12/10 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 coroutine php_PHP 协程实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多進程/線程

最早的服務器端程序都是通過多進程、多線程來解決并發IO的問題。進程模型出現的最早,從Unix 系統誕生就開始有了進程的概念。最早的服務器端程序一般都是 Accept 一個客戶端連接就創建一個進程,然后子進程進入循環同步阻塞地與客戶端連接進行交互,收發處理數據。

多線程模式出現要晚一些,線程與進程相比更輕量,而且線程之間共享內存堆棧,所以不同的線程之間交互非常容易實現。比如實現一個聊天室,客戶端連接之間可以交互,聊天室中的玩家可以任意的其他人發消息。用多線程模式實現非常簡單,線程中可以直接向某一個客戶端連接發送數據。而多進程模式就要用到管道、消息隊列、共享內存等等統稱進程間通信(IPC)復雜的技術才能實現。

最簡單的多進程服務端模型

$serv = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr)

or die("Create server failed");

![image.png](http://upload-images.jianshu.io/upload_images/4686383-a16cd123fd865f10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

while(1) {

$conn = stream_socket_accept($serv);

if (pcntl_fork() == 0) {

$request = fread($conn);

// do something

// $response = "hello world";

fwrite($response);

fclose($conn);

exit(0);

}

}

多進程/線程模型的流程是:

創建一個 socket,綁定服務器端口(bind),監聽端口(listen),在 PHP 中用 stream_socket_server 一個函數就能完成上面 3 個步驟,當然也可以使用更底層的sockets 擴展分別實現。

進入 while 循環,阻塞在 accept 操作上,等待客戶端連接進入。此時程序會進入隨眠狀態,直到有新的客戶端發起 connect 到服務器,操作系統會喚醒此進程。accept 函數返回客戶端連接的 socket 主進程在多進程模型下通過 fork(php: pcntl_fork)創建子進程,多線程模型下使用 pthread_create(php: new Thread)創建子線程。

下文如無特殊聲明將使用進程同時表示進程/線程。

子進程創建成功后進入 while 循環,阻塞在 recv(php:fread)調用上,等待客戶端向服務器發送數據。收到數據后服務器程序進行處理然后使用 send(php: fwrite)向客戶端發送響應。長連接的服務會持續與客戶端交互,而短連接服務一般收到響應就會 close。

當客戶端連接關閉時,子進程退出并銷毀所有資源,主進程會回收掉此子進程。

image.png

這種模式最大的問題是,進程創建和銷毀的開銷很大。所以上面的模式沒辦法應用于非常繁忙的服務器程序。對應的改進版解決了此問題,這就是經典的 Leader-Follower 模型。

$serv = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr)

or die("Create server failed");

for($i = 0; $i < 32; $i++) {

if (pcntl_fork() == 0) {

while(1) {

$conn = stream_socket_accept($serv);

if ($conn == false) continue;

// do something

$request = fread($conn);

// $response = "hello world";

fwrite($response);

fclose($conn);

}

exit(0);

}

}

它的特點是程序啟動后就會創建 N 個進程。每個子進程進入 Accept,等待新的連接進入。當客戶端連接到服務器時,其中一個子進程會被喚醒,開始處理客戶端請求,并且不再接受新的 TCP 連接。當此連接關閉時,子進程會釋放,重新進入 Accept,參與處理新的連接。

這個模型的優勢是完全可以復用進程,沒有額外消耗,性能非常好。很多常見的服務器程序都是基于此模型的,比如 Apache、PHP-FPM。

多進程模型也有一些缺點。

這種模型嚴重依賴進程的數量解決并發問題,一個客戶端連接就需要占用一個進程,工作進程的數量有多少,并發處理能力就有多少。操作系統可以創建的進程數量是有限的。

啟動大量進程會帶來額外的進程調度消耗。數百個進程時可能進程上下文切換調度消耗占 CPU 不到1%可以忽略不接,如果啟動數千甚至數萬個進程,消耗就會直線上升。調度消耗可能占到 CPU 的百分之幾十甚至 100%。

并行和并發

談到多進程以及類似同時執行多個任務的模型,就不得不先談談并行和并發。

并發(Concurrency)

是指能處理多個同時性活動的能力,并發事件之間不一定要同一時刻發生。

并行(Parallesim)

是指同時發生的兩個并發事件,具有并發的含義,而并發則不一定并行。

區別

『并發』指的是程序的結構,『并行』指的是程序運行時的狀態

『并行』一定是并發的,『并行』是『并發』設計的一種

單線程永遠無法達到『并行』狀態

正確的并發設計的標準是:

使多個操作可以在重疊的時間段內進行。

two tasks can start, run, and complete in overlapping time periods

參考:

迭代器 & 生成器

在了解 PHP 協程前,還有 迭代器 和 生成器 這兩個概念需要先認識一下。

迭代器

PHP5 開始內置了 Iterator 即迭代器接口,所以如果你定義了一個類,并實現了Iterator 接口,那么你的這個類對象就是 ZEND_ITER_OBJECT 即可迭代的,否則就是 ZEND_ITER_PLAIN_OBJECT。

對于 ZEND_ITER_PLAIN_OBJECT 的類,foreach 會獲取該對象的默認屬性數組,然后對該數組進行迭代。

而對于 ZEND_ITER_OBJECT 的類對象,則會通過調用對象實現的 Iterator 接口相關函數來進行迭代。

任何實現了 Iterator 接口的類都是可迭代的,即都可以用 foreach 語句來遍歷。

Iterator 接口

interface Iterator extends Traversable

{

// 獲取當前內部標量指向的元素的數據

public mixed current()

// 獲取當前標量

public scalar key()

// 移動到下一個標量

public void next()

// 重置標量

public void rewind()

// 檢查當前標量是否有效

public boolean valid()

}

常規實現 range 函數

PHP 自帶的 range 函數原型:

range — 根據范圍創建數組,包含指定的元素

array range (mixed $start , mixed $end [, number $step = 1 ])

建立一個包含指定范圍單元的數組。

在不使用迭代器的情況要實現一個和 PHP 自帶的 range 函數類似的功能,可能會這么寫:

function range ($start, $end, $step = 1)

{

$ret = [];

for ($i = $start; $i <= $end; $i += $step) {

$ret[] = $i;

}

return $ret;

}

需要將生成的所有元素放在內存數組中,如果需要生成一個非常大的集合,則會占用巨大的內存。

迭代器實現 xrange 函數

來看看迭代實現的 range,我們叫做 xrange,他實現了 Iterator 接口必須的 5 個方法:

class Xrange implements Iterator

{

protected $start;

protected $limit;

protected $step;

protected $current;

public function __construct($start, $limit, $step = 1)

{

$this->start = $start;

$this->limit = $limit;

$this->step = $step;

}

public function rewind()

{

$this->current = $this->start;

}

public function next()

{

$this->current += $this->step;

}

public function current()

{

return $this->current;

}

public function key()

{

return $this->current + 1;

}

public function valid()

{

return $this->current <= $this->limit;

}

}

使用時代碼如下:

foreach (new Xrange(0, 9) as $key => $val) {

echo $key, ' ', $val, "\n";

}

輸出:

0 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

看上去功能和 range() 函數所做的一致,不同點在于迭代的是一個 對象(Object) 而不是數組:

var_dump(new Xrange(0, 9));

輸出:

object(Xrange)#1 (4) {

["start":protected]=>

int(0)

["limit":protected]=>

int(9)

["step":protected]=>

int(1)

["current":protected]=>

NULL

}

另外,內存的占用情況也完全不同:

// range

$startMemory = memory_get_usage();

$arr = range(0, 500000);

echo 'range(): ', memory_get_usage() - $startMemory, " bytes\n";

unset($arr);

// xrange

$startMemory = memory_get_usage();

$arr = new Xrange(0, 500000);

echo 'xrange(): ', memory_get_usage() - $startMemory, " bytes\n";

輸出:

xrange(): 624 bytes

range(): 72194784 bytes

range() 函數在執行后占用了 50W 個元素內存空間,而 xrange 對象在整個迭代過程中只占用一個對象的內存。

Yii2 Query

在喜聞樂見的各種 PHP 框架里有不少生成器的實例,比如 Yii2 中用來構建 SQL 語句的 \yii\db\Query 類:

$query = (new \yii\db\Query)->from('user');

// yii\db\BatchQueryResult

foreach ($query->batch() as $users) {

// 每次循環得到多條 user 記錄

}

來看一下 batch() 做了什么:

/**

* Starts a batch query.

*

* A batch query supports fetching data in batches, which can keep the memory usage under a limit.

* This method will return a [[BatchQueryResult]] object which implements the [[\Iterator]] interface

* and can be traversed to retrieve the data in batches.

*

* For example,

*

*

* $query = (new Query)->from('user');

* foreach ($query->batch() as $rows) {

* // $rows is an array of 10 or fewer rows from user table

* }

*

*

* @param integer $batchSize the number of records to be fetched in each batch.

* @param Connection $db the database connection. If not set, the "db" application component will be used.

* @return BatchQueryResult the batch query result. It implements the [[\Iterator]] interface

* and can be traversed to retrieve the data in batches.

*/

public function batch($batchSize = 100, $db = null)

{

return Yii::createObject([

'class' => BatchQueryResult::className(),

'query' => $this,

'batchSize' => $batchSize,

'db' => $db,

'each' => false,

]);

}

實際上返回了一個 BatchQueryResult 類,類的源碼實現了 Iterator 接口 5 個關鍵方法:

class BatchQueryResult extends Object implements \Iterator

{

public $db;

public $query;

public $batchSize = 100;

public $each = false;

private $_dataReader;

private $_batch;

private $_value;

private $_key;

/**

* Destructor.

*/

public function __destruct()

{

// make sure cursor is closed

$this->reset();

}

/**

* Resets the batch query.

* This method will clean up the existing batch query so that a new batch query can be performed.

*/

public function reset()

{

if ($this->_dataReader !== null) {

$this->_dataReader->close();

}

$this->_dataReader = null;

$this->_batch = null;

$this->_value = null;

$this->_key = null;

}

/**

* Resets the iterator to the initial state.

* This method is required by the interface [[\Iterator]].

*/

public function rewind()

{

$this->reset();

$this->next();

}

/**

* Moves the internal pointer to the next dataset.

* This method is required by the interface [[\Iterator]].

*/

public function next()

{

if ($this->_batch === null || !$this->each || $this->each && next($this->_batch) === false) {

$this->_batch = $this->fetchData();

reset($this->_batch);

}

if ($this->each) {

$this->_value = current($this->_batch);

if ($this->query->indexBy !== null) {

$this->_key = key($this->_batch);

} elseif (key($this->_batch) !== null) {

$this->_key++;

} else {

$this->_key = null;

}

} else {

$this->_value = $this->_batch;

$this->_key = $this->_key === null ? 0 : $this->_key + 1;

}

}

/**

* Fetches the next batch of data.

* @return array the data fetched

*/

protected function fetchData()

{

// ...

}

/**

* Returns the index of the current dataset.

* This method is required by the interface [[\Iterator]].

* @return integer the index of the current row.

*/

public function key()

{

return $this->_key;

}

/**

* Returns the current dataset.

* This method is required by the interface [[\Iterator]].

* @return mixed the current dataset.

*/

public function current()

{

return $this->_value;

}

/**

* Returns whether there is a valid dataset at the current position.

* This method is required by the interface [[\Iterator]].

* @return boolean whether there is a valid dataset at the current position.

*/

public function valid()

{

return !empty($this->_batch);

}

}

以迭代器的方式實現了類似分頁取的效果,同時避免了一次性取出所有數據占用太多的內存空間。

迭代器使用場景

使用返回迭代器的包或庫時(如 PHP5 中的 SPL 迭代器)

無法在一次調用獲取所需的所有元素時

要處理數量巨大的元素時(數據庫中要處理的結果集內容超過內存)

...

生成器

需要 PHP 5 >= 5.5.0 或 PHP 7

雖然迭代器僅需繼承接口即可實現,但畢竟需要定義一整個類然后實現接口的所有方法,實在是不怎么方便。

生成器則提供了一種更簡單的方式來實現簡單的對象迭代,相比定義類來實現 Iterator 接口的方式,性能開銷和復雜度大大降低。

生成器允許在 foreach 代碼塊中迭代一組數據而不需要創建任何數組。一個生成器函數,就像一個普通的有返回值的自定義函數類似,但普通函數只返回一次, 而生成器可以根據需要通過 yield 關鍵字返回多次,以便連續生成需要迭代返回的值。

一個最簡單的例子就是使用生成器來重新實現 xrange() 函數。效果和上面我們用迭代器實現的差不多,但實現起來要簡單的多。

生成器實現 xrange 函數

function xrange($start, $limit, $step = 1) {

for ($i = 0; $i < $limit; $i += $step) {

yield $i + 1 => $i;

}

}

foreach (xrange(0, 9) as $key => $val) {

printf("%d %d \n", $key, $val);

}

// 輸出

// 1 0

// 2 1

// 3 2

// 4 3

// 5 4

// 6 5

// 7 6

// 8 7

// 9 8

實際上生成器生成的正是一個迭代器對象實例,該迭代器對象繼承了 Iterator 接口,同時也包含了生成器對象自有的接口,具體可以參考 Generator 類的定義以及語法參考。

同時需要注意的是:

一個生成器不可以返回值,這樣做會產生一個編譯錯誤。然而 return 空是一個有效的語法并且它將會終止生成器繼續執行。

yield 關鍵字

需要注意的是 yield 關鍵字,這是生成器的關鍵。通過上面的例子可以看出,yield 會將當前產生的值傳遞給 foreach,換句話說,foreach 每一次迭代過程都會從 yield 處取一個值,直到整個遍歷過程不再能執行到 yield 時遍歷結束,此時生成器函數簡單的退出,而調用生成器的上層代碼還可以繼續執行,就像一個數組已經被遍歷完了。

yield 最簡單的調用形式看起來像一個 return 申明,不同的是 yield 暫停當前過程的執行并返回值,而 return 是中斷當前過程并返回值。暫停當前過程,意味著將處理權轉交由上一級繼續進行,直到上一級再次調用被暫停的過程,該過程又會從上一次暫停的位置繼續執行。這像是什么呢?如果之前已經在鳥哥的文章中粗略看過,應該知道這很像操作系統的進程調度,多個進程在一個 CPU 核心上執行,在系統調度下每一個進程執行一段指令就被暫停,切換到下一個進程,這樣外部用戶看起來就像是同時在執行多個任務。

但僅僅如此還不夠,yield 除了可以返回值以外,還能接收值,也就是可以在兩個層級間實現雙向通信。

來看看如何傳遞一個值給 yield:

function printer()

{

while (true) {

printf("receive: %s\n", yield);

}

}

$printer = printer();

$printer->send('hello');

$printer->send('world');

// 輸出

receive: hello

receive: world

根據 PHP 官方文檔的描述可以知道 Generator 對象除了實現 Iterator 接口中的必要方法以外,還有一個 send 方法,這個方法就是向 yield 語句處傳遞一個值,同時從 yield 語句處繼續執行,直至再次遇到 yield 后控制權回到外部。

既然 yield 可以在其位置中斷并返回或者接收一個值,那能不能同時進行接收和返回呢?當然,這也是實現協程的根本。對上述代碼做出修改:

function printer()

{

$i = 0;

while (true) {

printf("receive: %s\n", (yield ++$i));

}

}

$printer = printer();

printf("%d\n", $printer->current());

$printer->send('hello');

printf("%d\n", $printer->current());

$printer->send('world');

printf("%d\n", $printer->current());

// 輸出

1

receive: hello

2

receive: world

3

這是另一個例子:

function gen() {

$ret = (yield 'yield1');

var_dump($ret);

$ret = (yield 'yield2');

var_dump($ret);

}

$gen = gen();

var_dump($gen->current()); // string(6) "yield1"

var_dump($gen->send('ret1')); // string(4) "ret1" (第一個 var_dump)

// string(6) "yield2" (繼續執行到第二個 yield,吐出了返回值)

var_dump($gen->send('ret2')); // string(4) "ret2" (第二個 var_dump)

// NULL (var_dump 之后沒有其他語句,所以這次 ->send() 的返回值為 null)

current 方法是迭代器 Iterator 接口必要的方法,foreach 語句每一次迭代都會通過其獲取當前值,而后調用迭代器的 next 方法。在上述例子里則是手動調用了 current 方法獲取值。

上述例子已經足以表示 yield 能夠作為實現雙向通信的工具,也就是具備了后續實現協程的基本條件。

上面的例子如果第一次接觸并稍加思考,不免會疑惑為什么一個 yield 既是語句又是表達式,而且這兩種情況還同時存在:

對于所有在生成器函數中出現的 yield,首先它都是語句,而跟在 yield 后面的任何表達式的值將作為調用生成器函數的返回值,如果 yield 后面沒有任何表達式(變量、常量都是表達式),那么它會返回 NULL,這一點和 return 語句一致。

yield 也是表達式,它的值就是 send 函數傳過來的值(相當于一個特殊變量,只不過賦值是通過 send 函數進行的)。只要調用send方法,并且生成器對象的迭代并未終結,那么當前位置的 yield 就會得到 send 方法傳遞過來的值,這和生成器函數有沒有把這個值賦值給某個變量沒有任何關系。

這個地方可能需要仔細品味上面兩個 send() 方法的例子才能理解。但可以簡單的記住:

任何時候 yield 關鍵詞即是語句:可以為生成器函數返回值;

也是表達式:可以接收生成器對象發過來的值。

除了 send() 方法,還有一種控制生成器執行的方法是 next() 函數:

Next(),恢復生成器函數的執行直到下一個 yield

Send(),向生成器傳入一個值,恢復執行直到下一個 yield

協程

對于單核處理器,多進程實現多任務的原理是讓操作系統給一個任務每次分配一定的 CPU 時間片,然后中斷、讓下一個任務執行一定的時間片接著再中斷并繼續執行下一個,如此反復。由于切換執行任務的速度非常快,給外部用戶的感受就是多個任務的執行是同時進行的。

多進程的調度是由操作系統來實現的,進程自身不能控制自己何時被調度,也就是說:

進程的調度是由外層調度器搶占式實現的

而協程要求當前正在運行的任務自動把控制權回傳給調度器,這樣就可以繼續運行其他任務。這與『搶占式』的多任務正好相反, 搶占多任務的調度器可以強制中斷正在運行的任務, 不管它自己有沒有意愿。『協作式多任務』在 Windows 的早期版本 (windows95) 和 Mac OS 中有使用, 不過它們后來都切換到『搶占式多任務』了。理由相當明確:如果僅依靠程序自動交出控制的話,那么一些惡意程序將會很容易占用全部 CPU 時間而不與其他任務共享。

協程的調度是由協程自身主動讓出控制權到外層調度器實現的

回到剛才生成器實現 xrange 函數的例子,整個執行過程的交替可以用下圖來表示:

image.png

協程可以理解為純用戶態的線程,通過協作而不是搶占來進行任務切換。相對于進程或者線程,協程所有的操作都可以在用戶態而非操作系統內核態完成,創建和切換的消耗非常低。

簡單的說 Coroutine(協程) 就是提供一種方法來中斷當前任務的執行,保存當前的局部變量,下次再過來又可以恢復當前局部變量繼續執行。

我們可以把大任務拆分成多個小任務輪流執行,如果有某個小任務在等待系統 IO,就跳過它,執行下一個小任務,這樣往復調度,實現了 IO 操作和 CPU 計算的并行執行,總體上就提升了任務的執行效率,這也便是協程的意義。

PHP 協程和 yield

PHP 從 5.5 開始支持生成器及 yield 關鍵字,而 PHP 協程則由 yield 來實現。

要理解協程,首先要理解:代碼是代碼,函數是函數。函數包裹的代碼賦予了這段代碼附加的意義:不管是否顯式的指明返回值,當函數內的代碼塊執行完后都會返回到調用層。而當調用層調用某個函數的時候,必須等這個函數返回,當前函數才能繼續執行,這就構成了后進先出,也就是 Stack。

而協程包裹的代碼,不是函數,不完全遵守函數的附加意義,協程執行到某個點,協會協程會 yield 返回一個值然后掛起,而不是 return 一個值然后結束,當再次調用協程的時候,會在上次 yield 的點繼續執行。

所以協程違背了通常操作系統和 x86 的 CPU 認定的代碼執行方式,也就是 Stack 的這種執行方式,需要運行環境(比如 php,python 的 yield 和 golang 的 goroutine)自己調度,來實現任務的中斷和恢復,具體到 PHP,就是靠 yield 來實現。

堆棧式調用 和 協程調用的對比:

image.png

結合之前的例子,可以總結一下 yield 能做的就是:

實現不同任務間的主動讓位、讓行,把控制權交回給任務調度器。

通過 send() 實現不同任務間的雙向通信,也就可以實現任務和調度器之間的通信。

yield 就是 PHP 實現協程的方式。

協程多任務調度

首先是一個任務類:

Task

class Task

{

// 任務 ID

protected $taskId;

// 協程對象

protected $coroutine;

// send() 值

protected $sendVal = null;

// 是否首次 yield

protected $beforeFirstYield = true;

public function __construct($taskId, Generator $coroutine) {

$this->taskId = $taskId;

$this->coroutine = $coroutine;

}

public function getTaskId() {

return $this->taskId;

}

public function setSendValue($sendVal) {

$this->sendVal = $sendVal;

}

public function run() {

// 如之前提到的在send之前, 當迭代器被創建后第一次 yield 之前,一個 renwind() 方法會被隱式調用

// 所以實際上發生的應該類似:

// $this->coroutine->rewind();

// $this->coroutine->send();

// 這樣 renwind 的執行將會導致第一個 yield 被執行, 并且忽略了他的返回值.

// 真正當我們調用 yield 的時候, 我們得到的是第二個yield的值,導致第一個yield的值被忽略。

// 所以這個加上一個是否第一次 yield 的判斷來避免這個問題

if ($this->beforeFirstYield) {

$this->beforeFirstYield = false;

return $this->coroutine->current();

} else {

$retval = $this->coroutine->send($this->sendVal);

$this->sendVal = null;

return $retval;

}

}

public function isFinished() {

return !$this->coroutine->valid();

}

}

接下來是調度器,比 foreach 是要復雜一點,但好歹也能算個正兒八經的 Scheduler :)

Scheduler

class Scheduler

{

protected $maxTaskId = 0;

protected $taskMap = []; // taskId => task

protected $taskQueue;

public function __construct() {

$this->taskQueue = new SplQueue();

}

// (使用下一個空閑的任務id)創建一個新任務,然后把這個任務放入任務map數組里. 接著它通過把任務放入任務隊列里來實現對任務的調度. 接著run()方法掃描任務隊列, 運行任務.如果一個任務結束了, 那么它將從隊列里刪除, 否則它將在隊列的末尾再次被調度。

public function newTask(Generator $coroutine) {

$tid = ++$this->maxTaskId;

$task = new Task($tid, $coroutine);

$this->taskMap[$tid] = $task;

$this->schedule($task);

return $tid;

}

public function schedule(Task $task) {

// 任務入隊

$this->queue->enqueue($task);

}

public function run() {

while (!$this->queue->isEmpty()) {

// 任務出隊

$task = $this->queue->dequeue();

$task->run();

if ($task->isFinished()) {

unset($this->taskMap[$task->getTaskId()]);

} else {

$this->schedule($task);

}

}

}

}

隊列可以使每個任務獲得同等的 CPU 使用時間,

Demo

function task1() {

for ($i = 1; $i <= 10; ++$i) {

echo "This is task 1 iteration $i.\n";

yield;

}

}

function task2() {

for ($i = 1; $i <= 5; ++$i) {

echo "This is task 2 iteration $i.\n";

yield;

}

}

$scheduler = new Scheduler;

$scheduler->newTask(task1());

$scheduler->newTask(task2());

$scheduler->run();

輸出:

This is task 1 iteration 1.

This is task 2 iteration 1.

This is task 1 iteration 2.

This is task 2 iteration 2.

This is task 1 iteration 3.

This is task 2 iteration 3.

This is task 1 iteration 4.

This is task 2 iteration 4.

This is task 1 iteration 5.

This is task 2 iteration 5.

This is task 1 iteration 6.

This is task 1 iteration 7.

This is task 1 iteration 8.

This is task 1 iteration 9.

This is task 1 iteration 10.

結果正是我們期待的,最初的 5 次迭代,兩個任務是交替進行的,而在第二個任務結束后,只有第一個任務繼續執行到結束。

協程非阻塞 IO

若想真正的發揮出協程的作用,那一定是在一些涉及到阻塞 IO 的場景,我們都知道 Web 服務器最耗時的部分通常都是 socket 讀取數據等操作上,如果進程對每個請求都掛起的等待 IO 操作,那處理效率就太低了,接下來我們看個支持非阻塞 IO 的 Scheduler:

class Scheduler

{

protected $maxTaskId = 0;

protected $tasks = []; // taskId => task

protected $queue;

// resourceID => [socket, tasks]

protected $waitingForRead = [];

protected $waitingForWrite = [];

public function __construct() {

// SPL 隊列

$this->queue = new SplQueue();

}

public function newTask(Generator $coroutine) {

$tid = ++$this->maxTaskId;

$task = new Task($tid, $coroutine);

$this->tasks[$tid] = $task;

$this->schedule($task);

return $tid;

}

public function schedule(Task $task) {

// 任務入隊

$this->queue->enqueue($task);

}

public function run() {

while (!$this->queue->isEmpty()) {

// 任務出隊

$task = $this->queue->dequeue();

$task->run();

if ($task->isFinished()) {

unset($this->tasks[$task->getTaskId()]);

} else {

$this->schedule($task);

}

}

}

public function waitForRead($socket, Task $task)

{

if (isset($this->waitingForRead[(int)$socket])) {

$this->waitingForRead[(int)$socket][1][] = $task;

} else {

$this->waitingForRead[(int)$socket] = [$socket, [$task]];

}

}

public function waitForWrite($socket, Task $task)

{

if (isset($this->waitingForWrite[(int)$socket])) {

$this->waitingForWrite[(int)$socket][1][] = $task;

} else {

$this->waitingForWrite[(int)$socket] = [$socket, [$task]];

}

}

/**

* @param $timeout 0 represent

*/

protected function ioPoll($timeout)

{

$rSocks = [];

foreach ($this->waitingForRead as list($socket)) {

$rSocks[] = $socket;

}

$wSocks = [];

foreach ($this->waitingForWrite as list($socket)) {

$wSocks[] = $socket;

}

$eSocks = [];

// $timeout 為 0 時, stream_select 為立即返回,為 null 時則會阻塞的等,見 http://php.net/manual/zh/function.stream-select.php

if (!@stream_select($rSocks, $wSocks, $eSocks, $timeout)) {

return;

}

foreach ($rSocks as $socket) {

list(, $tasks) = $this->waitingForRead[(int)$socket];

unset($this->waitingForRead[(int)$socket]);

foreach ($tasks as $task) {

$this->schedule($task);

}

}

foreach ($wSocks as $socket) {

list(, $tasks) = $this->waitingForWrite[(int)$socket];

unset($this->waitingForWrite[(int)$socket]);

foreach ($tasks as $task) {

$this->schedule($task);

}

}

}

/**

* 檢查隊列是否為空,若為空則掛起的執行 stream_select,否則檢查完 IO 狀態立即返回,詳見 ioPoll()

* 作為任務加入隊列后,由于 while true,會被一直重復的加入任務隊列,實現每次任務前檢查 IO 狀態

* @return Generator object for newTask

*

*/

protected function ioPollTask()

{

while (true) {

if ($this->taskQueue->isEmpty()) {

$this->ioPoll(null);

} else {

$this->ioPoll(0);

}

yield;

}

}

/**

* $scheduler = new Scheduler;

* $scheduler->newTask(Web Server Generator);

* $scheduler->withIoPoll()->run();

*

* 新建 Web Server 任務后先執行 withIoPoll() 將 ioPollTask() 作為任務入隊

*

* @return $this

*/

public function withIoPoll()

{

$this->newTask($this->ioPollTask());

return $this;

}

}

這個版本的 Scheduler 里加入一個永不退出的任務,并且通過 stream_select 支持的特性來實現快速的來回檢查各個任務的 IO 狀態,只有 IO 完成的任務才會繼續執行,而 IO 還未完成的任務則會跳過,完整的代碼和例子可以戳這里。

也就是說任務交替執行的過程中,一旦遇到需要 IO 的部分,調度器就會把 CPU 時間分配給不需要 IO 的任務,等到當前任務遇到 IO 或者之前的任務 IO 結束才再次調度 CPU 時間,以此實現 CPU 和 IO 并行來提升執行效率,類似下圖:

image.png

單任務改造

如果想將一個單進程任務改造成并發執行,我們可以選擇改造成多進程或者協程:

多進程,不改變任務執行的整體過程,在一個時間段內同時執行多個相同的代碼段,調度權在 CPU,如果一個任務能獨占一個 CPU 則可以實現并行。

協程,把原有任務拆分成多個小任務,原有任務的執行流程被改變,調度權在進程自己,如果有 IO 并且可以實現異步,則可以實現并行。

多進程改造

image.png

協程改造

image.png

協程(Coroutines)和 Go 協程(Goroutines)

PHP 的協程或者其他語言中,比如 Python、Lua 等都有協程的概念,和 Go 協程有些相似,不過有兩點不同:

Go 協程意味著并行(或者可以以并行的方式部署,可以用 runtime.GOMAXPROCS() 指定可同時使用的 CPU 個數),協程一般來說只是并發。

Go 協程通過通道 channel 來通信;協程通過 yield 讓出和恢復操作來通信。

Go 協程比普通協程更強大,也很容易從協程的邏輯復用到 Go 協程,而且在 Go 的開發中也使用的極為普遍,有興趣的話可以了解一下作為對比。

結束

個人感覺 PHP 的協程在實際使用中想要徒手實現和應用并不方便而且場景有限,但了解其概念及實現原理對更好的理解并發不無裨益。

如果想更多的了解協程的實際應用場景不妨試試已經大名鼎鼎的 Swoole,其對多種協議的 client 做了底層的協程封裝,幾乎可以做到以同步編程的寫法實現協程異步 IO 的效果。

參考

關注 NewtonIO - 創造者們的技術與工具

image.png

總結

以上是生活随笔為你收集整理的coroutine php_PHP 协程实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

午夜时刻免费入口 | 未满小14洗澡无码视频网站 | 亚洲中文字幕va福利 | www国产亚洲精品久久网站 | 久久久久se色偷偷亚洲精品av | 亚洲区小说区激情区图片区 | 精品乱码久久久久久久 | 性欧美牲交xxxxx视频 | 亚洲中文字幕在线观看 | 美女毛片一区二区三区四区 | 久9re热视频这里只有精品 | 一个人看的www免费视频在线观看 | 女人被爽到呻吟gif动态图视看 | 欧美日韩人成综合在线播放 | 日韩 欧美 动漫 国产 制服 | 亚洲中文字幕成人无码 | 亚洲 另类 在线 欧美 制服 | 国产成人精品视频ⅴa片软件竹菊 | 久久zyz资源站无码中文动漫 | 丝袜 中出 制服 人妻 美腿 | 免费视频欧美无人区码 | 无码精品人妻一区二区三区av | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲а∨天堂久久精品2021 | 久久久久久久女国产乱让韩 | 俺去俺来也www色官网 | 一本久久伊人热热精品中文字幕 | 99久久久无码国产精品免费 | 中文字幕无码视频专区 | 99久久婷婷国产综合精品青草免费 | 成人精品天堂一区二区三区 | 久久成人a毛片免费观看网站 | 97无码免费人妻超级碰碰夜夜 | 国产另类ts人妖一区二区 | 国产无套粉嫩白浆在线 | 疯狂三人交性欧美 | www国产亚洲精品久久久日本 | 熟妇人妻无乱码中文字幕 | 色老头在线一区二区三区 | 亚洲日韩一区二区 | 国产精品嫩草久久久久 | 无码国产乱人伦偷精品视频 | 国产精品无码永久免费888 | 久久久亚洲欧洲日产国码αv | 鲁一鲁av2019在线 | 少妇厨房愉情理9仑片视频 | 18精品久久久无码午夜福利 | 99精品视频在线观看免费 | 中文字幕精品av一区二区五区 | 少妇人妻av毛片在线看 | 东京热无码av男人的天堂 | 狂野欧美性猛交免费视频 | 久久午夜无码鲁丝片秋霞 | 麻花豆传媒剧国产免费mv在线 | 国产明星裸体无码xxxx视频 | 国产精品理论片在线观看 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲人成网站色7799 | 99久久人妻精品免费二区 | 久久精品人妻少妇一区二区三区 | 国产精品亚洲一区二区三区喷水 | 久久久国产精品无码免费专区 | 国产成人av免费观看 | 亚洲乱码国产乱码精品精 | 人妻尝试又大又粗久久 | 国产人妻精品午夜福利免费 | 一本精品99久久精品77 | 国产在线一区二区三区四区五区 | 亚洲 日韩 欧美 成人 在线观看 | 午夜肉伦伦影院 | 美女极度色诱视频国产 | 日本丰满熟妇videos | 久久精品国产一区二区三区 | 午夜时刻免费入口 | 中文字幕无码日韩欧毛 | 捆绑白丝粉色jk震动捧喷白浆 | 少妇一晚三次一区二区三区 | 免费乱码人妻系列无码专区 | 领导边摸边吃奶边做爽在线观看 | 激情综合激情五月俺也去 | 亚洲 日韩 欧美 成人 在线观看 | yw尤物av无码国产在线观看 | 又大又紧又粉嫩18p少妇 | 一二三四在线观看免费视频 | 暴力强奷在线播放无码 | 久久97精品久久久久久久不卡 | 中文字幕人成乱码熟女app | 成人综合网亚洲伊人 | 综合激情五月综合激情五月激情1 | 久久精品人人做人人综合试看 | 高潮毛片无遮挡高清免费 | 亚洲小说图区综合在线 | 精品一二三区久久aaa片 | 亚洲精品成人福利网站 | 中文久久乱码一区二区 | 熟女少妇在线视频播放 | 国产va免费精品观看 | 免费视频欧美无人区码 | 日本精品高清一区二区 | 天堂一区人妻无码 | 精品人妻人人做人人爽夜夜爽 | 亚洲国产精品毛片av不卡在线 | 久久久久成人精品免费播放动漫 | 欧美激情综合亚洲一二区 | 欧美成人家庭影院 | 久久久久99精品国产片 | 国产97色在线 | 免 | 国产亚洲日韩欧美另类第八页 | 亚洲乱亚洲乱妇50p | 一本无码人妻在中文字幕免费 | 国产精品久久久久久亚洲影视内衣 | 男女猛烈xx00免费视频试看 | 香港三级日本三级妇三级 | 国产疯狂伦交大片 | 搡女人真爽免费视频大全 | 欧美日韩在线亚洲综合国产人 | 性欧美videos高清精品 | 欧美日韩色另类综合 | 性生交大片免费看l | 奇米影视888欧美在线观看 | 无套内谢的新婚少妇国语播放 | 少妇无码av无码专区在线观看 | 四虎永久在线精品免费网址 | 成人影院yy111111在线观看 | 色欲人妻aaaaaaa无码 | 精品一区二区不卡无码av | 熟妇激情内射com | 九月婷婷人人澡人人添人人爽 | 国产精品美女久久久久av爽李琼 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产sm调教视频在线观看 | 精品国产福利一区二区 | 婷婷综合久久中文字幕蜜桃三电影 | 国产网红无码精品视频 | 国产麻豆精品一区二区三区v视界 | 无码人妻丰满熟妇区毛片18 | 亚洲最大成人网站 | 国产网红无码精品视频 | 久久精品人人做人人综合试看 | 久久久久免费精品国产 | 99精品无人区乱码1区2区3区 | 国产成人亚洲综合无码 | 欧美自拍另类欧美综合图片区 | 亚洲一区二区三区偷拍女厕 | 亚洲理论电影在线观看 | 久久久精品欧美一区二区免费 | 精品国产一区二区三区四区在线看 | 乱人伦人妻中文字幕无码久久网 | 久久精品一区二区三区四区 | 亚洲天堂2017无码中文 | 亚洲爆乳无码专区 | 欧美怡红院免费全部视频 | 成人一区二区免费视频 | 国产内射老熟女aaaa | 未满小14洗澡无码视频网站 | 国产精品-区区久久久狼 | 天堂亚洲免费视频 | 成年女人永久免费看片 | 亚洲精品一区二区三区四区五区 | 国精产品一区二区三区 | 蜜桃臀无码内射一区二区三区 | 一个人看的www免费视频在线观看 | 水蜜桃色314在线观看 | 国产人妻人伦精品1国产丝袜 | 女人被男人躁得好爽免费视频 | 人人妻在人人 | 激情五月综合色婷婷一区二区 | 中国大陆精品视频xxxx | av在线亚洲欧洲日产一区二区 | 在线欧美精品一区二区三区 | 色窝窝无码一区二区三区色欲 | 国内精品久久久久久中文字幕 | 亚洲日本一区二区三区在线 | 无码人妻丰满熟妇区毛片18 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久亚洲精品中文字幕无男同 | 老熟女重囗味hdxx69 | 免费网站看v片在线18禁无码 | 国产精品怡红院永久免费 | 初尝人妻少妇中文字幕 | 内射后入在线观看一区 | 成人精品天堂一区二区三区 | 国产成人综合在线女婷五月99播放 | 久久久久av无码免费网 | 国产精品va在线播放 | 国产性生大片免费观看性 | 狠狠综合久久久久综合网 | 国产无av码在线观看 | 国产精品无码永久免费888 | 男人扒开女人内裤强吻桶进去 | 国产黄在线观看免费观看不卡 | 久久久久久久人妻无码中文字幕爆 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产乡下妇女做爰 | 国产成人无码区免费内射一片色欲 | 国产av无码专区亚洲a∨毛片 | 桃花色综合影院 | 国产午夜亚洲精品不卡下载 | 99riav国产精品视频 | 国产亚洲精品久久久闺蜜 | 亚洲色无码一区二区三区 | 久精品国产欧美亚洲色aⅴ大片 | 全球成人中文在线 | 西西人体www44rt大胆高清 | 亚洲国产av精品一区二区蜜芽 | 日韩精品一区二区av在线 | 奇米影视7777久久精品人人爽 | 亚欧洲精品在线视频免费观看 | 人人妻人人澡人人爽精品欧美 | 久激情内射婷内射蜜桃人妖 | 亚洲色www成人永久网址 | 久久亚洲国产成人精品性色 | 老头边吃奶边弄进去呻吟 | 亚洲日韩中文字幕在线播放 | 国产午夜亚洲精品不卡下载 | 亚洲精品久久久久久久久久久 | 日韩av无码一区二区三区不卡 | 女人高潮内射99精品 | 免费无码av一区二区 | 国产精品无码成人午夜电影 | 国产成人一区二区三区别 | 亚洲第一无码av无码专区 | 精品厕所偷拍各类美女tp嘘嘘 | www国产亚洲精品久久网站 | 国产亚洲精品久久久ai换 | 亚洲第一无码av无码专区 | 国产激情无码一区二区 | 奇米影视7777久久精品人人爽 | 一本色道久久综合狠狠躁 | 丝袜足控一区二区三区 | 色一情一乱一伦 | 思思久久99热只有频精品66 | 正在播放东北夫妻内射 | 国产精品怡红院永久免费 | 国产精品99久久精品爆乳 | 超碰97人人做人人爱少妇 | 国产网红无码精品视频 | 国产亚洲精品久久久久久国模美 | 初尝人妻少妇中文字幕 | 国产精品丝袜黑色高跟鞋 | 国产精品自产拍在线观看 | 999久久久国产精品消防器材 | 亚洲欧洲无卡二区视頻 | 青青久在线视频免费观看 | 少妇无码av无码专区在线观看 | 四虎4hu永久免费 | 性生交大片免费看女人按摩摩 | а√天堂www在线天堂小说 | 国产精品久久久一区二区三区 | 麻豆av传媒蜜桃天美传媒 | 日日麻批免费40分钟无码 | 国产人成高清在线视频99最全资源 | 76少妇精品导航 | 嫩b人妻精品一区二区三区 | 性欧美疯狂xxxxbbbb | 亚洲欧洲无卡二区视頻 | 国模大胆一区二区三区 | 国产成人精品三级麻豆 | 国产69精品久久久久app下载 | 午夜福利一区二区三区在线观看 | 丰满少妇弄高潮了www | 欧美性黑人极品hd | 国产高清av在线播放 | 日本乱偷人妻中文字幕 | 成人一区二区免费视频 | 国产精品手机免费 | 色噜噜亚洲男人的天堂 | 免费看少妇作爱视频 | 久久国内精品自在自线 | 国产特级毛片aaaaaa高潮流水 | av无码电影一区二区三区 | 国产高清av在线播放 | 亚洲日韩一区二区三区 | 欧美放荡的少妇 | 日韩精品无码一本二本三本色 | 偷窥日本少妇撒尿chinese | 亚洲啪av永久无码精品放毛片 | 欧美精品无码一区二区三区 | 久久精品人人做人人综合试看 | 76少妇精品导航 | 久青草影院在线观看国产 | 无码人妻出轨黑人中文字幕 | 在线a亚洲视频播放在线观看 | аⅴ资源天堂资源库在线 | 精品无码一区二区三区爱欲 | 中文亚洲成a人片在线观看 | 国产激情精品一区二区三区 | 国产成人午夜福利在线播放 | 国产av久久久久精东av | 国产免费无码一区二区视频 | 麻豆国产97在线 | 欧洲 | 熟妇女人妻丰满少妇中文字幕 | 亚洲欧美精品aaaaaa片 | 漂亮人妻洗澡被公强 日日躁 | 久久综合九色综合欧美狠狠 | 亚洲精品无码国产 | 夜夜高潮次次欢爽av女 | 久久久久成人精品免费播放动漫 | 天天拍夜夜添久久精品大 | 国产成人久久精品流白浆 | 欧美高清在线精品一区 | 无码人妻丰满熟妇区毛片18 | 精品国产福利一区二区 | 成人无码精品1区2区3区免费看 | 人妻插b视频一区二区三区 | 成人无码影片精品久久久 | 久久久久人妻一区精品色欧美 | 人妻尝试又大又粗久久 | 国产激情综合五月久久 | 亚洲爆乳无码专区 | 免费人成网站视频在线观看 | 日日碰狠狠丁香久燥 | 一本久道久久综合婷婷五月 | 伦伦影院午夜理论片 | 国产av无码专区亚洲awww | 无码av最新清无码专区吞精 | 亚洲国产成人av在线观看 | 亚洲熟妇色xxxxx欧美老妇 | 色情久久久av熟女人妻网站 | 国产高清不卡无码视频 | 国产精品久久福利网站 | 日韩精品无码一本二本三本色 | 国产乱人伦偷精品视频 | 国产成人无码一二三区视频 | 一区二区三区高清视频一 | 亚洲中文字幕va福利 | 最近中文2019字幕第二页 | 亚洲无人区午夜福利码高清完整版 | 亚洲啪av永久无码精品放毛片 | 99久久精品日本一区二区免费 | 国产精品自产拍在线观看 | 色婷婷香蕉在线一区二区 | 色噜噜亚洲男人的天堂 | 超碰97人人做人人爱少妇 | 国产av久久久久精东av | 欧美三级不卡在线观看 | 国产精品永久免费视频 | 天天综合网天天综合色 | 久久精品无码一区二区三区 | 精品久久久久久亚洲精品 | 人人妻在人人 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 亚洲毛片av日韩av无码 | 三上悠亚人妻中文字幕在线 | 久久久久se色偷偷亚洲精品av | 四虎国产精品一区二区 | 国产亚洲精品久久久闺蜜 | 东京热男人av天堂 | 婷婷综合久久中文字幕蜜桃三电影 | 人人妻人人澡人人爽欧美一区 | 亚洲中文字幕av在天堂 | 激情综合激情五月俺也去 | 国产做国产爱免费视频 | 久久婷婷五月综合色国产香蕉 | 少妇被黑人到高潮喷出白浆 | 图片区 小说区 区 亚洲五月 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲国产成人a精品不卡在线 | 日韩av无码一区二区三区 | 久久久久成人精品免费播放动漫 | 丰满少妇熟乱xxxxx视频 | 麻豆国产丝袜白领秘书在线观看 | 日本xxxx色视频在线观看免费 | 亚洲国产欧美国产综合一区 | 精品少妇爆乳无码av无码专区 | 天堂一区人妻无码 | 草草网站影院白丝内射 | 日韩人妻少妇一区二区三区 | 中文无码成人免费视频在线观看 | 永久黄网站色视频免费直播 | 日本一本二本三区免费 | 亚洲日韩av片在线观看 | 国内精品人妻无码久久久影院蜜桃 | 国产亚洲精品久久久久久国模美 | 色欲久久久天天天综合网精品 | 学生妹亚洲一区二区 | 扒开双腿疯狂进出爽爽爽视频 | 精品国产一区av天美传媒 | 麻豆果冻传媒2021精品传媒一区下载 | 精品久久久久久人妻无码中文字幕 | 无码播放一区二区三区 | 国产精品va在线播放 | 亚洲中文字幕成人无码 | 国产一区二区三区四区五区加勒比 | 中文字幕中文有码在线 | 久久久婷婷五月亚洲97号色 | 久久99精品国产麻豆蜜芽 | 亚洲色大成网站www | 国产成人无码a区在线观看视频app | 亚洲乱亚洲乱妇50p | 任你躁国产自任一区二区三区 | 人妻少妇被猛烈进入中文字幕 | 狂野欧美激情性xxxx | 又大又黄又粗又爽的免费视频 | 十八禁真人啪啪免费网站 | аⅴ资源天堂资源库在线 | 性生交大片免费看l | 日韩欧美中文字幕在线三区 | 中文无码成人免费视频在线观看 | 国产精品久久久 | 久久99精品久久久久久 | 乱人伦人妻中文字幕无码久久网 | 亚洲午夜久久久影院 | 亚洲男人av天堂午夜在 | 午夜精品一区二区三区在线观看 | 国产成人一区二区三区在线观看 | 蜜桃av抽搐高潮一区二区 | 丰满人妻一区二区三区免费视频 | 国产真实乱对白精彩久久 | 亚洲成熟女人毛毛耸耸多 | 欧美国产日韩亚洲中文 | 99精品国产综合久久久久五月天 | 免费人成网站视频在线观看 | 日本肉体xxxx裸交 | 激情内射亚州一区二区三区爱妻 | 亚洲欧美日韩成人高清在线一区 | 综合人妻久久一区二区精品 | 又大又紧又粉嫩18p少妇 | 亚洲精品一区二区三区在线 | a片免费视频在线观看 | 久久综合网欧美色妞网 | 一区二区三区高清视频一 | 亚洲无人区一区二区三区 | 少妇高潮一区二区三区99 | 亚洲精品午夜国产va久久成人 | 成人免费视频一区二区 | 动漫av一区二区在线观看 | √天堂资源地址中文在线 | 欧美亚洲国产一区二区三区 | 久久久精品人妻久久影视 | 草草网站影院白丝内射 | 人人妻人人澡人人爽欧美一区九九 | 久久精品国产一区二区三区 | 亚洲精品中文字幕 | 国产激情无码一区二区app | 国产精品久久久午夜夜伦鲁鲁 | 人人爽人人澡人人高潮 | 97精品人妻一区二区三区香蕉 | 亚洲国产精品成人久久蜜臀 | 成年美女黄网站色大免费全看 | 又色又爽又黄的美女裸体网站 | 欧美阿v高清资源不卡在线播放 | 亚洲色欲色欲欲www在线 | 麻豆国产人妻欲求不满谁演的 | 欧美日韩视频无码一区二区三 | 婷婷丁香六月激情综合啪 | 日韩av无码中文无码电影 | 永久免费观看国产裸体美女 | 成人无码视频免费播放 | 国产电影无码午夜在线播放 | 十八禁真人啪啪免费网站 | 亚洲综合伊人久久大杳蕉 | 青青草原综合久久大伊人精品 | 精品久久久久香蕉网 | 欧美国产亚洲日韩在线二区 | 色综合久久网 | 日韩 欧美 动漫 国产 制服 | 欧美丰满老熟妇xxxxx性 | 久久久精品国产sm最大网站 | 无码国产乱人伦偷精品视频 | 麻豆国产人妻欲求不满谁演的 | 人妻少妇精品无码专区动漫 | 久久亚洲日韩精品一区二区三区 | 久久天天躁夜夜躁狠狠 | 亚洲熟悉妇女xxx妇女av | аⅴ资源天堂资源库在线 | 久久精品人妻少妇一区二区三区 | 男女性色大片免费网站 | 精品无码一区二区三区的天堂 | 成人欧美一区二区三区黑人 | 国产精品人人妻人人爽 | 国产精品视频免费播放 | 久久天天躁狠狠躁夜夜免费观看 | 国产一精品一av一免费 | 偷窥村妇洗澡毛毛多 | 午夜福利试看120秒体验区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 精品国产麻豆免费人成网站 | 天堂久久天堂av色综合 | 亚洲欧美日韩综合久久久 | 国产激情无码一区二区 | 精品国产国产综合精品 | 日韩亚洲欧美精品综合 | 欧美人妻一区二区三区 | а√资源新版在线天堂 | 在线欧美精品一区二区三区 | 久久久精品欧美一区二区免费 | 国产精品无码成人午夜电影 | 国产乱人偷精品人妻a片 | 久久久久免费看成人影片 | 日本va欧美va欧美va精品 | 国产激情艳情在线看视频 | 久久国语露脸国产精品电影 | 欧美肥老太牲交大战 | 亚洲成a人片在线观看日本 | 亚洲欧美国产精品久久 | 久久久中文久久久无码 | 中文字幕日韩精品一区二区三区 | 高清国产亚洲精品自在久久 | 午夜福利电影 | 性做久久久久久久久 | 国产精品办公室沙发 | 少妇无码一区二区二三区 | 欧美黑人乱大交 | 日产精品99久久久久久 | 老熟女乱子伦 | 日日橹狠狠爱欧美视频 | 日韩欧美中文字幕在线三区 | 国产成人无码区免费内射一片色欲 | 精品国产成人一区二区三区 | 亚洲无人区午夜福利码高清完整版 | 久久人人爽人人爽人人片ⅴ | 精品人妻人人做人人爽夜夜爽 | 国产精品爱久久久久久久 | 中国女人内谢69xxxxxa片 | 六十路熟妇乱子伦 | 日韩av无码一区二区三区 | 亚洲精品国偷拍自产在线麻豆 | 国产精品成人av在线观看 | 久久人人爽人人爽人人片ⅴ | 国产成人亚洲综合无码 | 国产免费久久久久久无码 | 国产av无码专区亚洲a∨毛片 | 亚洲国产精品成人久久蜜臀 | 99er热精品视频 | 国产精品久久精品三级 | 午夜福利不卡在线视频 | 欧美老妇交乱视频在线观看 | 成人欧美一区二区三区黑人 | 荫蒂被男人添的好舒服爽免费视频 | 久久久久久久久888 | 日韩精品a片一区二区三区妖精 | 欧美日本免费一区二区三区 | 无码人妻精品一区二区三区下载 | 欧美阿v高清资源不卡在线播放 | 秋霞成人午夜鲁丝一区二区三区 | 在线a亚洲视频播放在线观看 | 欧美日韩色另类综合 | 久久人人爽人人人人片 | 欧洲欧美人成视频在线 | 国产精品无码永久免费888 | 青青久在线视频免费观看 | 人妻少妇被猛烈进入中文字幕 | 99久久精品无码一区二区毛片 | 中文字幕无码免费久久9一区9 | 中文字幕+乱码+中文字幕一区 | 麻豆果冻传媒2021精品传媒一区下载 | 国产成人精品视频ⅴa片软件竹菊 | 国产人妻人伦精品 | 国产亚av手机在线观看 | 亚洲中文无码av永久不收费 | 伊人久久大香线蕉午夜 | 国产无套粉嫩白浆在线 | 久久亚洲精品中文字幕无男同 | 国产亚洲精品久久久久久大师 | 天天做天天爱天天爽综合网 | 亚洲精品国偷拍自产在线麻豆 | 国内老熟妇对白xxxxhd | 成人av无码一区二区三区 | 黑人大群体交免费视频 | 国产av一区二区精品久久凹凸 | 婷婷五月综合激情中文字幕 | 国产成人精品无码播放 | 天堂无码人妻精品一区二区三区 | 午夜精品久久久久久久 | 久久国产精品精品国产色婷婷 | 在线a亚洲视频播放在线观看 | 一本久久a久久精品亚洲 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲成av人综合在线观看 | 国产热a欧美热a在线视频 | 人妻中文无码久热丝袜 | 日本熟妇乱子伦xxxx | 亚洲国产成人a精品不卡在线 | 在线观看国产午夜福利片 | 成人动漫在线观看 | 国产精品久久久一区二区三区 | 亚洲精品国偷拍自产在线麻豆 | 欧美喷潮久久久xxxxx | 熟女少妇在线视频播放 | 国产午夜精品一区二区三区嫩草 | 国内揄拍国内精品人妻 | 18禁止看的免费污网站 | 亚洲熟妇色xxxxx欧美老妇y | 国产乱人无码伦av在线a | 999久久久国产精品消防器材 | 久久综合久久自在自线精品自 | 精品国产一区二区三区四区 | 精品 日韩 国产 欧美 视频 | 亚洲伊人久久精品影院 | 国产香蕉尹人综合在线观看 | 精品乱码久久久久久久 | 欧美黑人乱大交 | 秋霞成人午夜鲁丝一区二区三区 | 99久久精品日本一区二区免费 | 欧美喷潮久久久xxxxx | 色 综合 欧美 亚洲 国产 | 日本熟妇大屁股人妻 | 成人性做爰aaa片免费看 | 亚洲欧洲日本综合aⅴ在线 | 纯爱无遮挡h肉动漫在线播放 | 亚洲精品综合一区二区三区在线 | 大乳丰满人妻中文字幕日本 | 欧美 亚洲 国产 另类 | 兔费看少妇性l交大片免费 | 国产精品久久久久9999小说 | 亚洲中文字幕成人无码 | 亚洲人成网站在线播放942 | 久久精品国产日本波多野结衣 | 国产超碰人人爽人人做人人添 | 无码精品国产va在线观看dvd | 国产在线精品一区二区三区直播 | 日日干夜夜干 | 国产精品久久久久久无码 | 亚洲中文字幕成人无码 | 国产亚洲精品久久久久久久久动漫 | 日韩视频 中文字幕 视频一区 | 久在线观看福利视频 | 国产偷自视频区视频 | 黑人巨大精品欧美一区二区 | 久久精品成人欧美大片 | 欧美日韩综合一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 国产猛烈高潮尖叫视频免费 | 久久久无码中文字幕久... | 性欧美疯狂xxxxbbbb | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 天堂亚洲免费视频 | 国产超碰人人爽人人做人人添 | 妺妺窝人体色www婷婷 | 欧美熟妇另类久久久久久多毛 | 综合激情五月综合激情五月激情1 | 国产精品国产三级国产专播 | 水蜜桃av无码 | 国产精品久久久av久久久 | 天堂一区人妻无码 | 成人女人看片免费视频放人 | 乌克兰少妇xxxx做受 | 中文字幕中文有码在线 | 欧美国产日产一区二区 | 丰满人妻被黑人猛烈进入 | 熟妇女人妻丰满少妇中文字幕 | 2020久久香蕉国产线看观看 | 精品水蜜桃久久久久久久 | 中文字幕日产无线码一区 | 国产精品无码一区二区桃花视频 | 日本肉体xxxx裸交 | 欧美35页视频在线观看 | 国产亚洲精品久久久闺蜜 | 国产精品对白交换视频 | 99麻豆久久久国产精品免费 | 人人爽人人爽人人片av亚洲 | 久久久婷婷五月亚洲97号色 | 国产色视频一区二区三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲热妇无码av在线播放 | 亚洲人亚洲人成电影网站色 | 少妇邻居内射在线 | 女人高潮内射99精品 | 国产亲子乱弄免费视频 | 亚洲熟熟妇xxxx | 扒开双腿吃奶呻吟做受视频 | 好男人社区资源 | 日日摸夜夜摸狠狠摸婷婷 | 成人影院yy111111在线观看 | 丰满肥臀大屁股熟妇激情视频 | 国产精品资源一区二区 | 亚洲第一网站男人都懂 | 色欲综合久久中文字幕网 | 日产精品99久久久久久 | 国产人妻人伦精品1国产丝袜 | 成在人线av无码免费 | 国产成人无码午夜视频在线观看 | 免费观看又污又黄的网站 | 精品国产成人一区二区三区 | 成人免费视频视频在线观看 免费 | av无码不卡在线观看免费 | 亚洲日本一区二区三区在线 | 人人妻人人澡人人爽精品欧美 | 久久综合九色综合欧美狠狠 | 美女张开腿让人桶 | 色婷婷综合激情综在线播放 | 夫妻免费无码v看片 | 高潮毛片无遮挡高清免费视频 | 日韩欧美中文字幕公布 | 国产无遮挡又黄又爽免费视频 | 久久久中文久久久无码 | 成人免费视频一区二区 | 高清国产亚洲精品自在久久 | 97久久超碰中文字幕 | 中文字幕无码免费久久99 | 国产精品久久久久久久影院 | 又大又紧又粉嫩18p少妇 | 麻豆国产97在线 | 欧洲 | 国内揄拍国内精品少妇国语 | 亚洲精品欧美二区三区中文字幕 | 亚洲国产综合无码一区 | 精品水蜜桃久久久久久久 | 国产莉萝无码av在线播放 | 88国产精品欧美一区二区三区 | 理论片87福利理论电影 | 亚洲成色www久久网站 | 大肉大捧一进一出好爽视频 | 精品熟女少妇av免费观看 | 超碰97人人射妻 | 中文无码成人免费视频在线观看 | 久久亚洲精品成人无码 | 人人爽人人澡人人人妻 | 一二三四在线观看免费视频 | 东京热一精品无码av | 两性色午夜免费视频 | 一本色道婷婷久久欧美 | 伊人久久婷婷五月综合97色 | 日本www一道久久久免费榴莲 | 国产精品对白交换视频 | 日韩精品一区二区av在线 | 亚洲综合无码久久精品综合 | 日韩少妇白浆无码系列 | 日日摸天天摸爽爽狠狠97 | 国产电影无码午夜在线播放 | 人人澡人人妻人人爽人人蜜桃 | 久久综合香蕉国产蜜臀av | 中文字幕 人妻熟女 | 亚洲色无码一区二区三区 | 国产在热线精品视频 | 亚洲va中文字幕无码久久不卡 | 中文字幕+乱码+中文字幕一区 | 妺妺窝人体色www婷婷 | 久久午夜无码鲁丝片午夜精品 | 亚洲熟妇自偷自拍另类 | 天堂а√在线中文在线 | 在线播放亚洲第一字幕 | 性欧美牲交xxxxx视频 | 亚洲精品国产精品乱码视色 | 日韩在线不卡免费视频一区 | 日本成熟视频免费视频 | 曰韩无码二三区中文字幕 | 永久免费观看国产裸体美女 | 中文字幕无码日韩专区 | 小鲜肉自慰网站xnxx | 亚洲色大成网站www | 成人无码视频免费播放 | 天天燥日日燥 | 撕开奶罩揉吮奶头视频 | 国产亚洲欧美在线专区 | 东京一本一道一二三区 | av无码久久久久不卡免费网站 | 夜夜躁日日躁狠狠久久av | 又色又爽又黄的美女裸体网站 | 欧美黑人巨大xxxxx | 亚洲色欲色欲天天天www | 国产福利视频一区二区 | 全球成人中文在线 | 欧洲美熟女乱又伦 | 人人澡人人妻人人爽人人蜜桃 | 亚洲狠狠婷婷综合久久 | 久久99久久99精品中文字幕 | 18禁止看的免费污网站 | 欧美日韩一区二区免费视频 | 国产精品自产拍在线观看 | 国产9 9在线 | 中文 | 牲欲强的熟妇农村老妇女 | 内射白嫩少妇超碰 | 国产在线无码精品电影网 | 亚洲成a人片在线观看无码 | 午夜嘿嘿嘿影院 | 国产又粗又硬又大爽黄老大爷视 | 噜噜噜亚洲色成人网站 | 亚洲爆乳大丰满无码专区 | 久久99热只有频精品8 | 欧美肥老太牲交大战 | 日日躁夜夜躁狠狠躁 | 丰满人妻翻云覆雨呻吟视频 | 国内精品人妻无码久久久影院蜜桃 | 亚洲区欧美区综合区自拍区 | 中文字幕+乱码+中文字幕一区 | 亚洲综合久久一区二区 | 色老头在线一区二区三区 | 内射爽无广熟女亚洲 | 一区二区三区高清视频一 | 午夜时刻免费入口 | 狠狠综合久久久久综合网 | 亚洲狠狠色丁香婷婷综合 | 熟妇女人妻丰满少妇中文字幕 | 荡女精品导航 | 亚洲一区二区三区含羞草 | 欧美成人午夜精品久久久 | 性生交大片免费看l | 日韩成人一区二区三区在线观看 | 一二三四社区在线中文视频 | 国内综合精品午夜久久资源 | 久久久成人毛片无码 | 亚洲人成影院在线无码按摩店 | 97资源共享在线视频 | 欧美日韩久久久精品a片 | 国产sm调教视频在线观看 | 亚洲人成网站色7799 | 日本熟妇大屁股人妻 | 最近中文2019字幕第二页 | √8天堂资源地址中文在线 | 四虎国产精品免费久久 | 乌克兰少妇xxxx做受 | 久久国语露脸国产精品电影 | 国产精品免费大片 | 日日碰狠狠躁久久躁蜜桃 | 亚洲国产精品一区二区第一页 | 日本熟妇人妻xxxxx人hd | 久久亚洲a片com人成 | 天天做天天爱天天爽综合网 | 久久亚洲精品中文字幕无男同 | 精品无人区无码乱码毛片国产 | 亚洲国产精华液网站w | 少妇太爽了在线观看 | 无码成人精品区在线观看 | 18精品久久久无码午夜福利 | 麻豆精品国产精华精华液好用吗 | 国产精品爱久久久久久久 | 色老头在线一区二区三区 | 久久国语露脸国产精品电影 | 日本va欧美va欧美va精品 | 亚洲综合久久一区二区 | 成熟女人特级毛片www免费 | 国产无遮挡吃胸膜奶免费看 | 丰满少妇高潮惨叫视频 | 麻豆成人精品国产免费 | 免费乱码人妻系列无码专区 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产国产精品人在线视 | 无码福利日韩神码福利片 | 在线 国产 欧美 亚洲 天堂 | 97无码免费人妻超级碰碰夜夜 | 国产精品99爱免费视频 | 国产亚洲精品久久久ai换 | 亚洲毛片av日韩av无码 | 强辱丰满人妻hd中文字幕 | 99国产欧美久久久精品 | 欧美丰满熟妇xxxx | 久久精品国产大片免费观看 | 在线天堂新版最新版在线8 | 精品国产精品久久一区免费式 | 爆乳一区二区三区无码 | 伊人久久大香线蕉午夜 | 日日摸夜夜摸狠狠摸婷婷 | 国产麻豆精品一区二区三区v视界 | 草草网站影院白丝内射 | 精品欧美一区二区三区久久久 | 在线看片无码永久免费视频 | 精品偷拍一区二区三区在线看 | 国产午夜亚洲精品不卡下载 | 一本色道婷婷久久欧美 | 亚洲精品中文字幕 | 亚洲小说春色综合另类 | 图片小说视频一区二区 | 国产卡一卡二卡三 | 日韩无套无码精品 | 男女超爽视频免费播放 | 好爽又高潮了毛片免费下载 | 亚洲精品国产精品乱码视色 | 亚洲日韩精品欧美一区二区 | 久久精品丝袜高跟鞋 | 人妻无码久久精品人妻 | 欧美高清在线精品一区 | 东京热男人av天堂 | 亚洲熟悉妇女xxx妇女av | 国产亚洲欧美日韩亚洲中文色 | 人妻插b视频一区二区三区 | 国产办公室秘书无码精品99 | 亚洲色欲色欲欲www在线 | 漂亮人妻洗澡被公强 日日躁 | 无码国产激情在线观看 | 久久久成人毛片无码 | 亚洲精品久久久久中文第一幕 | 牲交欧美兽交欧美 | 亚洲精品综合一区二区三区在线 | 嫩b人妻精品一区二区三区 | 久久久精品成人免费观看 | 亚洲精品国产精品乱码视色 | 婷婷色婷婷开心五月四房播播 | 99视频精品全部免费免费观看 | 国产精品久久国产精品99 | 亚洲一区二区观看播放 | 精品午夜福利在线观看 | 亚洲成a人片在线观看无码 | 亚洲男女内射在线播放 | 人妻少妇精品无码专区二区 | 亚洲娇小与黑人巨大交 | 少妇被粗大的猛进出69影院 | 国产国产精品人在线视 | 啦啦啦www在线观看免费视频 | 国产成人综合在线女婷五月99播放 | 亚拍精品一区二区三区探花 | 亚洲成av人影院在线观看 | 精品国产福利一区二区 | 老司机亚洲精品影院无码 | 大乳丰满人妻中文字幕日本 | 国精产品一区二区三区 | 久久精品视频在线看15 | 内射巨臀欧美在线视频 | 亚洲欧美精品伊人久久 | 久久亚洲日韩精品一区二区三区 | 国产成人精品必看 | 人人妻人人澡人人爽人人精品 | 最新国产乱人伦偷精品免费网站 | 欧美日韩一区二区三区自拍 | 国产麻豆精品精东影业av网站 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲午夜久久久影院 | 亚洲精品一区二区三区四区五区 | 国产午夜无码视频在线观看 | 国产人妻人伦精品1国产丝袜 | 成人免费视频在线观看 | 小泽玛莉亚一区二区视频在线 | 牲交欧美兽交欧美 | 国产一区二区三区精品视频 | 国产一区二区三区日韩精品 | 亚洲色欲色欲欲www在线 | 亚洲自偷精品视频自拍 | 欧美兽交xxxx×视频 | 成熟女人特级毛片www免费 | 国产成人无码av一区二区 | 国产卡一卡二卡三 | 女人色极品影院 | 国产亚洲精品久久久久久大师 | 99久久99久久免费精品蜜桃 | 99久久精品无码一区二区毛片 | 国产精品欧美成人 | 国产办公室秘书无码精品99 | 欧美丰满熟妇xxxx | 色 综合 欧美 亚洲 国产 | 老熟妇仑乱视频一区二区 | 熟妇人妻激情偷爽文 | 成人一在线视频日韩国产 | 99精品视频在线观看免费 | 小鲜肉自慰网站xnxx | 国产午夜福利亚洲第一 | 亚洲日韩乱码中文无码蜜桃臀网站 | 欧美激情综合亚洲一二区 | 妺妺窝人体色www婷婷 | 一二三四在线观看免费视频 | 牲欲强的熟妇农村老妇女视频 | 日产精品高潮呻吟av久久 | 男女作爱免费网站 | 99久久精品日本一区二区免费 | 1000部啪啪未满十八勿入下载 | 亚洲精品中文字幕乱码 | 国产精华av午夜在线观看 | 亚洲成a人片在线观看无码 | 丰满少妇高潮惨叫视频 | 亚洲中文字幕久久无码 | 激情内射日本一区二区三区 | 人妻夜夜爽天天爽三区 | 久久国内精品自在自线 | 久久国语露脸国产精品电影 | 亚洲日本在线电影 | 1000部夫妻午夜免费 | 午夜福利不卡在线视频 | 18无码粉嫩小泬无套在线观看 | 久久99精品久久久久婷婷 | 精品一区二区三区无码免费视频 | 久久人人爽人人人人片 | 亚洲啪av永久无码精品放毛片 | 欧美丰满老熟妇xxxxx性 | 精品国产国产综合精品 | 国产精品久久久 | 天海翼激烈高潮到腰振不止 | 99riav国产精品视频 | 亚洲自偷精品视频自拍 | 精品国产国产综合精品 | 真人与拘做受免费视频 | 亚洲精品国产品国语在线观看 | 欧美兽交xxxx×视频 | 色综合视频一区二区三区 | 亚洲精品成a人在线观看 | 亚洲毛片av日韩av无码 | 熟妇女人妻丰满少妇中文字幕 | 美女极度色诱视频国产 | 欧美高清在线精品一区 | 荫蒂被男人添的好舒服爽免费视频 | 永久免费观看美女裸体的网站 | 永久免费精品精品永久-夜色 | 亚洲春色在线视频 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲欧洲日本无在线码 | 性色欲网站人妻丰满中文久久不卡 | 亚洲精品综合五月久久小说 | 性色欲网站人妻丰满中文久久不卡 | 精品久久综合1区2区3区激情 | 久久人妻内射无码一区三区 | 色综合久久久久综合一本到桃花网 | 牲欲强的熟妇农村老妇女视频 | 久久99精品久久久久久动态图 | 人人妻人人澡人人爽人人精品 | 无码中文字幕色专区 | 少妇被粗大的猛进出69影院 | 亚洲国产精品一区二区美利坚 | 99久久精品日本一区二区免费 | 东京热一精品无码av | 亚洲中文字幕成人无码 | 亚洲国产av美女网站 | 成人av无码一区二区三区 | 日韩精品成人一区二区三区 | 97久久精品无码一区二区 | 国产免费观看黄av片 | 国产精品丝袜黑色高跟鞋 | 亚洲一区二区三区播放 | 日本精品人妻无码77777 天堂一区人妻无码 | √天堂资源地址中文在线 | 黄网在线观看免费网站 | 青春草在线视频免费观看 | 国产精品无码一区二区三区不卡 | 疯狂三人交性欧美 | 麻豆精产国品 | 国产成人av免费观看 | 久久久久久久人妻无码中文字幕爆 | 欧美怡红院免费全部视频 | 亚洲国产精品久久久久久 | 一本精品99久久精品77 | 性啪啪chinese东北女人 | 国产97在线 | 亚洲 | 久久久精品国产sm最大网站 | 日本在线高清不卡免费播放 | 色婷婷综合中文久久一本 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲毛片av日韩av无码 | 亚洲人成网站免费播放 | 55夜色66夜色国产精品视频 | 国产农村乱对白刺激视频 | 97精品国产97久久久久久免费 | 正在播放老肥熟妇露脸 | 欧美熟妇另类久久久久久多毛 | 300部国产真实乱 | 成人欧美一区二区三区 | 欧美猛少妇色xxxxx | 99久久久无码国产aaa精品 | 呦交小u女精品视频 | 国产美女精品一区二区三区 | 人人妻人人藻人人爽欧美一区 | 狠狠色欧美亚洲狠狠色www | 四十如虎的丰满熟妇啪啪 | 日韩 欧美 动漫 国产 制服 | 亚洲精品无码人妻无码 | 亚洲一区二区三区四区 | 亚洲日韩中文字幕在线播放 | 亚洲欧美精品aaaaaa片 | 国产人妻久久精品二区三区老狼 | 蜜臀av无码人妻精品 | 成 人 免费观看网站 | 亚洲成av人影院在线观看 | 99er热精品视频 | 亚洲爆乳精品无码一区二区三区 | 人妻尝试又大又粗久久 | 一本久道久久综合婷婷五月 | 欧美日韩一区二区综合 | 两性色午夜免费视频 | 亚洲成av人影院在线观看 | 天天做天天爱天天爽综合网 | 久久婷婷五月综合色国产香蕉 | 国产一区二区三区日韩精品 | 人妻尝试又大又粗久久 | 日韩人妻无码一区二区三区久久99 | 色 综合 欧美 亚洲 国产 | 色综合视频一区二区三区 | 狠狠亚洲超碰狼人久久 | 亚洲爆乳大丰满无码专区 | 精品久久久中文字幕人妻 | 熟妇人妻激情偷爽文 | 精品乱子伦一区二区三区 | 午夜免费福利小电影 | 领导边摸边吃奶边做爽在线观看 | 曰本女人与公拘交酡免费视频 | 自拍偷自拍亚洲精品被多人伦好爽 | a在线亚洲男人的天堂 | 香蕉久久久久久av成人 | 国产色xx群视频射精 | 久久综合给合久久狠狠狠97色 | 亚洲精品中文字幕久久久久 | 国产精品久久国产三级国 | 国内揄拍国内精品少妇国语 | 中文字幕中文有码在线 | 中文字幕无码av激情不卡 | 国产成人无码一二三区视频 | 中文字幕av日韩精品一区二区 | 午夜精品一区二区三区的区别 | 国产午夜无码视频在线观看 | 曰韩无码二三区中文字幕 | 丰满人妻精品国产99aⅴ | 亚洲熟熟妇xxxx | а天堂中文在线官网 | 国产午夜无码视频在线观看 | 99久久亚洲精品无码毛片 | 99麻豆久久久国产精品免费 | 中文字幕+乱码+中文字幕一区 | 久青草影院在线观看国产 | 午夜精品一区二区三区的区别 | 久久熟妇人妻午夜寂寞影院 | 亚洲欧美中文字幕5发布 | 国产女主播喷水视频在线观看 | 国产精品人人爽人人做我的可爱 | 精品成在人线av无码免费看 | 亚洲第一网站男人都懂 | 久久久精品人妻久久影视 | 欧洲熟妇色 欧美 | 精品无码一区二区三区爱欲 | 麻豆md0077饥渴少妇 | 亚洲毛片av日韩av无码 | 正在播放老肥熟妇露脸 | 影音先锋中文字幕无码 | 在线成人www免费观看视频 | 国产亚洲欧美在线专区 | 少妇人妻av毛片在线看 | 亚洲一区av无码专区在线观看 | 精品久久综合1区2区3区激情 | 对白脏话肉麻粗话av | 麻豆国产人妻欲求不满 | 牲欲强的熟妇农村老妇女 | 久久综合给合久久狠狠狠97色 | 国产xxx69麻豆国语对白 | 国产精品国产三级国产专播 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲欧美精品aaaaaa片 | 在线看片无码永久免费视频 | 狂野欧美激情性xxxx | 久久精品人人做人人综合试看 | 搡女人真爽免费视频大全 | 色 综合 欧美 亚洲 国产 | 色五月丁香五月综合五月 | 成人无码精品1区2区3区免费看 | 天堂无码人妻精品一区二区三区 | 3d动漫精品啪啪一区二区中 | 高清无码午夜福利视频 | 成人亚洲精品久久久久软件 | 一区二区传媒有限公司 | 国内丰满熟女出轨videos | 在线观看欧美一区二区三区 | 国产色视频一区二区三区 | 国产综合久久久久鬼色 | 久久精品中文字幕一区 | 亚洲午夜福利在线观看 | 国产亚洲精品久久久闺蜜 | 欧美freesex黑人又粗又大 | 精品国产一区av天美传媒 | 久久久中文字幕日本无吗 | 免费无码肉片在线观看 | 狂野欧美性猛xxxx乱大交 | 亚洲成av人片天堂网无码】 | 亚洲欧美色中文字幕在线 | 荫蒂添的好舒服视频囗交 | 国产97人人超碰caoprom | 免费无码午夜福利片69 | 国产精品免费大片 | 久久久久99精品国产片 | 国产亚洲欧美日韩亚洲中文色 | 久久精品国产一区二区三区肥胖 | 欧美人妻一区二区三区 | 综合网日日天干夜夜久久 | 一个人看的视频www在线 | 亚洲精品国产品国语在线观看 | 丝袜 中出 制服 人妻 美腿 | 午夜无码区在线观看 | 午夜丰满少妇性开放视频 | 亚洲精品久久久久中文第一幕 | 亚洲日本va中文字幕 | 窝窝午夜理论片影院 | 无码国产激情在线观看 | 99国产精品白浆在线观看免费 | 搡女人真爽免费视频大全 | 欧美野外疯狂做受xxxx高潮 | 欧美国产日韩久久mv | 久久99精品国产麻豆蜜芽 | 夜夜影院未满十八勿进 | 国产高清av在线播放 | 呦交小u女精品视频 | 又大又硬又黄的免费视频 | 国产精品18久久久久久麻辣 | 日日天干夜夜狠狠爱 | 亚洲精品午夜无码电影网 | 性色欲网站人妻丰满中文久久不卡 | 久久精品成人欧美大片 | 国色天香社区在线视频 | 激情爆乳一区二区三区 | 国产美女精品一区二区三区 | 波多野42部无码喷潮在线 | 国产成人无码a区在线观看视频app | 亚洲日本在线电影 | а天堂中文在线官网 | 欧美三级不卡在线观看 | 水蜜桃亚洲一二三四在线 | 久久亚洲中文字幕无码 | 日本一卡2卡3卡四卡精品网站 | 精品国产一区二区三区四区在线看 | 亚洲中文字幕无码中文字在线 | 久久久久久久人妻无码中文字幕爆 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 西西人体www44rt大胆高清 | 国产精品毛片一区二区 | 国产乱码精品一品二品 | 亚拍精品一区二区三区探花 | 在线a亚洲视频播放在线观看 | 无码人妻黑人中文字幕 | 色窝窝无码一区二区三区色欲 | 蜜桃视频插满18在线观看 | 精品久久久久香蕉网 | 少妇激情av一区二区 | 久久国产精品偷任你爽任你 | 亚洲综合伊人久久大杳蕉 | 久久99精品国产麻豆 | 欧美zoozzooz性欧美 | 久久久婷婷五月亚洲97号色 | 性生交大片免费看女人按摩摩 | 久久精品国产99久久6动漫 | 给我免费的视频在线观看 | 无码人妻出轨黑人中文字幕 | 丰满人妻一区二区三区免费视频 | 亚洲人成影院在线无码按摩店 | 5858s亚洲色大成网站www | 精品aⅴ一区二区三区 | 日日麻批免费40分钟无码 | 中文字幕av无码一区二区三区电影 | 中文无码精品a∨在线观看不卡 | 亚洲天堂2017无码 | 国产亚洲人成a在线v网站 | 亚洲精品鲁一鲁一区二区三区 | 性生交大片免费看l | 国产av久久久久精东av | 狂野欧美激情性xxxx | 亚洲 另类 在线 欧美 制服 | 国产成人精品一区二区在线小狼 | 国产激情一区二区三区 | 装睡被陌生人摸出水好爽 | 无码人妻出轨黑人中文字幕 | 少女韩国电视剧在线观看完整 | 三上悠亚人妻中文字幕在线 | 国产精品人人妻人人爽 | 久久无码人妻影院 | 乌克兰少妇xxxx做受 | 人妻有码中文字幕在线 | 久久综合激激的五月天 | 99久久精品无码一区二区毛片 | 国产成人综合在线女婷五月99播放 | 亚洲成av人综合在线观看 | 国产69精品久久久久app下载 | 国产在热线精品视频 | 日韩av无码中文无码电影 | 精品国产成人一区二区三区 | 色婷婷欧美在线播放内射 | 午夜精品久久久内射近拍高清 | 中文字幕日韩精品一区二区三区 | 岛国片人妻三上悠亚 | 无遮挡啪啪摇乳动态图 | 色婷婷综合激情综在线播放 | 国产精品第一区揄拍无码 | 久久综合狠狠综合久久综合88 | 美女黄网站人色视频免费国产 | 亚洲欧美精品aaaaaa片 | 偷窥日本少妇撒尿chinese | 精品国精品国产自在久国产87 | 思思久久99热只有频精品66 | 老熟女重囗味hdxx69 | 国产性生交xxxxx无码 | 亚洲精品鲁一鲁一区二区三区 | 国产精品无码一区二区三区不卡 | 午夜精品久久久久久久 | 7777奇米四色成人眼影 | 成人性做爰aaa片免费看 | 7777奇米四色成人眼影 | 婷婷丁香六月激情综合啪 | 极品尤物被啪到呻吟喷水 | 熟妇人妻无码xxx视频 | 天堂一区人妻无码 | 精品亚洲成av人在线观看 | 日日橹狠狠爱欧美视频 | 波多野结衣乳巨码无在线观看 | 日韩精品成人一区二区三区 | 娇妻被黑人粗大高潮白浆 | 亚洲成av人片天堂网无码】 | 草草网站影院白丝内射 | 亚洲一区二区三区国产精华液 | 激情内射亚州一区二区三区爱妻 | 一本无码人妻在中文字幕免费 | 中文精品久久久久人妻不卡 | 久久精品国产大片免费观看 | 美女毛片一区二区三区四区 | 国产高潮视频在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 少妇久久久久久人妻无码 | 亚洲aⅴ无码成人网站国产app | 亚洲精品国产第一综合99久久 | 亚洲色欲色欲天天天www | 九月婷婷人人澡人人添人人爽 | 国产成人精品一区二区在线小狼 | 亚洲综合在线一区二区三区 | 久久久久久久人妻无码中文字幕爆 | 亚洲中文字幕无码一久久区 | 熟妇人妻中文av无码 | 国产人妖乱国产精品人妖 | 在线欧美精品一区二区三区 | 精品日本一区二区三区在线观看 | 国产片av国语在线观看 | 国产极品美女高潮无套在线观看 | 国产综合久久久久鬼色 | 欧美日韩一区二区免费视频 | 精品国产精品久久一区免费式 | 久久久中文字幕日本无吗 | 爱做久久久久久 | 欧美成人高清在线播放 | 麻豆果冻传媒2021精品传媒一区下载 | 久久亚洲日韩精品一区二区三区 | 色一情一乱一伦一区二区三欧美 | 成人性做爰aaa片免费看 | 久久国产36精品色熟妇 | 国产精品美女久久久久av爽李琼 | 色综合久久88色综合天天 | 狠狠色色综合网站 | 国色天香社区在线视频 | 欧美日韩综合一区二区三区 | 国产精品亚洲综合色区韩国 | 国产尤物精品视频 | 欧美兽交xxxx×视频 | 亚洲熟妇色xxxxx亚洲 | 亚洲码国产精品高潮在线 | 麻花豆传媒剧国产免费mv在线 | 色欲人妻aaaaaaa无码 | 福利一区二区三区视频在线观看 | 高潮毛片无遮挡高清免费 | 久久午夜夜伦鲁鲁片无码免费 | 久久精品国产一区二区三区肥胖 | 日本精品人妻无码免费大全 | 樱花草在线播放免费中文 | 亚洲日韩精品欧美一区二区 | 成熟妇人a片免费看网站 | 天下第一社区视频www日本 | 好爽又高潮了毛片免费下载 | 动漫av一区二区在线观看 | 5858s亚洲色大成网站www | 无码精品人妻一区二区三区av | 久久综合久久自在自线精品自 | 天下第一社区视频www日本 | 精品成人av一区二区三区 | 亚洲成色在线综合网站 | 中文字幕无线码免费人妻 | 精品久久久无码中文字幕 | 午夜嘿嘿嘿影院 | 免费人成网站视频在线观看 | 精品国偷自产在线 | 18精品久久久无码午夜福利 | 中文字幕av无码一区二区三区电影 | 亚洲精品久久久久中文第一幕 | 国产亚洲精品久久久闺蜜 | 亚洲一区二区三区偷拍女厕 | √天堂资源地址中文在线 | 无码av岛国片在线播放 | 麻豆国产丝袜白领秘书在线观看 | 丰满少妇女裸体bbw | 欧美午夜特黄aaaaaa片 | 一区二区三区高清视频一 | 亚洲国产欧美日韩精品一区二区三区 | 国产两女互慰高潮视频在线观看 | 午夜熟女插插xx免费视频 | 99久久亚洲精品无码毛片 | 99riav国产精品视频 | 少妇性俱乐部纵欲狂欢电影 | 夜夜躁日日躁狠狠久久av | 综合激情五月综合激情五月激情1 | 久久人人97超碰a片精品 | 无码人妻精品一区二区三区不卡 | 久久99精品久久久久久 | 人妻无码αv中文字幕久久琪琪布 | 在线 国产 欧美 亚洲 天堂 | 欧美人与禽猛交狂配 | 大肉大捧一进一出好爽视频 | 国产真实乱对白精彩久久 | 大肉大捧一进一出好爽视频 | 天天拍夜夜添久久精品 | 国产猛烈高潮尖叫视频免费 | 少妇无套内谢久久久久 | 欧美色就是色 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产麻豆精品一区二区三区v视界 | 国产特级毛片aaaaaa高潮流水 | 欧美老人巨大xxxx做受 | 亚洲中文无码av永久不收费 | 日本成熟视频免费视频 | 2020久久香蕉国产线看观看 | 久久久久se色偷偷亚洲精品av | 国产97人人超碰caoprom | 无码人妻av免费一区二区三区 | 沈阳熟女露脸对白视频 | 国产av一区二区三区最新精品 | 亚洲色偷偷男人的天堂 | 国产精品视频免费播放 | 日韩视频 中文字幕 视频一区 | 少妇高潮喷潮久久久影院 | 久久99精品久久久久久动态图 | 国产午夜福利亚洲第一 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲一区二区三区偷拍女厕 | 双乳奶水饱满少妇呻吟 | 亚洲欧美日韩综合久久久 | 亚洲日本va午夜在线电影 | 久久综合给合久久狠狠狠97色 | 清纯唯美经典一区二区 | 老熟女重囗味hdxx69 | 精品一区二区不卡无码av | 国产成人无码av片在线观看不卡 | 性生交大片免费看l | 清纯唯美经典一区二区 | 青青久在线视频免费观看 | 在线观看免费人成视频 | 国产人妖乱国产精品人妖 | 亚洲阿v天堂在线 | 奇米影视7777久久精品 | 97精品人妻一区二区三区香蕉 | 国产精品久久国产三级国 | 亚洲 欧美 激情 小说 另类 | 一本久道久久综合婷婷五月 | 国产超级va在线观看视频 | 黑人巨大精品欧美一区二区 | 中文精品无码中文字幕无码专区 | 无码午夜成人1000部免费视频 | 国内精品一区二区三区不卡 | 久久综合给久久狠狠97色 | 丰满人妻被黑人猛烈进入 | 暴力强奷在线播放无码 | 极品嫩模高潮叫床 | 精品人人妻人人澡人人爽人人 | 国产97人人超碰caoprom | 国产热a欧美热a在线视频 | 青青草原综合久久大伊人精品 | 亚洲人成网站在线播放942 | 亚洲欧洲日本无在线码 | 日本爽爽爽爽爽爽在线观看免 | 免费无码av一区二区 | 在线成人www免费观看视频 | 男女爱爱好爽视频免费看 | 久久99久久99精品中文字幕 | 免费视频欧美无人区码 | 国产人妻久久精品二区三区老狼 | 蜜桃av抽搐高潮一区二区 | 国产婷婷色一区二区三区在线 | 精品熟女少妇av免费观看 | 国产精品18久久久久久麻辣 | 午夜性刺激在线视频免费 | 夜先锋av资源网站 | 欧美老熟妇乱xxxxx | 老子影院午夜精品无码 | 麻豆精品国产精华精华液好用吗 | 国产成人精品优优av | 色一情一乱一伦 | 欧美日韩一区二区三区自拍 | 国产成人午夜福利在线播放 | 国产精品怡红院永久免费 | 免费乱码人妻系列无码专区 | 国产亚洲精品久久久久久久 | 中文无码伦av中文字幕 | 亚洲欧洲日本无在线码 | 性做久久久久久久免费看 | 3d动漫精品啪啪一区二区中 | 熟女少妇人妻中文字幕 | 久久久久久国产精品无码下载 | www国产精品内射老师 | 国产精品美女久久久网av | 国产精品久久久久久久影院 | 国产精品对白交换视频 | 亚洲欧洲无卡二区视頻 | 欧美老妇与禽交 | 中国女人内谢69xxxxxa片 | 成人试看120秒体验区 | 人人妻人人藻人人爽欧美一区 | 超碰97人人做人人爱少妇 | 国产亚洲精品久久久久久久久动漫 | 天天拍夜夜添久久精品 | 亚洲乱码国产乱码精品精 | 免费无码一区二区三区蜜桃大 | 丰满岳乱妇在线观看中字无码 | 成人精品视频一区二区三区尤物 | 欧美 亚洲 国产 另类 | 永久免费精品精品永久-夜色 | 久久精品中文字幕大胸 | 黑人大群体交免费视频 | 成人无码视频免费播放 | 久久精品国产大片免费观看 | 久久人人97超碰a片精品 | 骚片av蜜桃精品一区 | 亚洲一区二区三区无码久久 | 亚洲精品综合五月久久小说 | 四虎国产精品免费久久 | 国产深夜福利视频在线 | 精品乱子伦一区二区三区 | 亚洲色欲久久久综合网东京热 | 一区二区三区乱码在线 | 欧洲 | 欧洲熟妇色 欧美 | 青青青手机频在线观看 | 国产在线一区二区三区四区五区 | 永久免费观看美女裸体的网站 | 日本高清一区免费中文视频 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品无码国产一区二区三区av | 午夜福利一区二区三区在线观看 | 精品日本一区二区三区在线观看 | 久久午夜无码鲁丝片午夜精品 | 西西人体www44rt大胆高清 | 亚洲欧洲日本综合aⅴ在线 | 成人精品视频一区二区 | 正在播放老肥熟妇露脸 | 一本大道伊人av久久综合 | 国产精品办公室沙发 | 中国女人内谢69xxxxxa片 | 精品国产青草久久久久福利 | 亚洲色欲久久久综合网东京热 | 亚洲成在人网站无码天堂 | 性色av无码免费一区二区三区 | a片免费视频在线观看 | 人妻体内射精一区二区三四 | 国产内射爽爽大片视频社区在线 | 日欧一片内射va在线影院 | 思思久久99热只有频精品66 | 国产莉萝无码av在线播放 | 扒开双腿吃奶呻吟做受视频 | 999久久久国产精品消防器材 | 亚洲а∨天堂久久精品2021 | 377p欧洲日本亚洲大胆 | 又大又黄又粗又爽的免费视频 | 国产亚洲精品久久久ai换 | 日本大香伊一区二区三区 | 精品亚洲韩国一区二区三区 | 亚洲精品国产精品乱码不卡 | 国产猛烈高潮尖叫视频免费 | 欧美激情一区二区三区成人 | 牲欲强的熟妇农村老妇女 | 久久综合激激的五月天 | 久久久精品成人免费观看 | 午夜成人1000部免费视频 | 国产午夜精品一区二区三区嫩草 | 两性色午夜视频免费播放 | 无遮挡国产高潮视频免费观看 | 丝袜美腿亚洲一区二区 | 精品国产aⅴ无码一区二区 | 国产成人无码午夜视频在线观看 | 狠狠亚洲超碰狼人久久 | 久久这里只有精品视频9 | 欧美国产亚洲日韩在线二区 | 国产乱人伦av在线无码 | 亚洲色大成网站www国产 | 国产香蕉97碰碰久久人人 | 欧美zoozzooz性欧美 | 中文字幕色婷婷在线视频 | 欧美亚洲国产一区二区三区 | 国产suv精品一区二区五 | 中文字幕无码热在线视频 | 荡女精品导航 | 99国产精品白浆在线观看免费 | 国产办公室秘书无码精品99 | 亚洲欧美日韩国产精品一区二区 | 性生交大片免费看l | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲一区av无码专区在线观看 | 亚洲乱码国产乱码精品精 | 俺去俺来也在线www色官网 | 在线a亚洲视频播放在线观看 | 精品一区二区三区无码免费视频 | 久久人人爽人人爽人人片ⅴ | 亚洲天堂2017无码 | 1000部夫妻午夜免费 | 国产明星裸体无码xxxx视频 | 成人免费无码大片a毛片 | 精品国产一区av天美传媒 | 欧美日韩一区二区免费视频 | 久激情内射婷内射蜜桃人妖 | 亚洲精品国产精品乱码视色 | 精品久久久无码中文字幕 | 超碰97人人射妻 | 国产激情无码一区二区app | 无码人妻av免费一区二区三区 | 东京热一精品无码av | 四十如虎的丰满熟妇啪啪 | 国产精品人妻一区二区三区四 | 丝袜美腿亚洲一区二区 | 国产亚洲人成a在线v网站 | 免费观看激色视频网站 | 无套内谢的新婚少妇国语播放 | 丝袜足控一区二区三区 | 色五月丁香五月综合五月 | 久精品国产欧美亚洲色aⅴ大片 | 精品人妻中文字幕有码在线 | 久久伊人色av天堂九九小黄鸭 | 亚洲一区二区三区含羞草 | 国产香蕉尹人综合在线观看 | 欧美日韩在线亚洲综合国产人 | 丁香花在线影院观看在线播放 | 国产成人精品三级麻豆 | 国产在线一区二区三区四区五区 | 国产另类ts人妖一区二区 | 亚洲日韩av片在线观看 | 99视频精品全部免费免费观看 | 特级做a爰片毛片免费69 | 帮老师解开蕾丝奶罩吸乳网站 | 人妻尝试又大又粗久久 | 日韩人妻无码中文字幕视频 | 国产亚洲视频中文字幕97精品 | 中文字幕乱码人妻无码久久 | 久久综合给合久久狠狠狠97色 | 欧美变态另类xxxx | 中文字幕色婷婷在线视频 | 久久成人a毛片免费观看网站 | 无码吃奶揉捏奶头高潮视频 | 欧美兽交xxxx×视频 | 99国产欧美久久久精品 | 中文字幕人妻丝袜二区 | 久久国产自偷自偷免费一区调 | 蜜桃av抽搐高潮一区二区 | 国产亚洲精品久久久闺蜜 | 欧美喷潮久久久xxxxx | 色综合视频一区二区三区 | 久久99热只有频精品8 | 中文精品久久久久人妻不卡 | 亚洲人成影院在线无码按摩店 | 亚洲综合色区中文字幕 | 精品国产乱码久久久久乱码 | 国产内射爽爽大片视频社区在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久中文字幕日本无吗 | 亚洲人成网站免费播放 | ass日本丰满熟妇pics | 亚洲欧美综合区丁香五月小说 | 精品 日韩 国产 欧美 视频 | 国色天香社区在线视频 | 欧美人与动性行为视频 | 99久久婷婷国产综合精品青草免费 | 日韩亚洲欧美精品综合 | 久久午夜无码鲁丝片午夜精品 | 亚洲国精产品一二二线 | 成 人 免费观看网站 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲色欲久久久综合网东京热 | 亚洲欧美精品aaaaaa片 | 久久久久国色av免费观看性色 | 六月丁香婷婷色狠狠久久 | 欧美日韩综合一区二区三区 | 国产精品毛多多水多 | 欧美性生交活xxxxxdddd | 久久久久久久久蜜桃 | 免费看男女做好爽好硬视频 | 野狼第一精品社区 | 国产热a欧美热a在线视频 | 亚洲a无码综合a国产av中文 | 国产又粗又硬又大爽黄老大爷视 | 色五月丁香五月综合五月 | 国产av人人夜夜澡人人爽麻豆 | 免费中文字幕日韩欧美 | 亚洲乱亚洲乱妇50p | 亚洲欧洲日本综合aⅴ在线 | 国产在热线精品视频 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲成av人在线观看网址 | 国产精品亚洲综合色区韩国 | 最新国产乱人伦偷精品免费网站 | 九九综合va免费看 | 国产午夜视频在线观看 | 老熟妇仑乱视频一区二区 | 午夜精品久久久久久久久 | а天堂中文在线官网 | 亚洲小说图区综合在线 | 99久久久无码国产aaa精品 | 免费无码午夜福利片69 | 亚洲精品中文字幕久久久久 | 少妇性l交大片欧洲热妇乱xxx | 天天综合网天天综合色 | 国产乱人无码伦av在线a | 欧美亚洲日韩国产人成在线播放 | 18禁止看的免费污网站 | 国产成人综合色在线观看网站 | 久久精品99久久香蕉国产色戒 | 精品国产aⅴ无码一区二区 | 夜精品a片一区二区三区无码白浆 | 久久精品丝袜高跟鞋 |