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

PHP混合Go協(xié)程并發(fā)

開發(fā) 后端
通過設(shè)置 runtime.GOMAXPROCS(1) 讓 golang 的進(jìn)程變成單線程執(zhí)行的。類似python用gevent的效果。然后通過調(diào)度多個(gè)協(xié)程實(shí)現(xiàn)異步I/O并發(fā)。php作為一個(gè)子函數(shù)跑在go的進(jìn)程內(nèi),php需要yield到其他協(xié)程時(shí),通過回調(diào)到golang函數(shù)來實(shí)現(xiàn)。從php里調(diào)用go提供的子函數(shù)時(shí),go保證保存php的當(dāng)前上下文。

[[174762]]

想法很簡單。通過設(shè)置 runtime.GOMAXPROCS(1) 讓 golang 的進(jìn)程變成單線程執(zhí)行的。類似python用gevent的效果。然后通過調(diào)度多個(gè)協(xié)程實(shí)現(xiàn)異步I/O并發(fā)。php作為一個(gè)子函數(shù)跑在go的進(jìn)程內(nèi),php需要yield到其他協(xié)程時(shí),通過回調(diào)到golang函數(shù)來實(shí)現(xiàn)。從php里調(diào)用go提供的子函數(shù)時(shí),go保證保存php的當(dāng)前上下文。當(dāng)協(xié)程執(zhí)行權(quán)讓渡回來的時(shí)候,把原來的php上下文恢復(fù)。關(guān)鍵的代碼在:

  1.  // 保存當(dāng)前協(xié)程上的php上下文    
  2. oldServerCtx := engine.ServerContextGet() 
  3.     fmt.Println(oldServerCtx) 
  4.     defer engine.ServerContextSet(oldServerCtx) 
  5.     oldExecutorCtx := engine.ExecutorContextGet() 
  6.     fmt.Println(oldExecutorCtx) 
  7.     defer engine.ExecutorContextSet(oldExecutorCtx) 
  8.     oldCoreCtx := engine.CoreContextGet() 
  9.     fmt.Println(oldCoreCtx) 
  10.     defer engine.CoreContextSet(oldCoreCtx) 
  11.  
  12. // 放棄全局的鎖,使得其他的協(xié)程可以開始執(zhí)行php 
  13.     engineLock.Unlock() 
  14.     defer engineLock.Lock()  

ServerContextGet 這幾個(gè)函數(shù)是我加的,獲得的是php的(EG/SG/PG)這三個(gè)全局context(參見:http://www.cnblogs.com/chance...)。修改過的github.com/deuill/go-php的源代碼在:https://github.com/taowen/go-...

完整的php/go混合協(xié)程的demo: 

  1. package main 
  2.  
  3. import ( 
  4.     "fmt" 
  5.     "github.com/deuill/go-php/engine" 
  6.     "os" 
  7.     "runtime" 
  8.     "time" 
  9.     "sync" 
  10.  
  11. type TestObj struct{} 
  12.  
  13. func newTestObj(args []interface{}) interface{} { 
  14.     return &TestObj{} 
  15. var engineLock *sync.Mutex 
  16.  
  17. func (self *TestObj) Hello() { 
  18.     oldServerCtx := engine.ServerContextGet() 
  19.     fmt.Println(oldServerCtx) 
  20.     defer engine.ServerContextSet(oldServerCtx) 
  21.     oldExecutorCtx := engine.ExecutorContextGet() 
  22.     fmt.Println(oldExecutorCtx) 
  23.     defer engine.ExecutorContextSet(oldExecutorCtx) 
  24.     oldCoreCtx := engine.CoreContextGet() 
  25.     fmt.Println(oldCoreCtx) 
  26.     defer engine.CoreContextSet(oldCoreCtx) 
  27.     engineLock.Unlock() 
  28.     defer engineLock.Lock() 
  29.     time.Sleep(time.Second
  30.     fmt.Println("sleep done"
  31.  
  32. func main() { 
  33.     runtime.GOMAXPROCS(1) 
  34.     theEngine, err := engine.New() 
  35.     engineLock = &sync.Mutex{} 
  36.     if err != nil { 
  37.         fmt.Println(err) 
  38.     } 
  39.     _, err = theEngine.Define("TestObj", newTestObj) 
  40.     wg := &sync.WaitGroup{} 
  41.     wg.Add(2) 
  42.     before := time.Now() 
  43.     fmt.Println("1"
  44.     go func() { 
  45.         engineLock.Lock() 
  46.         defer engineLock.Unlock() 
  47.         context1, err := theEngine.NewContext() 
  48.         if err != nil { 
  49.             fmt.Println(err) 
  50.         } 
  51.         context1.Output = os.Stdout 
  52.         if err != nil { 
  53.             fmt.Println(err) 
  54.         } 
  55.         fmt.Println("1 enter"
  56.         _, err = context1.Eval("$testObj = new TestObj(); $testObj->Hello();"
  57.         fmt.Println("1 back"
  58.         if err != nil { 
  59.             fmt.Println(err) 
  60.         } 
  61.         //theEngine.DestroyContext(context1) 
  62.         fmt.Println("1 done"
  63.         wg.Done() 
  64.     }() 
  65.     fmt.Println("2"
  66.     go func() { 
  67.         engineLock.Lock() 
  68.         defer engineLock.Unlock() 
  69.         context2, err := theEngine.NewContext() 
  70.         if err != nil { 
  71.             fmt.Println(err) 
  72.         } 
  73.         if err != nil { 
  74.             fmt.Println(err) 
  75.         } 
  76.         context2.Output = os.Stdout 
  77.         fmt.Println("2 enter"
  78.         _, err = context2.Eval("$testObj = new TestObj(); $testObj->Hello();"
  79.         fmt.Println("2 back"
  80.         if err != nil { 
  81.             fmt.Println(err) 
  82.         } 
  83.         //theEngine.DestroyContext(context2) 
  84.         fmt.Println("2 done"
  85.         wg.Done() 
  86.     }() 
  87.     wg.Wait() 
  88.     after := time.Now() 
  89.     fmt.Println(after.Sub(before)) 
  90.  

執(zhí)行結(jié)果是

  1. 2 enter 
  2. {0x2cf2930 {<nil> <nil> <nil> 0 <nil> <nil> <nil> <nil> 0 0 0 [0 0 0 0 0] <nil> <nil> <nil> <nil> <nil> <nil> <nil> 0 0 <nil> 1000 [0 0 0 0]} {{<nil> <nil> 0 16 0x7f682e819780 0 [0 0 0 0 0 0 0] <nil>} 0 1 [0 0 0] <nil> <nil>} 0 0 0 [0 0 0 0 0 0] {0 0 0 0 0 0 0 0 0 0 0 {0 0} {0 0} {0 0} [0 0 0]} 0x2a00270 0x2a00f60 <nil> 8388608 0 1 [0 0 0] 0 {8 7 2 [0 0 0 0] 0 0x29f4520 0x29f4520 0x29f4470 0x29f4420 <nil> 1 0 0 [0 0 0 0 0]} <nil> {0 [0 0 0 0 0 0 0] <nil> <nil> <nil> <nil>} 0 [0 0 0 0 0 0 0]} 
  3. {0x7ffd30bac588 {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 2 0 0 [0 0]} 0x7f682f01b928 {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1 0 0 [0 0]} 0x7f682f01b948 [<nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil>] 0x7f682f01ba60 0x7f682f01b960 0x7f682f167168 0x7f682f01ba88 {64 63 5 [0 0 0 0] 0 0x7f682f1972d8 0x7f682f1972d8 0x7f682f1993f8 0x7f682f1970c8 0x7f682e862d10 0 0 1 [0 0 0 0 0]} {8 0 0 [0 0 0 0] 0 <nil> <nil> <nil> 0x7f682f016a00 <nil> 0 0 1 [0 0 0 0 0]} 0x7ffd30bac590 22527 0 0 [0 0 0 0] 0x7f682f197640 0x29f4f80 0x29f4fd0 0x29f5070 <nil> 0x2cf2950 0x7f682f1989c0 14 0 1 [0 0 0] <nil> <nil> 0 1 [0 0 0 0 0 0] {8 0 0 [0 0 0 0] 1 <nil> <nil> <nil> 0x7f682f016a00 0x7f682e883140 0 0 1 [0 0 0 0 0]} {8 0 0 [0 0 0 0] 0 <nil> <nil> <nil> 0x7f682f016a00 0x7f682e8831d0 1 0 0 [0 0 0 0 0]} 0x7f682f167088 0 [0 0 0 0] <nil> <nil> {0 0 <nil>} {0 0 <nil> <nil> 0 [0 0 0 0 0 0 0]} {0 0 <nil> <nil> 0 [0 0 0 0 0 0 0]} 0 [0 0 0 0] <nil> 0 0 0x29fb2e0 <nil> <nil> {0x7f682f187030 2 1024 -1 [0 0 0 0]} <nil> <nil> <nil> [{0x7f682e915050 [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] 0 0 149 8 8 8} {0x7f682e915050 [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] 0 0 149 8 8 8} {0x7f682e915050 [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] 0 0 149 8 8 8}] 0x7f682f167168 <nil> {0 [0 0 0 0] <nil> 0 [0 0 0 0] 0 0 [0 0 0 0] <nil> 0 [0 0 0 0] <nil>} 1 [0 0 0 0 0 0 0] <nil> 0x7f682f01bde8 895 [0 0 0 0 0 0] [<nil> <nil> <nil> <nil>]} 
  4. {1 [0 0 0 0 0 0 0] 0 0 0 [0 0 0 0 0 0] <nil> 0x29ff9a0 17 134217728 -1 0 0 0 1 [0 0 0 0] 1024 0 0 1 [0 0 0 0 0] 0x2a00870 <nil> 0x2a010a0 0x7f682ecc58b0 <nil> 0x7f682ecc5c23 <nil> <nil> <nil> 2097152 <nil> <nil> 0x2a00180 0x2a00230 <nil> <nil> <nil> {0x7f682ec91aa8 0x7f682ec91aa8} 0x2a00910 {0 0 0 [0 0 0 0] 0 <nil> <nil> <nil> <nil> <nil> 0 0 0 [0 0 0 0 0]} 0 0 0 [0 0 0] {0x2b6dc10 0x2b6dc10 1 8 <nil> 1 [0 0 0 0 0 0 0] <nil>} [0x7f682f197330 0x7f682f197040 0x7f682f197410 <nil> <nil> 0x7f682f1974f0] 0 1 1 [0 0 0 0 0] 0x7f682ec9544b 0x7f682ec9544b 0 0 [0 0 0 0 0 0] 0 [0 0 0 0 0 0 0 0] 1 1 1 1 1 0 1 [0] 0 [0 0 0 0] <nil> <nil> 0 [0 0 0 0] 0x2cf27c0 <nil> 0 0 [0 0 0 0 0 0] 64 1000 0 [0 0 0 0 0 0 0] 0x7f682ecc6270 300 0x2a009b0 1 [0 0 0 0 0 0 0] <nil> 0 [0 0 0 0 0 0 0]} 
  5. 1 enter 
  6. {0x7f6818000aa0 {<nil> <nil> <nil> 0 <nil> <nil> <nil> <nil> 0 0 0 [0 0 0 0 0] <nil> <nil> <nil> <nil> <nil> <nil> <nil> 0 0 <nil> 1000 [0 0 0 0]} {{<nil> <nil> 0 16 0x7f682e819780 0 [0 0 0 0 0 0 0] <nil>} 0 1 [0 0 0] <nil> <nil>} 0 0 0 [0 0 0 0 0 0] {0 0 0 0 0 0 0 0 0 0 0 {0 0} {0 0} {0 0} [0 0 0]} 0x2a00270 0x2a00f60 <nil> 8388608 0 1 [0 0 0] 0 {8 7 2 [0 0 0 0] 0 0x29f4520 0x29f4520 0x29f4470 0x29f4420 <nil> 1 0 0 [0 0 0 0 0]} <nil> {0 [0 0 0 0 0 0 0] <nil> <nil> <nil> <nil>} 0 [0 0 0 0 0 0 0]} 
  7. {0x7f682a4cccd8 {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 2 0 0 [0 0]} 0x7f682f01b928 {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1 0 0 [0 0]} 0x7f682f01b948 [<nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil>] 0x7f682f01ba60 0x7f682f01b960 0x7f682802f110 0x7f682f01ba88 {64 63 5 [0 0 0 0] 0 0x7f682f197a00 0x7f682f197a00 0x7f682f198368 0x7f682f198fa0 0x7f682e862d10 0 0 1 [0 0 0 0 0]} {8 0 0 [0 0 0 0] 0 <nil> <nil> <nil> 0x7f682f016a00 <nil> 0 0 1 [0 0 0 0 0]} 0x7f682a4ccce0 22527 0 0 [0 0 0 0] 0x7f682f197d28 0x29f4f80 0x29f4fd0 0x29f5070 <nil> 0x2cf2950 0x7f682f1983e8 14 0 1 [0 0 0] <nil> <nil> 0 1 [0 0 0 0 0 0] {8 0 0 [0 0 0 0] 1 <nil> <nil> <nil> 0x7f682f016a00 0x7f682e883140 0 0 1 [0 0 0 0 0]} {8 0 0 [0 0 0 0] 0 <nil> <nil> <nil> 0x7f682f016a00 0x7f682e8831d0 1 0 0 [0 0 0 0 0]} 0x7f682802f030 0 [0 0 0 0] <nil> <nil> {0 0 <nil>} {0 0 <nil> <nil> 0 [0 0 0 0 0 0 0]} {0 0 <nil> <nil> 0 [0 0 0 0 0 0 0]} 0 [0 0 0 0] <nil> 0 0 0x29fb2e0 <nil> <nil> {0x7f682804efd8 2 1024 -1 [0 0 0 0]} <nil> <nil> <nil> [{0x7f682e915050 [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] 0 0 149 8 8 8} {0x7f682e915050 [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] 0 0 149 8 8 8} {0x7f682e915050 [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0] 0 0 149 8 8 8}] 0x7f682802f110 <nil> {0 [0 0 0 0] <nil> 0 [0 0 0 0] 0 0 [0 0 0 0] <nil> 0 [0 0 0 0] <nil>} 1 [0 0 0 0 0 0 0] <nil> 0x7f682f01bde8 895 [0 0 0 0 0 0] [<nil> <nil> <nil> <nil>]} 
  8. {1 [0 0 0 0 0 0 0] 0 0 0 [0 0 0 0 0 0] <nil> 0x29ff9a0 17 134217728 -1 0 0 0 1 [0 0 0 0] 1024 0 0 1 [0 0 0 0 0] 0x2a00870 <nil> 0x2a010a0 0x7f682ecc58b0 <nil> 0x7f682ecc5c23 <nil> <nil> <nil> 2097152 <nil> <nil> 0x2a00180 0x2a00230 <nil> <nil> <nil> {0x7f682ec91aa8 0x7f682ec91aa8} 0x2a00910 {0 0 0 [0 0 0 0] 0 <nil> <nil> <nil> <nil> <nil> 0 0 0 [0 0 0 0 0]} 0 0 0 [0 0 0] {0x2b6dc10 0x2b6dc10 1 8 <nil> 1 [0 0 0 0 0 0 0] <nil>} [0x7f682f197a58 0x7f682f198ce0 0x7f682f197b38 <nil> <nil> 0x7f682f197c18] 0 1 1 [0 0 0 0 0] 0x7f682ec9544b 0x7f682ec9544b 0 0 [0 0 0 0 0 0] 0 [0 0 0 0 0 0 0 0] 1 1 1 1 1 0 1 [0] 0 [0 0 0 0] <nil> <nil> 0 [0 0 0 0] 0x2cf27c0 <nil> 0 0 [0 0 0 0 0 0] 64 1000 0 [0 0 0 0 0 0 0] 0x7f682ecc6270 300 0x2a009b0 1 [0 0 0 0 0 0 0] <nil> 0 [0 0 0 0 0 0 0]} 
  9. sleep done 
  10. 1 back 
  11. 1 done 
  12. sleep done 
  13. 2 back 
  14. 2 done 
  15. 1.00099211s 

可以看到兩個(gè)sleep 1s,最終只用了1.00099211s。說明協(xié)程是并發(fā)的。

一些性能指標(biāo)。走h(yuǎn)ttp調(diào)用后端,在i7-6700k上,用ab -n 100 -c 4 可以跑出這樣的結(jié)果

  1. Requests per second:    3183.70 [#/sec] (mean) 
  2. Time per request:       1.256 [ms] (mean) 
  3. Time per request:       0.314 [ms] (mean, across all concurrent requests)  

如果不用http調(diào)用后端,直接php=>go返回"hello",則可以達(dá)到

  1. Requests per second: 10073.54 [#/sec] (mean) 
  2.  
  3. Time per request: 0.397 [ms] (mean) 
  4.  
  5. Time per request: 0.099 [ms] (mean, across all concurrent requests)  

這些指標(biāo)只說明了協(xié)程切換的成本。實(shí)際的收益取決于后端的http服務(wù)的延遲,如果耗時(shí)很長,通過協(xié)程并發(fā)則可以收益明顯。

這個(gè)實(shí)驗(yàn)說明了可以用golang實(shí)現(xiàn)一個(gè)代替nginx+php-fpm的應(yīng)用服務(wù)器。并且提供了一條從php向golang遷移的平滑遷移路徑。在一個(gè)應(yīng)用里混合PHP和Go兩種語言。

并且可以通過提供golang函數(shù)給php調(diào)用的方式實(shí)現(xiàn)I/O的異步化。像libcurl這樣的擴(kuò)展自身是支持異步回調(diào)的,只是php是同步的所以只給php暴露了同步的execute。有了Golang之后,可以把execute變成對(duì)異步execute+callback的包裝,從而實(shí)現(xiàn)基于協(xié)程的調(diào)度。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2018-12-04 14:00:41

協(xié)程編程模式PHP

2024-06-27 07:56:49

2021-09-27 23:28:29

Go多協(xié)程并發(fā)

2017-05-02 11:38:00

PHP協(xié)程實(shí)現(xiàn)過程

2025-06-03 00:00:02

Go協(xié)程鎖機(jī)制

2024-12-03 15:15:22

2023-11-24 11:15:21

協(xié)程編程

2023-07-27 13:46:10

go開源項(xiàng)目

2017-08-10 15:50:44

PHP協(xié)程阻塞

2021-04-25 09:36:20

Go協(xié)程線程

2025-08-06 01:22:00

并發(fā)編程數(shù)據(jù)

2023-10-12 09:46:00

并發(fā)模型線程

2025-06-05 01:22:00

線程虛擬內(nèi)存系統(tǒng)

2023-07-13 08:06:05

應(yīng)用協(xié)程阻塞

2024-05-29 08:05:15

Go協(xié)程通信

2025-02-28 09:04:08

2021-09-16 09:59:13

PythonJavaScript代碼

2022-10-28 10:45:22

Go協(xié)程GoFrame

2021-05-13 21:58:00

高并發(fā)應(yīng)用Asyncio

2024-08-27 09:46:39

Go協(xié)程效率
點(diǎn)贊
收藏

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

免费在线视频欧美| 做爰视频毛片视频| 欧美日韩导航| 性久久久久久| 国产亚洲视频在线| 国产亚洲色婷婷久久| 天天操天天干天天操| 亚洲欧美日本视频在线观看| 中文字幕亚洲欧美在线| 初高中福利视频网站| 日本午夜大片a在线观看| 欧美激情一区二区三区全黄 | 国产这里有精品| 男人的天堂久久| 欧美日韩高清一区二区不卡 | 成人免费视频入口| 亚洲超碰在线观看| 在线观看日产精品| 国产aaa免费视频| 又爽又大又黄a级毛片在线视频| 国产69精品久久777的优势| 国产精品va在线播放| 美女伦理水蜜桃4| 成人免费在线观看视频| 亚洲1区2区3区视频| 一本一道久久久a久久久精品91| 欧美 日韩 人妻 高清 中文| 日韩高清一区在线| 97在线视频观看| 538任你躁在线精品视频网站| 欧美亚洲激情| 国产视频久久网| 国产女主播在线播放| 亚洲影视资源| 欧美视频一区二区| 人妻熟妇乱又伦精品视频| 在线电影福利片| 国产精品国产三级国产aⅴ原创| 免费亚洲一区二区| 天堂网av在线播放| 粉嫩蜜臀av国产精品网站| 91久久国产精品91久久性色| 国产成人自拍偷拍| 久久一本综合频道| 全球成人中文在线| 国产午夜在线播放| 亚洲国产一区二区三区a毛片| 久久在线免费观看视频| www.av免费| 亚洲电影在线一区二区三区| 视频直播国产精品| 最新日韩免费视频| 日本大胆欧美| 中文字幕最新精品| 日本黄色激情视频| 第一社区sis001原创亚洲| 伊是香蕉大人久久| 娇妻被老王脔到高潮失禁视频| 久久99影视| 在线观看精品国产视频| 女女互磨互喷水高潮les呻吟| 亚洲精品aaaaa| 欧美综合视频在线观看| 日日摸天天爽天天爽视频| 91久久国产综合久久91猫猫| 国产精品第一页第二页第三页| 四虎影视永久免费在线观看一区二区三区| 国产一区二区三区四区视频 | 美州a亚洲一视本频v色道| 日韩黄色小视频| 国产精欧美一区二区三区| 在线观看美女av| 99久久夜色精品国产亚洲1000部| 日韩资源在线观看| www深夜成人a√在线| 亚洲综合激情在线| 噜噜噜在线观看免费视频日韩| 99麻豆久久久国产精品免费优播| 91久色国产| 熟妇人妻一区二区三区四区| 91欧美一区二区| 色综合666| 毛片在线播放a| 一区av在线播放| 18禁男女爽爽爽午夜网站免费| 黄色片网站在线观看| 亚洲色图一区二区| 欧美国产一区二区在线| 大胆av不用播放器在线播放| 国产精品国产三级国产有无不卡 | 91九色蝌蚪成人| 可以免费观看的毛片| 麻豆精品在线播放| 成人日韩在线电影| 少妇高潮一区二区三区69| 国产视频一区在线播放| 国产一二三四五| 小早川怜子影音先锋在线观看| 欧美日韩一级片在线观看| 粗大的内捧猛烈进出视频| 欧美黄页免费| 亚洲精品一区二区三区香蕉| 欧美老熟妇乱大交xxxxx| 久久香蕉国产| 欧美一乱一性一交一视频| 中文在线资源天堂| 99久久精品免费看| 国产精品久久99久久| 国产又黄又爽视频| 91丨porny丨国产| 99视频精品全部免费看| 免费观看亚洲| 午夜精品久久久久久久久久| 日本人视频jizz页码69| 超碰97久久| 色琪琪综合男人的天堂aⅴ视频| 日本三级黄色大片| 精品在线免费观看| 欧美视频小说| 不卡一本毛片| 91精品国产一区二区三区 | 在线日韩一区| 久久久久国产精品免费| 91久久国语露脸精品国产高跟| 91蜜桃在线免费视频| 精品视频在线观看一区二区| jizzyou欧美16| 亚洲欧美日韩精品久久奇米色影视| 亚洲天堂成人av| 欧美一区二区三区另类| 国产精品美女主播在线观看纯欲| 亚洲色图狠狠干| 亚洲国产一二三| 国产精品又粗又长| 麻豆国产一区| 亚洲激情视频网| 日日骚一区二区三区| 久久精品二区亚洲w码| 欧美日韩综合网| 台湾佬中文娱乐久久久| 亚洲激情第一页| 国产精品美女毛片真酒店| 国产黄色精品网站| 国产乱码精品一区二区三区不卡| 黄色在线观看网站| 欧美精品久久99久久在免费线 | 久久久精品毛片| 94色蜜桃网一区二区三区| 美女黄色免费看| 91午夜精品| 久久久久久九九九| 色一情一乱一区二区三区| 亚洲成人自拍网| a级一a一级在线观看| 在线免费观看欧美| 国产97在线|亚洲| 婷婷亚洲一区二区三区| 欧美日韩精品在线观看| 日本黄色特级片| 婷婷六月综合| 91天堂在线观看| 成人欧美在线| 黑人巨大精品欧美一区免费视频 | 伊人影院综合在线| 97精品国产| 成人啪啪免费看| 日本高清在线观看视频| 日韩精品一区二区三区视频播放| 国产亚洲精品女人久久久久久| www.亚洲国产| 男人天堂网视频| 精品免费av| 国产在线日韩在线| 欧美xxxx免费虐| 日韩国产欧美精品在线| 亚洲av综合一区| 综合久久国产九一剧情麻豆| www.色.com| 亚洲人成久久| 日韩在线导航| 国产理论电影在线| 日韩av有码在线| 最近中文字幕在线观看视频| 亚洲欧美aⅴ...| 天天插天天射天天干| 日韩电影一二三区| 污污污污污污www网站免费| 婷婷综合电影| 成人黄色大片在线免费观看| 91老司机福利在线| 中文字幕亚洲国产| 日本精品久久久久| 欧美日韩日日夜夜| 日本一级黄色录像| 国产精品私人影院| 天天躁日日躁狠狠躁免费麻豆| 久久精品一区| 女女同性女同一区二区三区按摩| 欧美激情极品| 成人淫片在线看| 亚洲天堂导航| 欧美成人激情图片网| 免费在线性爱视频| 日韩欧美国产综合在线一区二区三区| 国产尤物在线视频| 亚洲欧美经典视频| 四虎国产精品成人免费入口| 粉嫩嫩av羞羞动漫久久久| 免费黄色一级网站| 亚洲人成久久| 91传媒免费视频| 欧美激情黄色片| 欧美二级三级| 国产 日韩 欧美 综合 一区| 成人乱色短篇合集| 成人h在线观看| 91干在线观看| 欧美家庭影院| xx视频.9999.com| 国产视频网站在线| 亚洲精品美女在线| www.日韩高清| 欧美高清精品3d| 曰批又黄又爽免费视频| 精品久久久视频| 久久久久噜噜噜亚洲熟女综合| 国产精品麻豆网站| 国产美女免费网站| 久久色在线观看| 男人舔女人下面高潮视频| 一个色综合网| 一本久久a久久精品vr综合| 免费视频一区三区| 免费av在线一区二区| 国内精品国产成人国产三级粉色 | 欧美变态挠脚心| 北条麻妃高清一区| 国产精品va视频| 91精品视频免费| 国产va免费精品观看精品| 成人a在线观看| 色综合视频一区二区三区日韩| 国产精品99久久久久久久久久久久| 欧亚av在线| 欧美一区三区三区高中清蜜桃| 国产激情在线播放| 91av视频在线免费观看| 国产色播av在线| 2019国产精品自在线拍国产不卡| 麻豆理论在线观看| 欧美中文字幕在线播放| jk漫画禁漫成人入口| 日本精品性网站在线观看| 蜜臀国产一区| 国产成人精品一区二区三区| 日韩网站中文字幕| 国产精品你懂得| 日韩毛片网站| 91日本视频在线| 7m精品国产导航在线| 国产乱码精品一区二区三区不卡| 红杏视频成人| 欧美日韩一区在线观看视频| 国产成人一区| 椎名由奈jux491在线播放| 亚洲一区二区日韩| 欧美一区二区激情| 99热精品在线观看| 91av在线免费播放| 精品在线观看视频| 农村末发育av片一区二区| av在线不卡观看免费观看| 精品无码人妻一区| 国产精品污污网站在线观看| 顶级黑人搡bbw搡bbbb搡| 成人a区在线观看| 欧美成人三级伦在线观看| 91蝌蚪porny九色| 国产午夜精品久久久久久久久| 亚洲人成网站色在线观看| 国产在线视频第一页| 午夜精品久久久久久久蜜桃app| 看黄色一级大片| 欧美一区二区精品在线| 午夜福利一区二区三区| 在线免费看av不卡| 欧美性猛片xxxxx免费中国 | 青青草视频国产| aa国产精品| 久久这里只精品| 成人一区在线看| 娇妻被老王脔到高潮失禁视频| 亚洲精品福利视频网站| 探花视频在线观看| 日韩亚洲欧美综合| 免费在线黄色影片| 欧美理论电影在线播放| 韩国美女久久| 91免费看网站| 欧洲美女日日| 大伊香蕉精品视频在线| 日本在线xxx| 久久av中文字幕片| www.中文字幕av| 一区二区三区欧美日| 中文字幕久久网| 日韩高清av一区二区三区| 成人在线观看免费网站| 日韩av黄色在线观看| 91精品国产自产在线丝袜啪| 亚洲 日韩 国产第一区| 国产亚洲午夜| 9.1在线观看免费| 成人欧美一区二区三区| 国产乱码77777777| 亚洲丁香久久久| 视频一区二区三区不卡| 日本欧美爱爱爱| 农村少妇一区二区三区四区五区 | 久久久精品少妇| 色综合色狠狠综合色| 手机在线观看毛片| 欧美xxxx18性欧美| 激情中国色综合| 日本在线播放一区| 国产日韩高清一区二区三区在线| 午夜激情视频网| 国产精品麻豆一区二区 | 欧美岛国在线观看| 欧美成人视屏| 国产精品三级网站| av一区二区在线观看| 黑森林福利视频导航| 99视频精品全部免费在线| 久久久久久久久久一区二区三区| 欧美男同性恋视频网站| h网站在线免费观看| 国产精品福利片| 精品国产91| 免费一级特黄录像| 国产日产亚洲精品系列| 色老头一区二区| 中文字幕成人精品久久不卡| 久久爱91午夜羞羞| 欧美午夜免费| 爽好多水快深点欧美视频| 中文字幕av久久爽一区| 91黄视频在线| 91在线品视觉盛宴免费| 国产精品美乳一区二区免费| 欧美中文一区二区| 激情视频免费网站| 国产精品白丝在线| 99久久一区二区| 九九热这里只有精品免费看| 在线视频亚洲欧美中文| 国产日韩亚洲欧美在线| 成人精品高清在线| 亚洲日本韩国在线| 亚洲精品少妇网址| 成人a在线观看高清电影| 国产精品波多野结衣| 国产精品一级片| 国产精品第一页在线观看| 亚洲精品www久久久久久广东| 蜜桃视频在线观看免费视频| 日本一区二区精品| 老司机午夜精品| 亚洲国产精品免费在线观看| 精品区一区二区| 蜜桃视频在线观看视频| 国产精品91久久| 亚洲女同另类| 污片免费在线观看| 欧美亚洲一区二区三区四区| 久久亚洲天堂| 好吊色欧美一区二区三区 | 特级黄色片视频| 亚洲高清中文字幕| 韩国中文免费在线视频| 国产日产久久高清欧美一区| 国内精品99| 91成人在线免费视频| 日韩一区二区三区高清免费看看| 波多野结衣精品| 日韩高清三级| 成人妖精视频yjsp地址| 日韩欧美在线观看免费| 精品久久免费看| 超碰超碰人人人人精品| 在线精品日韩| 99在线精品一区二区三区| 亚洲怡红院av| 91国在线精品国内播放 | 乱熟女高潮一区二区在线| 久久久久久麻豆| av一区二区三| 国产精品91视频| 99视频一区| 欧美风情第一页|