精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

99%的人都不知道!Python、C、C 擴(kuò)展、Cython 差異對比!

開發(fā) 后端
Cython 是一門成熟的語言,它是為 Python 而服務(wù)的。Cython 代碼不能夠直接拿來執(zhí)行,因?yàn)樗环?Python 的語法規(guī)則。

我們以簡單的斐波那契數(shù)列為例,來測試一下它們執(zhí)行效率的差異。

Python 代碼:

def fib(n):
a, b = 0.0, 1.0
for i in range(n):
a, b = a + b, a
return a

C 代碼:

double cfib(int n) {
int i;
double a=0.0, b=1.0, tmp;
for (i=0; i<n; ++i) {
tmp = a; a = a + b; b = tmp;
}
return a;
}

上面便是 C 實(shí)現(xiàn)的一個(gè)斐波那契數(shù)列,可能有人好奇為什么我們使用浮點(diǎn)型,而不是整型呢?答案是 C 的整型是有范圍的,所以我們使用 double,而且 Python 的 float 在底層對應(yīng)的是 PyFloatObject、其內(nèi)部也是通過 double 來存儲(chǔ)的。

C 擴(kuò)展:

然后是 C 擴(kuò)展,注意:C 擴(kuò)展不是我們的重點(diǎn),寫 C 擴(kuò)展和寫 Cython 本質(zhì)是一樣的,都是為 Python 編寫擴(kuò)展模塊,但是寫 Cython 絕對要比寫 C 擴(kuò)展簡單的多。

#include "Python.h"

double cfib(int n) {
int i;
double a=0.0, b=1.0, tmp;
for (i=0; i<n; ++i) {
tmp = a; a = a + b; b = tmp;
}
return a;
}

static PyObject *fib(PyObject *self, PyObject *n) {
if (!PyLong_CheckExact(n)) {
wchar_t *error = L"函數(shù) fib 需要接收一個(gè)整數(shù)";
PyErr_SetObject(PyExc_ValueError,
PyUnicode_FromWideChar(error, wcslen(error)));
return NULL;
}
double result = cfib(PyLong_AsLong(n));
return PyFloat_FromDouble(result);
}

static PyMethodDef methods[] = {
{"fib",
(PyCFunction) fib,
METH_O,
"這是 fib 函數(shù)"},
{NULL, NULL, 0, NULL}
};

static PyModuleDef module = {
PyModuleDef_HEAD_INIT,
"c_extension",
"這是模塊 c_extension",
-1,
methods,
NULL, NULL, NULL, NULL
};

PyMODINIT_FUNC PyInit_c_extension(void) {
return PyModule_Create(&module);
}

可以看到,如果是寫 C 擴(kuò)展,即便一個(gè)簡單的斐波那契,都是非常復(fù)雜的事情。

Cython 代碼:

最后看看如何使用 Cython 來編寫斐波那契,你覺得使用 Cython 編寫的代碼應(yīng)該是一個(gè)什么樣子的呢?

def fib(int n):
cdef int i
cdef double a = 0.0, b = 1.0
for i in range(n):
a, b = a + b, a
return a

怎么樣,Cython 代碼和 Python 代碼是不是很相似呢?雖然我們現(xiàn)在還沒有正式學(xué)習(xí) Cython 的語法,但你也應(yīng)該能夠猜到上面代碼的含義是什么。我們使用 cdef 關(guān)鍵字定義了一個(gè) C 級別的變量,并聲明了它們的類型。

Cython 代碼也是要編譯成擴(kuò)展模塊之后,才能被解釋器識別,所以它需要先被翻譯成 C 的代碼,然后再編譯成擴(kuò)展模塊。再次說明,寫 C 擴(kuò)展和寫 Cython 本質(zhì)上沒有什么區(qū)別,Cython 代碼也是要被翻譯成 C 代碼的。

但很明顯,寫 Cython 比寫 C 擴(kuò)展要簡單很多,如果編寫的 Cython 代碼質(zhì)量很高,那么翻譯出來的 C 代碼的質(zhì)量同樣很高,而且在翻譯的過程中還會(huì)自動(dòng)進(jìn)行最大程度的優(yōu)化。但如果是手寫 C 擴(kuò)展,那么一切優(yōu)化都要開發(fā)者手動(dòng)去處理,更何況在功能復(fù)雜的時(shí)候,寫 C 擴(kuò)展本身就是一件讓人頭疼的事情。

Cython 為什么能夠加速?

觀察一下 Cython 代碼,和純 Python 的斐波那契相比,我們看到區(qū)別貌似只是事先規(guī)定好了變量 i、a、b 的類型而已,關(guān)鍵是為什么這樣就可以起到加速的效果呢(雖然還沒有測試,但速度肯定會(huì)提升的,否則就沒必要學(xué) Cython 了)。

但是原因就在這里,因?yàn)?Python 中所有的變量都是一個(gè)泛型指針 PyObject *。PyObject(C 的一個(gè)結(jié)構(gòu)體)內(nèi)部有兩個(gè)成員,分別是 ob_refcnt:保存對象的引用計(jì)數(shù)、ob_type *:保存對象類型的指針。

不管是整數(shù)、浮點(diǎn)數(shù)、字符串、元組、字典,亦或是其它的什么,所有指向它們的變量都是一個(gè) PyObject *。當(dāng)進(jìn)行操作的時(shí)候,首先要通過 -> ob_type 來獲取對應(yīng)類型的指針,再進(jìn)行轉(zhuǎn)化。

比如 Python 代碼中的 a 和 b,我們知道無論進(jìn)行哪一層循環(huán),結(jié)果指向的都是浮點(diǎn)數(shù),但是解釋器不會(huì)做這種推斷。每一次相加都要進(jìn)行檢測,判斷到底是什么類型并進(jìn)行轉(zhuǎn)化;然后執(zhí)行加法的時(shí)候,再去找內(nèi)部的 __add__ 方法,將兩個(gè)對象相加,創(chuàng)建一個(gè)新的對象;執(zhí)行結(jié)束后再將這個(gè)新對象的指針轉(zhuǎn)成 PyObject *,然后返回。

并且 Python 的對象都是在堆上分配空間,再加上 a 和 b 不可變,所以每一次循環(huán)都會(huì)創(chuàng)建新的對象,并將之前的對象給回收掉。

以上種種都導(dǎo)致了 Python 代碼的執(zhí)行效率不可能高,雖然 Python 也提供了內(nèi)存池以及相應(yīng)的緩存機(jī)制,但顯然還是架不住效率低。

至于 Cython 為什么能加速,我們后面會(huì)慢慢聊。

效率差異

那么它們之間的效率差異是什么樣的呢?我們用一個(gè)表格來對比一下:

圖片

提升的倍數(shù),指的是相對于純 Python 來說在效率上提升了多少倍。

第二列是 fib(0),顯然它沒有真正進(jìn)入循環(huán),fib(0) 測量的是調(diào)用一個(gè)函數(shù)所需要花費(fèi)的開銷。而倒數(shù)第二列 "循環(huán)體耗時(shí)" 指的是執(zhí)行 fib(90) 的時(shí)候,排除函數(shù)調(diào)用本身的開銷,也就是執(zhí)行內(nèi)部循環(huán)體所花費(fèi)的時(shí)間。

整體來看,純 C 語言編寫的斐波那契,毫無疑問是最快的,但是這里面有很多值得思考的地方,我們來分析一下。

純 Python?

眾望所歸,各方面都是表現(xiàn)最差的那一個(gè)。從 fib(0) 來看,調(diào)用一個(gè)函數(shù)要花 590 納秒,和 C 相比慢了這么多,原因就在于 Python 調(diào)用一個(gè)函數(shù)的時(shí)候需要?jiǎng)?chuàng)建一個(gè)棧幀,而這個(gè)棧幀是分配在堆上的,而且結(jié)束之后還要涉及棧幀的銷毀等等。至于 fib(90),顯然無需分析了。

純 C

顯然此時(shí)沒有和 Python 運(yùn)行時(shí)的交互,因此消耗的性能最小。fib(0) 表明了,C 調(diào)用一個(gè)函數(shù),開銷只需要 2 納秒;fib(90) 則說明執(zhí)行一個(gè)循環(huán),C 比 Python 快了將近80倍。

C 擴(kuò)展

C 擴(kuò)展是干什么的上面已經(jīng)說了,就是使用 C 來為 Python 編寫擴(kuò)展模塊。我們看一下循環(huán)體耗時(shí),發(fā)現(xiàn) C 擴(kuò)展和純 C 是差不多的,區(qū)別就是函數(shù)調(diào)用上花的時(shí)間比較多。原因就在于當(dāng)我們調(diào)用擴(kuò)展模塊的函數(shù)時(shí),需要先將 Python 的數(shù)據(jù)轉(zhuǎn)成 C 的數(shù)據(jù),然后用 C 函數(shù)計(jì)算斐波那契數(shù)列,計(jì)算完了再將 C 的數(shù)據(jù)轉(zhuǎn)成 Python 的數(shù)據(jù)。

所以 C 擴(kuò)展本質(zhì)也是 C 語言,只不過在編寫的時(shí)候還需要遵循 CPython 提供的 API 規(guī)范,這樣就可以將 C 代碼編譯成 pyd 文件,直接讓 Python 來調(diào)用。從結(jié)果上看,和 Cython 做的事情是一樣的。但是還是那句話,用 C 寫擴(kuò)展,本質(zhì)上還是寫 C,而且還要熟悉底層的 Python/C API,難度是比較大的。

Cython

單獨(dú)看循環(huán)體耗時(shí)的話,純 C 、C 擴(kuò)展、Cython 都是差不多的,但是編寫 Cython 顯然是最方便的。而我們說 Cython 做的事情和 C 擴(kuò)展本質(zhì)是類似的,都是為 Python 提供擴(kuò)展模塊,區(qū)別就在于:一個(gè)是手動(dòng)寫 C 代碼,另一個(gè)是編寫 Cython 代碼、然后再自動(dòng)翻譯成 C 代碼。所以對于 Cython 來說,將 Python 的數(shù)據(jù)轉(zhuǎn)成 C 的數(shù)據(jù)、進(jìn)行計(jì)算,然后再轉(zhuǎn)成 Python 的數(shù)據(jù)返回,這一過程也是無可避免的。

但是我們看到 Cython 在函數(shù)調(diào)用時(shí)的耗時(shí)相比 C 擴(kuò)展卻要少很多,主要是 Cython 生成的 C 代碼是經(jīng)過高度優(yōu)化的。不過說實(shí)話,函數(shù)調(diào)用花的時(shí)間不需要太關(guān)心,內(nèi)部代碼塊執(zhí)行所花的時(shí)間才是我們需要注意的。當(dāng)然啦,如何減少函數(shù)調(diào)用本身的開銷,我們后面也會(huì)說。

Python 的 for 循環(huán)為什么這么慢?

通過循環(huán)體耗時(shí)我們看到,Python 的 for 循環(huán)真的是出了名的慢,那么原因是什么呢?來分析一下。

1. Python 的 for 循環(huán)機(jī)制

Python 在遍歷一個(gè)可迭代對象的時(shí)候,會(huì)先調(diào)用可迭代對象內(nèi)部的 __iter__ 方法返回其對應(yīng)的迭代器;然后再不斷地調(diào)用迭代器的 __next__ 方法,將值一個(gè)一個(gè)的迭代出來,直到迭代器拋出 StopIteration 異常,for 循環(huán)捕捉,終止循環(huán)。

而迭代器是有狀態(tài)的,Python 解釋器需要時(shí)刻記錄迭代器的迭代狀態(tài)。

2. Python 的算數(shù)操作

這一點(diǎn)我們上面其實(shí)已經(jīng)提到過了,Python 由于自身的動(dòng)態(tài)特性,使得其無法做任何基于類型的優(yōu)化。

比如:循環(huán)體中的 a + b,這個(gè) a、b 指向的可以是整數(shù)、浮點(diǎn)數(shù)、字符串、元組、列表,甚至是我們實(shí)現(xiàn)了魔法方法 __add__ 的類的實(shí)例對象,等等等等。

盡管我們知道是浮點(diǎn)數(shù),但是 Python 不會(huì)做這種假設(shè),所以每一次執(zhí)行 a + b 的時(shí)候,都會(huì)檢測其類型到底是什么?然后判斷內(nèi)部是否有 __add__ 方法,有的話則以 a 和 b 為參數(shù)進(jìn)行調(diào)用,將 a 和 b 指向的對象相加。計(jì)算出結(jié)果之后,再將其指針轉(zhuǎn)成 PyObject * 返回。

而對于 C 和 Cython 來說,在創(chuàng)建變量的時(shí)候就事先規(guī)定了類型為 double,不是其它的,因此編譯之后的 a + b 只是一條簡單的機(jī)器指令。這對比下來,Python 尼瑪能不慢嗎。

3. Python 對象的內(nèi)存分配

Python 的對象是分配在堆上面的,因?yàn)?Python 對象本質(zhì)上就是 C 的 malloc 函數(shù)為結(jié)構(gòu)體在堆區(qū)申請的一塊內(nèi)存。在堆區(qū)進(jìn)行內(nèi)存的分配和釋放需要付出很大的代價(jià),而棧則要小很多,并且它是由操作系統(tǒng)維護(hù)的,會(huì)自動(dòng)回收,效率極高,棧上內(nèi)存的分配和釋放只是動(dòng)一動(dòng)寄存器而已。

但堆顯然沒有此待遇,而恰恰 Python 的對象都分配在堆上,盡管 Python 引入了內(nèi)存池機(jī)制使得其在一定程度上避免了和操作系統(tǒng)的頻繁交互,并且還引入了小整數(shù)對象池、字符串的intern機(jī)制,以及緩存池等。

但事實(shí)上,當(dāng)涉及到對象(任意對象、包括標(biāo)量)的創(chuàng)建和銷毀時(shí),都會(huì)增加動(dòng)態(tài)分配內(nèi)存、以及 Python 內(nèi)存子系統(tǒng)的開銷。而 float 對象又是不可變的,因此每循環(huán)一次都會(huì)創(chuàng)建和銷毀一次,所以效率依舊是不高的。

而 Cython 分配的變量(當(dāng)類型是 C 里面的類型時(shí)),它們就不再是指針了(Python 的變量都是指針),對于當(dāng)前的 a 和 b 而言就是分配在棧上的雙精度浮點(diǎn)數(shù)。而棧上分配的效率遠(yuǎn)遠(yuǎn)高于堆,因此非常適合 for 循環(huán),所以效率要比 Python 高很多。另外不光是分配,在尋址的時(shí)候,棧也要比堆更高效。

所以在 for 循環(huán)方面,C 和 Cython 要比純 Python 快了幾個(gè)數(shù)量級,這并不是奇怪的事情,因?yàn)?Python 每次迭代都要做很多的工作。

什么時(shí)候使用 Cython?

我們看到在 Cython 代碼中,只是添加了幾個(gè) cdef 就能獲得如此大的性能改進(jìn),顯然這是非常讓人振奮的。但是,并非所有的 Python 代碼在使用 Cython 編寫時(shí),都能獲得巨大的性能改進(jìn)。

我們這里的斐波那契數(shù)列示例是刻意的,因?yàn)槔锩娴臄?shù)據(jù)是綁定在 CPU 上的,運(yùn)行時(shí)都花費(fèi)在處理 CPU 寄存器的一些變量上,而不需要進(jìn)行數(shù)據(jù)的移動(dòng)。如果此函數(shù)做的是如下工作:

  • 內(nèi)存密集,比如給大數(shù)組添加元素;
  • I/O 密集,比如從磁盤讀取大文件;
  • 網(wǎng)絡(luò)密集,比如從 FTP 服務(wù)器下載文件;?

那么 Python,C,Cython 之間的差異可能會(huì)顯著減少(對于存儲(chǔ)密集操作),甚至完全消失(對于 I/O 密集或網(wǎng)絡(luò)密集操作)。

當(dāng)提升 Python 程序性能是我們的目標(biāo)時(shí),Pareto 原則對我們幫助很大,即:程序百分之 80 的運(yùn)行耗時(shí)是由百分之 20 的代碼引起的。但如果不進(jìn)行仔細(xì)的分析,那么是很難找到這百分之 20 的代碼的。因此我們在使用 Cython 提升性能之前,分析整體業(yè)務(wù)邏輯是第一步。

如果我們通過分析之后,確定程序的瓶頸是由網(wǎng)絡(luò) IO 所導(dǎo)致的,那么我們就不能期望 Cython 可以帶來顯著的性能提升。因此在你使用 Cython 之前,有必要先確定到底是哪種原因?qū)е鲁绦虺霈F(xiàn)了瓶頸。所以盡管 Cython 是一個(gè)強(qiáng)大的工具,但前提是它必須應(yīng)用在正確的道路上。

另外 Cython 將 C 的類型系統(tǒng)引入進(jìn)了 Python,所以 C 的數(shù)據(jù)類型的限制是我們需要關(guān)注的。我們知道,Python 的整數(shù)不受長度的限制,但是 C 的整數(shù)是受到限制的,這意味著它們不能正確地表示無限精度的整數(shù)。

不過 Cython 的一些特性可以幫助我們捕獲這些溢出,總之最重要的是:C 數(shù)據(jù)類型的速度比 Python 數(shù)據(jù)類型快,但是會(huì)受到限制導(dǎo)致其不夠靈活和通用。從這里我們也能看出,在速度以及靈活性、通用性上面,Python 選擇了后者。

此外,思考一下 Cython 的另一個(gè)特性:連接外部代碼。假設(shè)我們的起點(diǎn)不是 Python,而是 C 或者 C++,我們希望使用 Python 將多個(gè) C 或者 C++ 模塊進(jìn)行連接。而 Cython 理解 C 和 C++ 的聲明,并且它能生成高度優(yōu)化的代碼,因此更適合作為連接的橋梁。

由于我本人是主 Python 的,如果涉及到 C、C++,都是介紹如何在 Cython 中引入 C、C++,直接調(diào)用已經(jīng)寫好的 C 庫。而不會(huì)介紹如何在 C、C++ 中引入 Cython,來作為連接多個(gè) C、C++ 模塊的橋梁。這一點(diǎn)望理解,因?yàn)楸救瞬挥?C、C++ 編寫服務(wù),只會(huì)用它們來輔助 Python 提高效率。

小結(jié)

到目前為止,只是介紹了一下 Cython,并且主要討論了它的定位,以及和 Python、C 之間的差異。至于如何使用 Cython 加速 Python,如何編寫 Cython 代碼、以及它的詳細(xì)語法,我們將會(huì)后續(xù)介紹。

總之,Cython 是一門成熟的語言,它是為 Python 而服務(wù)的。Cython 代碼不能夠直接拿來執(zhí)行,因?yàn)樗环?Python 的語法規(guī)則。

我們使用 Cython 的方式是:先將 Cython 代碼翻譯成 C 代碼,再將 C 代碼編譯成擴(kuò)展模塊(pyd 文件),然后在 Python 代碼中導(dǎo)入它、調(diào)用里面的功能方法,這是我們使用 Cython 的正確途徑、當(dāng)然也是唯一的途徑。

比如我們上面用 Cython 編寫的斐波那契,如果直接執(zhí)行的話是會(huì)報(bào)錯(cuò)的,因?yàn)?cdef 明顯不符合 Python 的語法規(guī)則。所以 Cython 代碼需要編譯成擴(kuò)展模塊,然后在普通的 py 文件中被導(dǎo)入,而這么做的意義就在于可以提升運(yùn)行速度。因此 Cython 代碼應(yīng)該都是一些 CPU 密集型的代碼,不然效率很難得到大幅度提升。

所以在使用 Cython 之前,最好先仔細(xì)分析一下業(yè)務(wù)邏輯,或者暫時(shí)先不用 Cython,直接完全使用 Python 編寫。編寫完成之后開始測試、分析程序的性能,看看有哪些地方耗時(shí)比較嚴(yán)重,但同時(shí)又是可以通過靜態(tài)類型的方式進(jìn)行優(yōu)化的。找出它們,使用 Cython 進(jìn)行重寫,編譯成擴(kuò)展模塊,然后調(diào)用擴(kuò)展模塊里面的功能。

責(zé)任編輯:龐桂玉 來源: 菜鳥學(xué)Python
相關(guān)推薦

2020-07-29 09:53:09

VSCode編碼工具插件

2023-01-13 16:48:48

前端開發(fā)JavaScript

2021-07-22 09:28:35

DockerLinux命令

2018-10-17 14:50:08

2022-10-31 18:38:24

MySQL數(shù)據(jù)訂單表

2021-09-24 14:20:25

開發(fā)技能工具

2025-02-18 00:05:00

2022-06-23 13:13:36

GitHub開發(fā)技巧

2020-12-21 09:00:04

MySQL緩存SQL

2025-02-04 17:33:00

2020-08-04 09:57:52

JS開發(fā)前端

2020-12-21 09:44:53

MySQL查詢緩存數(shù)據(jù)庫

2025-10-28 04:10:00

Web開發(fā)工具

2017-10-22 15:34:34

手機(jī)內(nèi)存清理內(nèi)存手機(jī)

2023-10-11 08:16:42

客戶端服務(wù)器內(nèi)容

2020-08-05 12:17:00

C語言代碼分配

2019-05-16 14:50:32

CythonPython編程語言

2011-10-27 14:55:22

公有云私有云云計(jì)算

2021-01-12 12:33:20

Pandas技巧代碼

2021-11-12 10:05:19

跳表BAT面試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲v国产v在线观看| 国产做受高潮69| 热久久久久久久久| 免费黄色在线| 极品美女销魂一区二区三区| 在线成人激情视频| 午夜一区二区视频| 青春草视频在线| www.av亚洲| 国产精品91视频| 久草视频手机在线| 9l视频自拍九色9l视频成人| 狠狠做深爱婷婷久久综合一区| 日本一区二区不卡高清更新| 一级黄色大毛片| 亚洲一区二区三区| 亚洲成在人线av| 亚洲高清在线免费观看| www在线视频| eeuss鲁片一区二区三区在线观看| 日本免费久久高清视频| 精品无码一区二区三区蜜臀| 免费成人蒂法| 欧美色精品在线视频| 992tv快乐视频| 免费成人av电影| 国产一区二区美女| 日本亚洲欧洲色α| 国产精品免费人成网站酒店| 激情av综合| 欧美日韩dvd在线观看| 国产毛片久久久久久国产毛片| 国产毛片av在线| 国产精品538一区二区在线| 欧洲中文字幕国产精品| 老湿机69福利| 国产一区网站| 亚洲成avwww人| 97超碰人人爽| 欧美韩国亚洲| 精品国产91久久久久久老师| 黄黄视频在线观看| 成人在线观看黄色| 久久综合久久综合九色| 91嫩草免费看| 一区二区三区日| 老司机午夜精品视频| 欧美疯狂性受xxxxx另类| 貂蝉被到爽流白浆在线观看| 日韩影视高清在线观看| 精品乱人伦一区二区三区| 国产性生交xxxxx免费| 999精品网| 夜夜精品视频一区二区| 影音先锋欧美在线| jzzjzzjzz亚洲成熟少妇| 国产亚洲美州欧州综合国| 久久综合九色综合网站| 日本一本草久在线中文| 99麻豆久久久国产精品免费优播| av噜噜色噜噜久久| xxxx18国产| 国产白丝网站精品污在线入口| 91在线观看免费高清| 99在线小视频| 国产麻豆精品95视频| 亚洲最大av网| 丰满人妻一区二区三区四区53 | 奇米影视亚洲色图| 国产嫩草在线视频| 亚洲动漫第一页| 久久久久久久久久久99| 97人澡人人添人人爽欧美| 精品国产91乱高清在线观看| 丰满少妇被猛烈进入高清播放| 伊人色综合一区二区三区影院视频 | √天堂资源地址在线官网| 久久精品视频一区| 欧美日韩在线精品| 人成在线免费视频| 久久久青草青青国产亚洲免观| 久久影院理伦片| 国产女人在线观看| 中文字幕欧美激情| 亚洲欧美在线网| 欧美三级电影一区二区三区| 成人综合婷婷国产精品久久| 黑人中文字幕一区二区三区| 人妻精品无码一区二区| 成人小视频免费观看| 国产精成人品localhost| 亚洲成人77777| 国产精品一区久久久久| 99久re热视频这里只有精品6| 999精品国产| 国产精品1区二区.| 国产精选一区二区| av综合在线观看| 91香蕉视频在线| 日本不卡一区二区三区视频| 大胆av不用播放器在线播放| 欧美激情一区二区三区不卡| 一区二区三视频| 调教一区二区| 精品久久久视频| 国内自拍视频一区| 国产人与zoxxxx另类91| 日韩电影免费观看在线观看| 9.1成人看片免费版| 日韩精品一区二区三区免费观看| 日韩在线观看免费av| 男人操女人的视频网站| 欧美日韩精品| 欧美亚洲国产日本| 亚洲大尺度在线观看| 久久er精品视频| 99re国产视频| 欧美理论在线观看| 亚洲丝袜美腿综合| 成年人视频观看| 成人免费毛片嘿嘿连载视频…| 日韩一区二区中文字幕| 国产精品一区二区人妻喷水| 九九亚洲精品| 超碰91人人草人人干| 日本三级黄色大片| 另类小说一区二区三区| 国产99午夜精品一区二区三区| 欧美扣逼视频| 亚洲精品国产品国语在线app| 欧美色图色综合| 日本精品国产| 国产一区二区三区在线看| 免费在线观看h片| 先锋亚洲精品| 国产日韩欧美在线视频观看| 天天综合网天天综合| 国产精品久久三| 欧美精品自拍视频| 亚洲香蕉久久| 亚洲欧美变态国产另类| 极品久久久久久| 日韩和欧美一区二区三区| 97人人香蕉| 国产午夜精品一区理论片| 偷偷要91色婷婷| 日韩高清在线一区二区| 国产99久久| 高清欧美性猛交xxxx| 一区不卡在线观看| 久久久天堂av| 男人日女人下面视频| 国产日本亚洲| 亚洲人成在线观看| 日日噜噜噜噜人人爽亚洲精品| 国产黄人亚洲片| 在线观看一区二区三区三州| 成人福利av| 亚洲国内精品在线| 欧美日韩激情在线观看| 久久99久久精品| 国模精品一区二区三区| 福利影院在线看| 日韩一区二区中文字幕| 日韩在线视频免费看| 日韩avvvv在线播放| 欧美日韩精品久久| 色是在线视频| 亚洲国产天堂久久综合| 毛片a片免费观看| 韩国理伦片一区二区三区在线播放| 日韩欧美精品一区二区| 午夜影院在线播放| 日韩av一卡二卡| 国产情侣在线视频| 成人av资源在线| 人体内射精一区二区三区| 欧美日本三级| 中文字幕在线精品| 国产精品久久久久久69| 日韩一区有码在线| 爱爱爱爱免费视频| 99久久99热这里只有精品| 国产精品久久久久久久久久久久久| 理论视频在线| 欧美中文字幕久久| 呻吟揉丰满对白91乃国产区| 日韩精品亚洲一区二区三区免费| 亚洲一区三区在线观看| 日韩黄色三级| 欧美成人午夜激情| 亚洲免费黄色片| 亚洲成国产人片在线观看| 人体私拍套图hdxxxx| 在线一区视频| 欧美日韩精品中文字幕一区二区| 精品69视频一区二区三区| 丝袜亚洲欧美日韩综合| 国产乱子伦精品无码码专区| 亚洲精品国产精华液| 婷婷五月精品中文字幕| 亚洲深夜福利| 午夜一区二区三视频在线观看| 国产成人77亚洲精品www| 亚洲欧美日韩另类| 99国产精品99| 午夜欧美2019年伦理| 西西444www无码大胆| 久久国产剧场电影| 国产女主播自拍| 美女久久久久| 国产主播精品在线| 第四色日韩影片| 亚洲人成网在线播放| 国产欧美日韩成人| 亚洲午夜久久久久| 欧美一区二区三区成人精品| 久久99精品国产91久久来源| 日韩黄色短视频| 国产在视频线精品视频www666| 国产精品三级美女白浆呻吟| 神马午夜伦理不卡| 亚洲欧美综合另类中字| a级片免费视频| 亚洲3atv精品一区二区三区| 亚洲一二三在线观看| 成人动漫av在线| 亚洲一区日韩精品| 91久久久久| 五月天亚洲综合情| xvideos.蜜桃一区二区| 成人福利网站在线观看| 欧美久久天堂| 欧美大码xxxx| 国产爆初菊在线观看免费视频网站 | 亚洲成人午夜电影| 久久久久亚洲AV成人无在| 国产精品18久久久久久久久久久久 | 中文字幕亚洲在| 一级国产黄色片| 国产精品一区不卡| 国产激情在线观看视频| 在线亚洲一区| 日本一级黄视频| 日韩一区欧美| 久久伊人资源站| 成人av综合网| 亚洲自拍偷拍区| 国产欧美自拍| 国产日韩精品视频| 亚洲三级欧美| 欧美激情综合亚洲一二区| 免费av在线网站| 一道本无吗dⅴd在线播放一区| 色屁屁草草影院ccyycom| 欧美专区亚洲专区| 中日韩在线观看视频| 欧美日韩国产丝袜美女| 青娱乐av在线| 亚洲美女在线国产| 99久久久无码国产精品不卡| 久久久国产精品午夜一区ai换脸| 91精产国品一二三产区别沈先生| 精品一二线国产| 2025韩国理伦片在线观看| 久久一区亚洲| 日本中文字幕网址| 国产精品第十页| 99热亚洲精品| 在线高清一区| 国产精品成人久久电影| 欧美日韩1区| av一区二区三区免费观看| 国产精品99一区二区三| 99久re热视频精品98| 中文字幕乱码亚洲无线精品一区| 一区二区三区四区欧美日韩| 日韩一区二区中文| 国产一区一区三区| 97久久视频| 亚洲人成网站在线观看播放| 亚洲精品成人无限看| 97超碰人人爱| 国产综合欧美| 日本十八禁视频无遮挡| 欧美亚洲自偷自偷| 少妇高潮喷水在线观看| 日韩精品国产精品| 无限资源日本好片| 韩国精品久久久| 无码人妻一区二区三区免费n鬼沢| 国产.欧美.日韩| 国产精品99久久久精品无码| 久久色在线观看| 精品无码人妻一区二区免费蜜桃| 国产色综合一区| 青青青视频在线免费观看| 亚洲人午夜精品天堂一二香蕉| 丰满少妇被猛烈进入一区二区| 狠狠爱在线视频一区| 日韩黄色一级视频| 欧美理论电影在线| 精品国产无码AV| 日韩精品在线电影| 国模精品一区二区| 色综合久久88| 国产精品专区免费| 成人国产在线视频| 57pao国产一区二区| 久久青青草原| 日韩一区亚洲二区| 欧美 日韩精品| 久久精品999| 91丝袜在线观看| 欧美国产禁国产网站cc| 欧洲猛交xxxx乱大交3| 91国在线观看| 丰满人妻一区二区| 中日韩美女免费视频网址在线观看| 免费观看在线黄色网| 国外成人在线播放| 女生影院久久| 国产美女99p| 秋霞欧美视频| youjizz.com在线观看| 日韩不卡一二三区| 亚洲精品久久一区二区三区777| 国产精品久久久久久一区二区三区| 久久国产精品波多野结衣| 91高清视频免费看| 男人天堂一区二区| 久久天天躁夜夜躁狠狠躁2022| 97人人在线视频| 成人欧美一区二区| 久久在线电影| 农村妇女精品一二区| 国产成人免费在线| 国产成人av一区二区三区不卡| 亚洲超丰满肉感bbw| 国产一区二区麻豆| 亚洲欧美在线免费观看| 成人性生交大片免费看网站| 国产日韩欧美在线看| 午夜欧洲一区| 精品国产一二三四区| 国产91精品在线观看| 国产jizz18女人高潮| 欧美专区日韩专区| 深夜福利在线视频| 欧美成人三级视频网站| 玖玖精品在线| 日本中文不卡| 久久久777| 亚洲天堂资源在线| 婷婷六月综合网| 免费观看成年人视频| 久久99国产精品自在自在app| 不卡的国产精品| 亚洲一区二区自拍偷拍| 国产在线视频一区二区三区| 日韩女同一区二区三区| 色婷婷综合视频在线观看| 国产精品国产高清国产| 久久免费视频在线观看| 免费福利视频一区| 国产成人无码a区在线观看视频| 国产精品羞羞答答xxdd| 日本a级片视频| 欧美一级生活片| brazzers在线观看| 精品乱码一区二区三区| 国产欧美亚洲一区| 少妇精品一区二区| 一区二区三区中文在线观看| 精品国产av鲁一鲁一区| 久久97精品久久久久久久不卡| 亚洲精品在线播放| 成人一级生活片| 成人丝袜高跟foot| 日本中文字幕第一页| 精品偷拍一区二区三区在线看| 亚洲女色av| 日本不卡在线观看| 校园激情久久| 你懂得在线观看| 日韩欧美一区在线观看| 羞羞视频在线免费国产| 福利精品视频| 激情成人亚洲| 毛茸茸多毛bbb毛多视频| 色哟哟日韩精品| 国产在线色视频| 成人xxxxx| 久久久精品性| 岛国片在线免费观看| 日韩欧美一二三| 日韩av影片| 日韩视频在线免费播放| 国产**成人网毛片九色 | 亚洲欧美另类视频|