日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个应用程序多线程误用的分析

發布時間:2024/4/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个应用程序多线程误用的分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、需求和初步實現

很簡單的一個windows服務:客戶端連接郵件服務器,下載郵件(含附件)并保存為.eml格式,保存成功后刪除服務器上的郵件。實現的偽代碼大致如下:

GetAndSaveMail public void Process(){var recordCount = 1000;//每次取出郵件記錄數while (true){using (var client = new Pop3Client()){//1、建立連接,并進行身份認證client.Connect(server, port, useSSL);client.Authenticate(userName, pwd);var messageCount = client.GetMessageCount(); // 郵箱中現有郵件數if (messageCount > recordCount){messageCount = recordCount;}if (messageCount < 1){break;}var listAllMsg = new List<Message>(messageCount); //用于臨時保存取出的郵件//2、取出郵件后填充至列表,每次最多recordCount封郵件for (int i = 1; i <= messageCount; i++) //郵箱索引是基于1開始的,索引范圍: [1, messageCount]{listAllMsg.Add(client.GetMessage(i)); //取出郵件至列表}//3、遍歷并保存至客戶端,格式為.emlforeach (var message in listAllMsg){var emlInfo = new System.IO.FileInfo(string.Format("{0}.eml", Guid.NewGuid().ToString("n")));message.SaveToFile(emlInfo);//保存郵件為.eml格式文件}//4、遍歷并刪除int messageNumber = 1;foreach (var message in listAllMsg){client.DeleteMessage(messageNumber); //刪除郵件(本質上,在關閉連接前只是打上DELETE標簽,并沒有真正刪除) messageNumber++;}//5、斷開連接,真正完成刪除client.Disconnect();if (messageCount < recordCount){break;}}}}

?

開發中接收郵件的時候使用了開源組件Mail.Net(實際上這是OpenSMTP.Net和OpenPop兩個項目的并集),調用接口實現很簡單。代碼寫完后發現基本功能是滿足了,本著在穩定的基礎上更快更有效率的原則,最終進行性能調優。

?

二、性能調優及產生BUG分析

暫時不管這里的耗時操作是屬于計算密集型還是IO密集型,反正有人一看到有集合要一個一個遍歷順序處理,就忍不住有多線程異步并行操作的沖動。有條件異步盡量異步,沒有條件異步,創造條件也要異步,真正發揮多線程優勢,充分利用服務器的強大處理能力,而且也自信中規中矩寫了很多多線程程序,這個業務邏輯比較簡單而且異常處理也較容易控制(就算有問題也有補償措施,可以在后期處理中完善它),理論上每天需要查收的郵件的數量也不會太多,不會長時間成為CPU和內存殺手,這樣的多線程異步服務實現應該可以接受。而且根據分析,顯而易見,這是一個典型的頻繁訪問網絡IO密集型的應用程序,當然要從IO處理上下功夫。

?

1、收取郵件

從Mail.Net的示例代碼中看到,取郵件需要一個從1開始的索引,而且必須有序。如果異步發起多個請求,這個索引怎么傳入呢?必須有序這一條開始讓我有點猶豫,如果通過Lock或者Interlocked等同步構造,很顯然就失去了多線程的優勢,我猜可能還不如順序同步獲取速度快。

分析歸分析,我們還是寫點代碼試試看效率如何。

快速寫個異步方法傳遞整型參數,同時通過Interlocked控制提取郵件總數的變化,每一個異步方法獲取完了之后通過Lock將Message加入到listAllMsg列表中即可。

郵件服務器測試郵件不多,測試獲取一兩封郵件,嗯,很好,提取郵件成功,初步調整就有收獲,可喜可賀。

?

2、保存郵件

調優過程是這樣的:遍歷并保存為.eml的實現代碼改為使用多線程,將message.SaveToFile保存操作并行處理,經測試,保存一到兩封郵件,CPU沒看出高多少,保存的效率貌似稍有提升,又有點進步。

?

3、刪除郵件

再次調優:仿照多線程保存操作,將遍歷刪除郵件的代碼進行修改,也通過多線程并行處理刪除的操作。好,很好,非常好,這時候我心里想著什么Thread啊,ThreadPool啊,CCR啊,TPL啊,EAP啊,APM啊,把自己知道的能用的全給它用一遍,挑最好用的最優效率的一個,顯得很有技術含量,哇哈哈。

然后,快速寫了個異步刪除方法開始測試。在郵件不多的情況下,比如三兩封信,能正常工作,看起來好像蠻快的。

到這里我心里已經開始準備慶祝大功告成了。

?

4、產生BUG原因分析

從上面的1、2、3獨立效果看,似乎每一個線程都能夠獨立運行而不需要相互通信或者數據共享,而且使用了異步多線程技術,取的快存的快刪的也快,看上去郵件處理將進入最佳狀態。但是最后提取、保存、刪除集成聯調測試。運行了一段時間查看日志,悲劇發生了:

在測試郵件較多的時候,比如二三十封左右,日志里看到有PopServerException異常,好像還有點亂碼,而且每次亂碼好像還不一樣;再測試三兩封信,發現有時能正常工作,有時也拋出PopServerException異常,還是有亂碼,分析出錯堆棧,是在刪除郵件的地方。

我kao,這是要鬧哪樣啊,和郵件服務器關系沒搞好嗎,怎么總是PopServerException異常?

難道,難道是異步刪除方法有問題?異步刪除,索引為1的序號,嗯,索引的問題?還是不太確定。

到這里你能發現多線程處理刪除操作拋出異常的原因嗎?你已經知道原因了?OK,下面的內容對你就毫無意義了,可以不用往下看了。

?

談談我的排查經過。

看日志我初步懷疑是刪除郵件的方法有問題,但是看了一下目測還是可靠的。接著估計是刪除時郵件編碼不正確,后來又想不太可能,同樣的郵件同步代碼查收保存刪除這三個操作就沒有異常拋出。不太放心,又分幾次分別測試了幾封郵件,有附件的沒附件的,html的純文本的,同步代碼處理的很好。

百思不得其解,打開Mail.NET源碼,從DeleteMessage方法跟蹤查看到Mail.Net的Pop3Client類中的SendCommand方法,一下子感覺有頭緒了。DeleteMessage刪除郵件的源碼如下:

DeleteMessage public void DeleteMessage(int messageNumber){AssertDisposed();ValidateMessageNumber(messageNumber);if (State != ConnectionState.Transaction)throw new InvalidUseException("You cannot delete any messages without authenticating yourself towards the server first");SendCommand("DELE " + messageNumber);}

?

最后一行SendCommand需要提交一個DELE命令,跟進去看看它是怎么實現的:

SendCommand private void SendCommand(string command){// Convert the command with CRLF afterwards as per RFC to a byte array which we can writebyte[] commandBytes = Encoding.ASCII.GetBytes(command + "\r\n");// Write the command to the serverOutputStream.Write(commandBytes, 0, commandBytes.Length);OutputStream.Flush(); // Flush the content as we now wait for a response// Read the response from the server. The response should be in ASCIILastServerResponse = StreamUtility.ReadLineAsAscii(InputStream);IsOkResponse(LastServerResponse);}

?

注意InputStream和OutputStream屬性,它們的定義如下(神奇的private修飾屬性,這種寫法少見哪):

Private Property /// <summary>/// This is the stream used to read off the server response to a command/// </summary>private Stream InputStream { get; set; }/// <summary>/// This is the stream used to write commands to the server/// </summary>private Stream OutputStream { get; set; }

?

給它賦值的地方是調用Pop3Client類里的 public void Connect(Stream inputStream, Stream outputStream)方法,而這個Connect方法最終調用的Connect方法如下:

Connect /// <summary>/// Connects to a remote POP3 server/// </summary>/// <param name="hostname">The <paramref name="hostname"/> of the POP3 server</param>/// <param name="port">The port of the POP3 server</param>/// <param name="useSsl">True if SSL should be used. False if plain TCP should be used.</param>/// <param name="receiveTimeout">Timeout in milliseconds before a socket should time out from reading. Set to 0 or -1 to specify infinite timeout.</param>/// <param name="sendTimeout">Timeout in milliseconds before a socket should time out from sending. Set to 0 or -1 to specify infinite timeout.</param>/// <param name="certificateValidator">If you want to validate the certificate in a SSL connection, pass a reference to your validator. Supply <see langword="null"/> if default should be used.</param>/// <exception cref="PopServerNotAvailableException">If the server did not send an OK message when a connection was established</exception>/// <exception cref="PopServerNotFoundException">If it was not possible to connect to the server</exception>/// <exception cref="ArgumentNullException">If <paramref name="hostname"/> is <see langword="null"/></exception>/// <exception cref="ArgumentOutOfRangeException">If port is not in the range [<see cref="IPEndPoint.MinPort"/>, <see cref="IPEndPoint.MaxPort"/> or if any of the timeouts is less than -1.</exception>public void Connect(string hostname, int port, bool useSsl, int receiveTimeout, int sendTimeout, RemoteCertificateValidationCallback certificateValidator){AssertDisposed();if (hostname == null)throw new ArgumentNullException("hostname");if (hostname.Length == 0)throw new ArgumentException("hostname cannot be empty", "hostname");if (port > IPEndPoint.MaxPort || port < IPEndPoint.MinPort)throw new ArgumentOutOfRangeException("port");if (receiveTimeout < -1)throw new ArgumentOutOfRangeException("receiveTimeout");if (sendTimeout < -1)throw new ArgumentOutOfRangeException("sendTimeout");if (State != ConnectionState.Disconnected)throw new InvalidUseException("You cannot ask to connect to a POP3 server, when we are already connected to one. Disconnect first.");TcpClient clientSocket = new TcpClient();clientSocket.ReceiveTimeout = receiveTimeout;clientSocket.SendTimeout = sendTimeout;try{clientSocket.Connect(hostname, port);}catch (SocketException e){// Close the socket - we are not connected, so no need to close stream underneathclientSocket.Close();DefaultLogger.Log.LogError("Connect(): " + e.Message);throw new PopServerNotFoundException("Server not found", e);}Stream stream;if (useSsl){// If we want to use SSL, open a new SSLStream on top of the open TCP stream.// We also want to close the TCP stream when the SSL stream is closed// If a validator was passed to us, use it.SslStream sslStream;if (certificateValidator == null){sslStream = new SslStream(clientSocket.GetStream(), false);}else{sslStream = new SslStream(clientSocket.GetStream(), false, certificateValidator);}sslStream.ReadTimeout = receiveTimeout;sslStream.WriteTimeout = sendTimeout;// Authenticate the serversslStream.AuthenticateAsClient(hostname);stream = sslStream;}else{// If we do not want to use SSL, use plain TCPstream = clientSocket.GetStream();}// Now do the connect with the same stream being used to read and write toConnect(stream, stream); //In/OutputStream屬性初始化}

?

一下子看到了TcpClient對象,這個不就是基于Socket,通過Socket編程實現POP3協議操作指令嗎?毫無疑問需要發起TCP連接,什么三次握手呀,發送命令操作服務器呀…一下子全想起來了。

我們知道一個TCP連接就是一個會話(Session),發送命令(比如獲取和刪除)需要通過TCP連接和郵件服務器通信。如果是多線程在一個會話上發送命令(比如獲取(TOP或者RETR)、刪除(DELE))操作服務器,這些命令的操作都不是線程安全的,這樣很可能出現OutputStream和InputStream數據不匹配而相互打架的情況,這個很可能就是我們看到的日志里有亂碼的原因。說到線程安全,突然恍然大悟,我覺得查收郵件應該也有問題。為了驗證我的想法,我又查看了下GetMessage方法的源碼:

GetMessagepublic Message GetMessage(int messageNumber){AssertDisposed();ValidateMessageNumber(messageNumber);if (State != ConnectionState.Transaction)throw new InvalidUseException("Cannot fetch a message, when the user has not been authenticated yet");byte[] messageContent = GetMessageAsBytes(messageNumber);return new Message(messageContent);}

?

內部的GetMessageAsBytes方法最終果然還是走SendCommand方法:

GetMessage if (askOnlyForHeaders){// 0 is the number of lines of the message body to fetch, therefore it is set to zero to fetch only headersSendCommand("TOP " + messageNumber + " 0");}else{// Ask for the full messageSendCommand("RETR " + messageNumber);}

?

根據我的跟蹤,在測試中拋出異常的亂碼來自于LastServerResponse(This is the last response the server sent back when a command was issued to it),在IsOKResponse方法中它不是以“+OK”開頭就會拋出PopServerException異常:

IsOkResponse /// <summary>/// Tests a string to see if it is a "+OK" string.<br/>/// An "+OK" string should be returned by a compliant POP3/// server if the request could be served.<br/>/// <br/>/// The method does only check if it starts with "+OK"./// </summary>/// <param name="response">The string to examine</param>/// <exception cref="PopServerException">Thrown if server did not respond with "+OK" message</exception>private static void IsOkResponse(string response){if (response == null)throw new PopServerException("The stream used to retrieve responses from was closed");if (response.StartsWith("+OK", StringComparison.OrdinalIgnoreCase))return;throw new PopServerException("The server did not respond with a +OK response. The response was: \"" + response + "\"");}

?

分析到這里,終于知道最大的陷阱是Pop3Client不是線程安全的。終于找到原因了,哈哈哈,此刻我猶如見到女神出現一樣異常興奮心花怒放,高興的差點忘了錯誤的代碼就是自己寫的。

片刻后終于冷靜下來,反省自己犯了很低級的失誤,暈死,我怎么把TCP和線程安全這茬給忘了呢?啊啊啊啊啊啊,好累,感覺再也不會用類庫了。

對了,保存為.eml的時候是通過Message對象的SaveToFile方法,并不需要和郵件服務器通信,所以異步保存沒有出現異常(二進制數組RawMessage也不會數據不匹配),它的源碼是下面這樣的:

Message.SaveToFile /// <summary>/// Save this <see cref="Message"/> to a file.<br/>/// <br/>/// Can be loaded at a later time using the <see cref="LoadFromFile"/> method./// </summary>/// <param name="file">The File location to save the <see cref="Message"/> to. Existent files will be overwritten.</param>/// <exception cref="ArgumentNullException">If <paramref name="file"/> is <see langword="null"/></exception>/// <exception>Other exceptions relevant to file saving might be thrown as well</exception>public void SaveToFile(FileInfo file){if (file == null)throw new ArgumentNullException("file");File.WriteAllBytes(file.FullName, RawMessage);}

?

再來總結看看這個bug是怎么產生的:對TCP和線程安全沒有保持足夠的敏感和警惕,看見for循環就進行性能調優,測試數據不充分,不小心觸雷。歸根結底,產生錯誤的原因是對線程安全考慮不周異步場景選擇不當,這種不當的使用還有很多,比較典型的就是對數據庫連接的誤用。我看過一篇講數據庫連接對象誤用的文章,比如這一篇為什么要關閉數據庫連接,可以不關閉嗎?,當時我也總結過,所以很有印象。現在還是要羅嗦一下,對于using一個Pop3Client或者SqlConnection這種方式共用一個連接訪問網絡的情況可能不適合使用多線程,尤其是和服務器進行密集通信的時候,哪怕用對了多線程技術,性能也不見得有提升。

我們經常使用的一些Libray或者.NET客戶端,比如FastDFS、Memcached、RabbitMQ、Redis、MongDB、Zookeeper等等,它們都要訪問網絡和服務器通信并解析協議,分析過幾個客戶端的源碼,記得FastDFS,Memcached及Redis的客戶端內部都有一個Pool的實現,印象中它們就沒有線程安全風險。依個人經驗,使用它們的時候必須保持敬畏之心,也許你用的語言和類庫編程體驗非常友好,API使用說明通俗易懂,調用起來看上去輕而易舉,但是要用好用對也不是全部都那么容易,最好快速過一遍源碼理解大致實現思路,否則如不熟悉內部實現原理埋頭拿過來即用很可能掉入陷阱當中而不自知。當我們重構或調優使用多線程技術的時候,絕不能忽視一個深刻的問題,就是要清醒認識到適合異步處理的場景,就像知道適合使用緩存場景一樣,我甚至認為明白這一點比怎么寫代碼更重要。還有就是重構或調優必須要謹慎,測試所依賴的數據必須準備充分,實際工作當中這一點已經被多次證明,給我的印象尤其深刻。很多業務系統數據量不大的時候都可以運行良好,但在高并發數據量較大的環境下很容易出現各種各樣莫名其妙的問題,比如本文中所述,在測試多線程異步獲取和刪除郵件的時候,郵件服務器上只有一兩封內容和附件很小的郵件,通過異步獲取和刪除都正常運行,沒有任何異常日志,但是數據一多,出現異常日志,排查,調試,看源碼,再排查......這篇文章就面世了。

總結

以上是生活随笔為你收集整理的一个应用程序多线程误用的分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

日韩中文字幕视频在线 | 午夜.dj高清免费观看视频 | 国产精品久久久久久一区二区三区 | av黄色在线播放 | 一区二区精品在线视频 | 成人午夜电影免费在线观看 | 成人av网站在线观看 | 久久少妇 | 免费99视频 | 97夜夜澡人人双人人人喊 | 精品欧美小视频在线观看 | 91网站免费观看 | av在线等| 中文字幕一区二区三区在线视频 | 涩涩网站在线 | 免费黄色av电影 | 天天干,天天操,天天射 | 亚洲精品国产精品国自产观看 | 成人h动漫在线看 | 婷婷视频在线播放 | 久久手机精品视频 | 精品视频99| 六月激情婷婷 | 中文字幕在线看 | 成人网看片 | 亚洲色影爱久久精品 | 精品一区二区三区四区在线 | 日本久久中文 | 欧美精品久久99 | 国产特黄色片 | 国产精品理论片在线播放 | 欧美日韩一级久久久久久免费看 | 一区二区男女 | 日韩有码在线播放 | 蜜臀av性久久久久av蜜臀妖精 | 特级大胆西西4444www | 久久精品久久精品久久精品 | 午夜电影av | 在线国产视频 | 婷婷 综合 色 | 在线免费看片 | 亚洲天天综合网 | 久久久久国产成人免费精品免费 | 伊人日日干 | 欧美日韩精品网站 | 色视频在线观看免费 | 天天操天天谢 | 国产不卡精品视频 | 日韩av电影网站在线观看 | 国产精品一区二区在线 | 亚洲第一区在线播放 | 2023年中文无字幕文字 | 91桃花视频 | 91久久丝袜国产露脸动漫 | 久草视频99 | 久久91网| 久久你懂的 | 国产精品va在线观看入 | 在线 国产 亚洲 欧美 | 久久精品99国产精品酒店日本 | 国产91精品在线播放 | 一级黄色免费 | 干天天 | 久久草精品 | 国产精品中文久久久久久久 | 久久久久国产成人精品亚洲午夜 | 精品人妖videos欧美人妖 | 精品国产福利在线 | 7777xxxx| 久久dvd | 免费日韩一区 | 91福利免费 | 激情在线网站 | 色插综合 | 日韩午夜在线观看 | 国产美女久久久 | 色99之美女主播在线视频 | 久久久伊人网 | 综合色亚洲| 日韩久久视频 | 在线国产精品视频 | 欧美日韩精品区 | 国产精品久久久 | 色中色亚洲 | 片黄色毛片黄色毛片 | 中文字幕大全 | 啪啪激情网 | 久久国产电影院 | 欧美日韩在线精品一区二区 | 欧美精品乱码久久久久久 | 国产精品久久久网站 | 日韩天天干 | 婷婷六月综合网 | 久久久久久久久艹 | 波多野结衣一区二区 | 亚洲五月 | 久久久国产网站 | 人人要人人澡人人爽人人dvd | av网站在线观看播放 | 激情深爱五月 | 亚洲国产av精品毛片鲁大师 | 国产精品美乳一区二区免费 | 欧美精品久久久久久久久久白贞 | 伊人婷婷激情 | 视频一区视频二区在线观看 | 免费观看黄色av | 91超级碰碰| 亚洲日韩欧美一区二区在线 | 久久久91精品国产一区二区精品 | 波多野结衣亚洲一区二区 | 午夜私人影院 | 草免费视频 | 久久一区二区三区国产精品 | 中文字幕在线观看视频免费 | 91色网址| 国产精品igao视频网网址 | 黄色a三级| 草免费视频 | 亚洲高清91 | www.亚洲精品 | 日本精品一区二区在线观看 | 国产一区二区精品在线 | 日产乱码一二三区别免费 | 亚洲欧洲精品在线 | 久久久久99精品成人片三人毛片 | 亚洲欧美日韩中文在线 | 久久久国产精品一区二区三区 | 日本精品在线 | 在线观看av中文字幕 | 久久久性 | 国产精品你懂的在线观看 | 国产精品乱码久久 | 久久这里只有精品9 | 日韩超碰 | 国产精品va最新国产精品视频 | 激情久久久久久久久久久久久久久久 | 91在线国内视频 | 久久精品一二三区白丝高潮 | 人人爽久久涩噜噜噜网站 | 欧美日韩一区三区 | 久久少妇免费视频 | 久久xxxx| 精品99久久久久久 | 亚洲综合五月 | 9999亚洲 | 97电院网手机版 | 亚洲黄色一级电影 | 亚洲激情久久 | 国产成人一区在线 | 国产精美视频 | 91视频在线播放视频 | 中文字幕在线观看视频免费 | 久久久久激情视频 | 天天干.com | 丁香一区二区 | 99精品视频在线播放观看 | 91x色| 狠狠干狠狠艹 | 欧美日韩啪啪 | 国产成人一区二区三区在线观看 | 日本韩国精品在线 | 欧美久草网| 午夜久久电影网 | www免费| 亚洲日日日 | 日韩精品视频免费专区在线播放 | 成人天堂网 | 婷婷国产精品 | 精品福利片 | 欧美999 | 精品国产一区二区三区久久 | 激情婷婷网 | 婷婷色中文 | 黄色在线看网站 | 在线视频1卡二卡三卡 | 亚洲欧洲国产精品 | 国产中文字幕在线视频 | 久久99精品久久久久久久久久久久 | 特级毛片在线免费观看 | 亚洲综合一区二区精品导航 | 国产一区视频免费在线观看 | 日韩欧美一区二区在线观看 | 91在线小视频 | 欧美热久久 | 色综合久久久久综合99 | 亚洲欧美国产精品va在线观看 | 久久久久免费精品国产 | 国产精品一区二区美女视频免费看 | 免费h精品视频在线播放 | 国产视频91在线 | 欧美精品在线观看免费 | 国产传媒一区在线 | 日韩中文字幕网站 | 久久精品草 | 日韩不卡高清视频 | av超碰免费在线 | 色婷婷一区| 精品久久一区二区 | 天天躁日日躁狠狠 | 高清av中文字幕 | 国内少妇自拍视频一区 | 国产精品av一区二区 | 99产精品成人啪免费网站 | 精品久久久久久久 | 97av在线视频 | 精品国产美女在线 | 日韩两性视频 | 欧美日韩啪啪 | 美女国产精品 | 亚洲国产一区二区精品专区 | 97在线观看免费观看高清 | 中文字幕在线观看一区二区三区 | 国产中文欧美日韩在线 | 免费av福利| 久久久久在线观看 | 亚洲精品国产欧美在线观看 | 99在线国产 | 日韩精品一区二区三区免费视频观看 | 日韩中字在线观看 | 国产人成一区二区三区影院 | 亚洲在线精品 | 91精品国产一区二区三区 | 国产午夜精品免费一区二区三区视频 | 精品成人在线 | 中文字幕在线看人 | 久久久99精品免费观看 | www.夜夜爽| 91精品国自产拍天天拍 | 亚洲一区在线看 | 亚洲精品一区二区在线观看 | 伊人五月综合 | 国产成人精品一区二区在线观看 | 国产精品毛片一区二区三区 | 久久久久亚洲国产精品 | 夜色资源站国产www在线视频 | 久久在现视频 | 免费在线观看黄色网 | 久久久久国产精品午夜一区 | 国产亚洲精品久久 | 国产成人一区二区三区在线观看 | 日韩av电影国产 | 久久国产精品网站 | 欧美地下肉体性派对 | 丁香视频全集免费观看 | 国产99精品在线观看 | 国产无套视频 | 成人h电影在线观看 | 国产一区二区在线免费 | 国产精品久久久久四虎 | 国产精品一区专区欧美日韩 | 久久亚洲精品国产亚洲老地址 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 亚洲美女视频网 | 网站在线观看日韩 | 一本到视频在线观看 | 成人av中文字幕 | 欧美性色综合网 | 亚洲精品国产成人av在线 | 成人黄色电影在线 | 亚洲成年人在线播放 | 久久久伦理 | 五月天婷亚洲天综合网鲁鲁鲁 | 欧美日韩国产精品一区二区 | 99久久国产免费,99久久国产免费大片 | 6080yy午夜一二三区久久 | 人人草天天草 | 插婷婷| 欧美日韩国产一区二区三区 | 中文字幕在线播出 | 免费在线播放av电影 | 欧美性性网 | 97免费视频在线 | av在线影片 | 天天色综合久久 | 亚洲男模gay裸体gay | 久久毛片高清国产 | 操操操干干干 | 色视频在线免费观看 | 天天天色综合a | 亚洲区二区 | 久久精品系列 | 亚洲专区欧美 | 97碰在线视频 | 日韩毛片在线免费观看 | 五月婷亚洲 | 久久久性 | 视频二区在线视频 | 天天艹天天爽 | 国产日韩欧美在线看 | 久久成人在线视频 | 国产爽妇网 | 伊人手机在线 | 久艹在线播放 | 欧洲精品码一区二区三区免费看 | 69av视频在线 | free. 性欧美.com| 久久国产亚洲视频 | 欧美日韩一区二区视频在线观看 | 国内精品久久久久久久久久久 | 中文字幕av播放 | 伊人天堂av | 69国产精品视频免费观看 | 亚洲精品视频网站在线观看 | 91人人视频在线观看 | 手机在线永久免费观看av片 | 色就色,综合激情 | 日韩理论在线播放 | 国产69久久精品成人看 | 午夜视频在线观看一区 | 免费av观看网站 | 日韩欧美视频一区二区 | www国产亚洲精品久久麻豆 | 成人av亚洲 | 成人动漫精品一区二区 | 99精品视频免费在线观看 | 欧美色噜噜噜 | 日韩区在线观看 | 91电影福利 | 一区 二区电影免费在线观看 | 欧洲精品码一区二区三区免费看 | 91国内在线视频 | 日本精品va在线观看 | 最近中文字幕视频网 | 色综合夜色一区 | 国产免费观看av | 亚洲黄色一级视频 | 免费网站黄色 | 欧美色综合 | 西西www4444大胆在线 | 二区三区视频 | 久久久久久久久久久久久久免费看 | 91大神精品视频 | 欧美aa在线 | 99这里精品| 又粗又长又大又爽又黄少妇毛片 | 国产中文字幕视频 | 国产在线va| 国产精品久久久久一区二区国产 | 国产精品成人av电影 | 日本一区二区三区免费看 | 一区二区三区精品在线视频 | 欧美日韩精品在线 | 在线观看完整版 | 国产精久久久久久妇女av | 91在线视频在线 | 91九色视频在线 | 人人澡人人添人人爽一区二区 | 欧美日韩精品在线观看 | 欧洲精品二区 | 亚洲黄色成人 | 在线亚洲激情 | 日韩mv欧美mv国产精品 | 天天躁日日躁狠狠 | 亚洲性视频 | 欧美激情奇米色 | 亚洲精品在线国产 | 六月丁香在线观看 | 国产精品国产亚洲精品看不卡15 | 日本精品一区二区三区在线播放视频 | 国产九色91 | 综合网中文字幕 | 中文字幕一区二区三区四区久久 | 免费在线观看a v | 九九激情视频 | 日本成人中文字幕在线观看 | 亚洲永久精品在线观看 | 成人av一区二区三区 | 色片网站在线观看 | 免费观看xxxx9999片 | av网址在线播放 | 综合色在线观看 | 久草97| 国产精品大片免费观看 | 狠狠干婷婷色 | 午夜在线免费观看 | 69性欧美 | av不卡免费在线观看 | 五月婷婷丁香在线观看 | 在线视频免费观看 | 久久99在线视频 | 三级性生活视频 | 中文字幕第 | 久久视频免费观看 | 欧美ⅹxxxxxx | 香蕉视频网址 | 亚洲欧美怡红院 | 91亚洲视频在线观看 | 欧美极品一区二区三区 | 亚洲国产精品久久久 | 欧美激情视频免费看 | 国产精品入口66mio女同 | 亚洲夜夜综合 | 久久久久久蜜av免费网站 | 在线视频 一区二区 | 中文字幕日本特黄aa毛片 | 婷婷久月| 在线免费观看欧美日韩 | 中文字幕在线精品 | 成年人黄色免费网站 | 99热在线精品观看 | 99视频网址 | 在线观看中文字幕av | 波多野结衣视频网址 | 欧美在线一二 | 久草精品在线播放 | 久久久香蕉视频 | 国内免费久久久久久久久久久 | 麻豆视频免费播放 | 欧美精品久久久久久 | 久久久久久久网 | www.夜夜操.com | 丁香花在线视频观看免费 | 92av视频 | 欧美在线日韩在线 | 欧美精品一级视频 | 免费在线看v | 中文字幕免费观看视频 | 免费在线成人av | 91av九色 | 干天天| 久久久久久久毛片 | 日日爱夜夜爱 | 亚洲在线免费视频 | 久久精品视频在线 | 色综合久久久久网 | 大胆欧美gogo免费视频一二区 | 五月天激情综合 | 精品久久片| 黄色av免费在线 | 日韩中文字 | 久久人人爽人人 | 国产成人精品一区二区三区 | 最新久久免费视频 | 国产在线91精品 | 国产香蕉久久精品综合网 | 亚洲欧美成人网 | 色综合狠狠干 | 日本精品视频在线观看 | 国产成人精品一区二区在线观看 | 亚洲成人影音 | 婷婷国产v亚洲v欧美久久 | 中文字幕999 | 国产精品久久久久久久久久久久午夜片 | av在线免费不卡 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲aⅴ免费在线观看 | 狠狠ri | 精品久久亚洲 | 97色婷婷人人爽人人 | 欧美精选一区二区三区 | 欧美国产日韩久久 | 婷婷深爱五月 | 97国产电影 | 在线观看视频国产一区 | 色噜噜日韩精品一区二区三区视频 | 欧美一二三视频 | 国产免费观看久久 | 在线观看视频黄色 | 在线看中文字幕 | 国产中文字幕视频在线 | 女人18毛片a级毛片一区二区 | 国产精品理论片在线观看 | 亚洲涩涩网 | 国产精品每日更新 | 日韩在线网址 | 久久电影国产免费久久电影 | 国产美女在线精品免费观看 | 91精品电影 | 在线影院 国内精品 | 丁香激情综合 | 99国内精品久久久久久久 | 四虎影视成人永久免费观看视频 | 免费在线一区二区三区 | 一区二区三区在线观看免费 | 久久er99热精品一区二区 | 国产精品不卡一区 | 日韩videos | 蜜桃视频色 | 久久久久色 | 五月婷婷深开心 | 丁香九月婷婷 | 伊人超碰在线 | 日韩综合一区二区 | 成人黄色电影在线 | 国产一区二区三区免费在线观看 | 亚洲最大免费成人网 | 一级a性色生活片久久毛片波多野 | 中文字幕乱在线伦视频中文字幕乱码在线 | 在线免费黄网站 | 91成人在线网站 | 天天色天天爱天天射综合 | 91丨九色丨蝌蚪丰满 | 国产在线a免费观看 | 久久精品这里精品 | 97超碰人人澡人人爱 | 中文字幕频道 | 国产精品一区免费观看 | 激情综合中文娱乐网 | 天天爽天天爽天天爽 | 中文字幕网址 | 99在线热播精品免费99热 | 欧美久久久影院 | 狠狠色噜噜狠狠狠狠2022 | www五月天婷婷 | 欧美一性一交一乱 | 久久色网站| 狠狠躁夜夜a产精品视频 | 国产色女人| 黄色av电影网 | 伊人五月天婷婷 | 在线精品国产 | 国产亚洲精品久久久久久移动网络 | 1024手机看片国产 | 久久精品日韩 | 午夜国产影院 | 国产亚洲精品中文字幕 | 亚洲免费永久精品国产 | 国产在线视频不卡 | 国产精品美女久久久网av | 国产精品亚洲人在线观看 | 91精品1区2区| 婷婷精品国产一区二区三区日韩 | 又湿又紧又大又爽a视频国产 | 玖玖在线精品 | 91精品久久久久久综合五月天 | 亚洲精选在线观看 | 精品国内自产拍在线观看视频 | av大片网址 | 亚洲天堂激情 | 操操操日日| 在线观看视频 | 国产精品123 | 亚洲国产网址 | 国产精品五月天 | 色偷偷中文字幕 | 91最新地址永久入口 | 国产成人99久久亚洲综合精品 | 蜜臀av免费一区二区三区 | 精品自拍网 | 久久久官网 | 亚洲欧美经典 | 99国产高清| 18久久久久 | 伊人国产在线观看 | 日本精油按摩3 | 国产r级在线观看 | 久久理论电影 | 欧美一区二区三区四区夜夜大片 | www.夜夜操.com | 成人av免费在线 | 久久久久久久久黄色 | 美女福利视频一区二区 | 免费观看av | 嫩小bbbb摸bbb摸bbb | 五月天欧美精品 | 亚洲爱爱视频 | 特级片免费看 | 激情六月婷婷久久 | 国产69熟 | 亚洲无线视频 | 色91在线| 欧美了一区在线观看 | 国产亲近乱来精品 | 日韩在线视频网站 | 国产免费黄视频在线观看 | 成人免费观看视频大全 | 久久精品高清视频 | av大全在线播放 | 激情五月在线视频 | 久草在线观看 | 天天爱天天射天天干天天 | 久久99久久99精品免观看粉嫩 | 欧美一级片免费观看 | 国产成人久久精品 | 久久综合九色欧美综合狠狠 | 韩日成人av| 久久影院中文字幕 | 婷色| 日本中文字幕网 | 国产一级片久久 | 成人黄色大片在线免费观看 | 91久久偷偷做嫩草影院 | 欧美日韩一二三四区 | 亚洲国产999 | 97偷拍视频 | 久草视频在线播放 | 99成人在线视频 | 玖玖999| 日韩综合色 | 国产久草在线 | zzijzzij亚洲日本少妇熟睡 | 欧美一区二区在线免费看 | 国产精品黄| 国产原创中文在线 | 婷婷视频 | 高清一区二区三区av | 97涩涩视频| 超级碰碰免费视频 | 精品久久精品 | 啪啪资源 | 97国产精品久久 | 久久情网| 日韩av线观看 | 国产精品入口传媒 | www.久久久.com| 国模一区二区三区四区 | 天天色天天综合 | 青青河边草观看完整版高清 | 在线观看视频97 | 久久精品站 | 亚洲精品字幕在线观看 | 国产精品一区二区在线播放 | 久久久久久久久久久久亚洲 | 欧美专区亚洲专区 | 国产不卡一区二区视频 | 91精品国产亚洲 | 国产在线观看高清视频 | 日日综合 | 日韩免费视频观看 | 精品99999 | 国产精品久久久久久久久久久久久久 | 国产女人40精品一区毛片视频 | 精品一二| 又黄又爽又湿又无遮挡的在线视频 | 狠狠狠色狠狠色综合 | 国产精品久久久999 国产91九色视频 | 日韩精品一区二区三区高清免费 | 国产v视频| 久久 精品一区 | 日本中文在线播放 | 中文字幕在线观 | av在线观 | 久久你懂得 | 日韩www在线 | 综合av在线 | 国际精品久久久 | 国产精品欧美久久久久三级 | 黄色一级大片在线观看 | 久久国产高清视频 | 天天爽天天爽 | 国产一区在线视频 | 国产一区二区三区四区大秀 | 欧美精品久久久久久久久久 | 91精品国产91久久久久 | 91麻豆精品国产91 | 久操免费视频 | 国产一区二区网址 | 成人免费视频网站 | 久久免费黄色大片 | 五月婷婷久久丁香 | av免费片| 色婷婷啪啪免费在线电影观看 | 在线播放国产一区二区三区 | 国产精品乱码久久久 | 久久99网 | www.天天操.com| 激情av网 | 婷婷在线视频观看 | 色综合久久网 | 国产成人免费 | 久久免费电影 | 五月天高清欧美mv | 日韩免费在线视频观看 | 樱空桃av| 日韩欧美网址 | 免费观看第二部31集 | 一区 二区电影免费在线观看 | 国产中文字幕一区 | 人人爽人人爽人人片 | 精品国产成人 | 人人涩| 久久av在线 | 国产999精品久久久影片官网 | 特级毛片在线免费观看 | 日韩在线网址 | 日韩免费在线看 | 欧美综合在线视频 | 天天夜夜操 | 亚洲精品在线观看免费 | 成人羞羞免费 | 国产午夜精品一区二区三区欧美 | 在线免费观看视频一区二区三区 | 91污在线观看 | 国产又粗又猛又爽又黄的视频先 | 99精品免费在线 | 午夜精品福利一区二区三区蜜桃 | 91资源在线 | av在线色 | 国产玖玖在线 | 五月婷婷在线综合 | 美女网站色 | 国产精品永久久久久久久www | 超级碰碰碰碰 | 综合久久久久久久久 | 丁香导航 | 超碰97人人爱 | 亚av在线| 在线天堂8√ | 亚洲va在线va天堂 | 美女av电影| 国产区精品区 | 欧美国产高清 | 日韩av高清在线观看 | av成人免费在线观看 | av在线成人| 啪啪免费观看网站 | 色综合天天做天天爱 | 不卡的av电影 | 欧美亚洲精品一区 | 日韩偷拍精品 | 婷婷在线色 | 国产手机免费视频 | 韩日精品中文字幕 | 成人观看| 亚洲午夜久久久影院 | 韩日精品在线 | 日日夜夜天天久久 | 一区二区三区久久 | 日韩精品久久久免费观看夜色 | 91影视成人 | 国产精品精品国产色婷婷 | 米奇狠狠狠888 | 久久不射影院 | 免费在线播放视频 | 美女搞黄国产视频网站 | 97超碰国产精品女人人人爽 | 在线观看a视频 | 天天射天天射天天 | 亚洲一区美女视频在线观看免费 | 免费在线一区二区三区 | 精品女同一区二区三区在线观看 | 久草在线免费色站 | 日韩中文字幕免费视频 | 在线免费精品视频 | 最新极品jizzhd欧美 | 在线中文字幕av观看 | 国产美女免费看 | 日韩在线视频免费看 | 久久精品123 | 中文国产字幕在线观看 | 午夜av日韩 | 91亚洲永久精品 | 精品国产1区2区3区 国产欧美精品在线观看 | 日韩乱码在线 | 亚洲视频在线免费观看 | 国产日韩中文字幕在线 | 在线观看久久久久久 | 成人一区二区三区中文字幕 | 成人av资源 | 久草在线免费看视频 | 亚洲成人动漫在线观看 | 欧美日韩伦理在线 | 在线免费观看国产视频 | 亚洲女欲精品久久久久久久18 | av片中文字幕 | 超碰人人国产 | 日韩a在线观看 | 香蕉视频在线网站 | 日韩在线观看第一页 | 国产一区欧美在线 | 亚洲精品理论 | 精品国产a| 国内精品一区二区 | 久久精品视频观看 | .国产精品成人自产拍在线观看6 | 中文字幕在线视频一区二区三区 | 国产黄色免费在线观看 | 国产另类xxxxhd高清 | 久久久久久免费视频 | 99久久精品国产一区二区成人 | 天天色天天骑天天射 | 在线影院 国内精品 | 天天干天天上 | 欧美va日韩va | 韩国一区二区三区在线观看 | 天天操天天干天天摸 | 天天综合网天天 | 日韩在线观看视频网站 | 国产色道 | 亚洲二区精品 | 欧美 日韩 国产 中文字幕 | 日韩精品一区不卡 | 免费国产在线视频 | 最新国产在线视频 | 久久精品伊人 | 国产精品一区二区白浆 | 丁香婷婷综合激情五月色 | 在线看国产日韩 | 国内综合精品午夜久久资源 | 婷婷天天色 | 激情视频免费在线 | 亚洲国产经典视频 | 日韩在线视频网址 | 日韩在线视频免费播放 | 日韩在线免费高清视频 | 日批视频在线观看免费 | 精品国偷自产在线 | 中文免费在线观看 | 婷婷网在线 | 国产性天天综合网 | 国语对白少妇爽91 | 日韩精品专区在线影院重磅 | 精品国产一区二区三区不卡 | 国产精品九九视频 | 精品视频免费看 | 久久视频网 | 午夜久久久久 | 欧美三级免费 | 91完整版 | 特级xxxxx欧美 | 国产精品福利无圣光在线一区 | 亚洲精品中文在线资源 | 成片免费观看视频大全 | 日韩四虎 | 人人干,人人爽 | 国产v欧美| 欧美另类成人 | 91精品一区二区三区蜜臀 | 99精品视频在线观看 | 国产女v资源在线观看 | 欧美日韩国产在线一区 | 国产欧美日韩一区 | www.狠狠色.com | 亚洲国产欧美在线人成大黄瓜 | 欧美激情综合五月 | 亚洲最大av | 激情av在线资源 | 国产99久久精品一区二区300 | 日韩精品在线一区 | 天天天综合网 | 日日日爽爽爽 | 国产美女搞久久 | 91大神精品视频在线观看 | 久久久久免费看 | 欧美大片在线观看一区 | 五月天视频网 | 日韩精品中文字幕在线不卡尤物 | 99久久99久久精品免费 | 国产一性一爱一乱一交 | 五月天av在线 | 蜜桃视频成人在线观看 | 中文字幕在线第一页 | 在线观看中文字幕第一页 | 日韩在线电影观看 | 国产亚洲午夜高清国产拍精品 | 国产糖心vlog在线观看 | 国产尤物一区二区三区 | 午夜免费久久看 | 国产免费作爱视频 | 18性欧美xxxⅹ性满足 | 久久狠狠一本精品综合网 | 国产精品福利久久久 | 亚洲欧美日韩国产 | 久久夜色精品国产欧美一区麻豆 | 国产黄色av影视 | 在线观看黄网站 | zzijzzij日本成熟少妇 | 国产手机视频在线观看 | 国产欧美日韩一区 | 啪啪激情网 | 久久久久久久av麻豆果冻 | 日韩欧美不卡 | 国产精品日韩在线观看 | 高清视频一区二区三区 | 麻豆视频免费在线观看 | 丁香在线观看完整电影视频 | 亚洲男人天堂a | 久久96国产精品久久99软件 | 日日干综合 | 国产黄色精品在线观看 | 国产一级黄色免费看 | 成人一级黄色片 | 国产资源在线观看 | 久久99久久99免费视频 | 国产精品免费视频网站 | 在线成人免费av | 在线91播放 | 日本久久视频 | 亚洲精品女 | 又污又黄的网站 | 97超碰香蕉 | 免费看久久久 | 免费黄色在线网址 | 久久免费视频播放 | 国产视频一区在线 | 国产裸体永久免费视频网站 | 国产美女视频一区 | 99免费看片 | 综合色爱| 日韩电影中文,亚洲精品乱码 | 久久精品欧美日韩精品 | 国产亚洲永久域名 | 国产96视频 | 色多多视频在线观看 | 麻豆传媒视频在线播放 | 亚洲一区二区三区miaa149 | 精品三级av| 狠狠色丁香婷综合久久 | 午夜视频一区二区三区 | 久久久av免费 | 狠狠色丁香婷婷综合视频 | 中文字幕一区二区三区视频 | 国产特级毛片aaaaaaa高清 | 成人在线观看影院 | 日批在线观看 | 国产成人亚洲精品自产在线 | 久久香蕉国产精品麻豆粉嫩av | 蜜臀av.com | 免费三级a | 手机看片福利 | 蜜臀av一区| 亚洲视频专区在线 | 国产不卡在线观看 | 久久免费黄色 | 在线 精品 国产 | 亚洲精品网页 | 天天爱天天射天天干天天 | 亚洲精品国产拍在线 | 欧美一级久久久 | 久久人人爽人人爽人人 | 久久久久久不卡 | 精品久久久久久综合日本 | 久草视频手机在线 | 精品一区电影 | 亚洲少妇久久 | 午夜久久福利视频 | 丁五月婷婷 | 天天操天天干天天综合网 | av电影免费在线 | 精品亚洲视频在线观看 | 综合色综合色 | 国产精品久久久久久久久久ktv | 成人va天堂 | 青春草免费视频 | 免费av看片 | 久久伊99综合婷婷久久伊 | 国产欧美日韩精品一区二区免费 | 91人人在线 | 日韩午夜视频在线观看 | 国产成人在线免费观看 | 欧美精品久久久久久 | 久久综合色播五月 | 日日碰狠狠添天天爽超碰97久久 | 亚洲一区天堂 | 91日本在线播放 | 免费视频97 | 国产日本亚洲 | 99在线免费视频观看 | 在线观看电影av | 国产精品mm | www.色爱| 黄网站色成年免费观看 | 亚洲在线黄色 | 日本久久久精品视频 | 婷婷精品国产一区二区三区日韩 | 久久综合色播五月 | 婷婷视频导航 | 日韩av女优视频 | 国产在线观看99 | 国产精品a久久 | 不卡的av | 最新中文字幕在线资源 | 字幕网在线观看 | 日韩动漫免费观看高清完整版在线观看 | 国产精品精品国产色婷婷 | 91精品视频导航 | 97涩涩视频 | 国产精品中文久久久久久久 | 国产成人av电影在线 | 黄色小说网站在线 | 午夜成人免费影院 | 久久精品老司机 | 亚洲国产免费看 | 天天干天天综合 | 欧美久久综合 | 欧美日韩视频在线观看一区二区 | av天天干 | 亚洲精品视频免费在线观看 | 久久久久久国产一区二区三区 | 69久久久 | 欧美一级裸体视频 | 国产在线不卡视频 | 亚洲 欧洲 国产 日本 综合 | 午夜国产一区 | 久久久综合香蕉尹人综合网 | 国产精品中文字幕在线播放 | 中文字幕一区二 | www..com毛片| 欧美成a人片在线观看久 | 五月婷丁香网 | 亚洲综合一区二区精品导航 | 国产黄a三级 | 精品欧美一区二区在线观看 | 亚洲在线a| 日本中文字幕网站 | 国产精品破处视频 | 亚洲黄色在线播放 | 欧美天堂久久 |