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

讀懂HikariCP一百行代碼,多線程就是個(gè)孫子!

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
HikariCP是SpringBoot默認(rèn)的數(shù)據(jù)庫(kù)連接池,它毫不謙虛的的起了一個(gè)叫做光的名字,這讓國(guó)產(chǎn)Druid很沒面子。

總結(jié):Java屆很難得有讀百十行代碼就能增加修煉的機(jī)會(huì),這里有一個(gè)。

通常,我在看書的時(shí)候一般不寫代碼,因?yàn)槲业哪X袋被設(shè)定成單線程的,一旦同時(shí)喂給它不同的信息,它就無法處理。

但多線程對(duì)電腦來說就是小菜一碟,它可以同時(shí)做很多事,看起來匪夷所思。好希望把自己的大腦皮層移植到這些牛x的設(shè)備上。

用人腦思考電腦正在思考的問題,這本身就是一種折磨。但平常的工作和面試中,又不得不面對(duì)這樣的場(chǎng)景,所以多線程就成了編程路上一塊難啃的骨頭。

HikariCP是SpringBoot默認(rèn)的數(shù)據(jù)庫(kù)連接池,它毫不謙虛的的起了一個(gè)叫做光的名字,這讓國(guó)產(chǎn)Druid很沒面子。

還是言歸正傳,看一下Hikari中的ConcurrentBag吧。

核心數(shù)據(jù)結(jié)構(gòu)

多線程代碼一個(gè)讓人比較頭疼的問題,就是每個(gè)API我都懂,但就是不會(huì)用。很多對(duì)concurrent包倒背如流的同學(xué),在面對(duì)現(xiàn)實(shí)的問題時(shí),到最后依然不得不被迫加上Lock或者synchronized。

ConcurrentBag是一個(gè)Lock free的數(shù)據(jù)結(jié)構(gòu),主要用作數(shù)據(jù)庫(kù)連接的存儲(chǔ),可以說整個(gè)HikariCP的核心就是它。刪掉亂七八糟的注釋和異常處理,可以說關(guān)鍵的代碼也就百十來行,但里面的道道卻非常的多。

ConcurrentBag速度很快,要達(dá)到這個(gè)目標(biāo),就需要一定的核心數(shù)據(jù)結(jié)構(gòu)支持。

private final CopyOnWriteArrayList<T> sharedList;
private final ThreadLocal<List<Object>> threadList;
private final AtomicInteger waiters;
private final SynchronousQueue<T> handoffQueue;
  • sharedList 用來緩存所有的連接,是一個(gè)CopyOnWriteArrayList結(jié)構(gòu)。
  • threadList 用來緩存某個(gè)線程所使用的所有連接,相當(dāng)于快速引用,是一個(gè)ThreadLocal類型的ArrayList。
  • waiters 當(dāng)前正在獲取連接的等待者數(shù)量。AtomicInteger,就是一個(gè)自增對(duì)象。當(dāng)waiters的數(shù)量大于0時(shí)候,意味著有線程正在獲取資源。
  • handoffQueue 0容量的快速傳遞隊(duì)列,SynchronousQueue類型的隊(duì)列,非常有用。

ConcurrentBag里面的元素,為了能夠無鎖化操作,需要使用一些變量來標(biāo)識(shí)現(xiàn)在處于的狀態(tài)。抽象的接口如下:

public interface IConcurrentBagEntry{
int STATE_NOT_IN_USE = 0;
int STATE_IN_USE = 1;
int STATE_REMOVED = -1;
int STATE_RESERVED = -2;

boolean compareAndSet(int expectState, int newState);
void setState(int newState);
int getState();
}

有了這些數(shù)據(jù)結(jié)構(gòu)的支持,我們的ConcurrentBag就可以實(shí)現(xiàn)它光的宣稱了。

獲取連接

連接的獲取是borrow方法,還可以傳入一個(gè)timeout作為超時(shí)控制。

public T borrow(long timeout, final TimeUnit timeUnit) throws InterruptedException

首先,如果某個(gè)線程執(zhí)行非常快,使用了比較多的連接,就可以使用ThreadLocal的方式快速獲取連接對(duì)象,而不用跑到大池子里面去獲取。代碼如下。

// Try the thread-local list first
final var list = threadList.get();
for (int i = list.size() - 1; i >= 0; i--) {
final var entry = list.remove(i);
final T bagEntry = weakThreadLocals ? ((WeakReference<T>) entry).get() : (T) entry;
if (bagEntry != null && bagEntry.compareAndSet(STATE_NOT_IN_USE, STATE_IN_USE)) {
return bagEntry;
}
}

我們都知道,包括ArrayList和HashMap一些基礎(chǔ)的結(jié)構(gòu),都是Fail Fast的,如果你在遍歷的時(shí)候,刪掉一些數(shù)據(jù),有可能會(huì)引起問題。幸運(yùn)的是,由于我們的List是從ThreadLocal獲取的,它首先就避免了線程安全的問題。

接下來就是遍歷。這段代碼采用的是尾遍歷(頭遍歷會(huì)出現(xiàn)錯(cuò)誤),用于快速的從列表中找到一個(gè)可以復(fù)用的對(duì)象,然后使用CAS來把狀態(tài)置為使用中。但如果對(duì)象正在被使用,則直接刪除它。

在ConcurrentBag里,每個(gè)ThreadLocal最多緩存50個(gè)連接對(duì)象引用。

當(dāng)ThreadLocal里找不到可復(fù)用的對(duì)象,它就會(huì)到大池子里去拿。也就是下面這段代碼。

// Otherwise, scan the shared list ... then poll the handoff queue
final int waiting = waiters.incrementAndGet();
try {
for (T bagEntry : sharedList) {
if (bagEntry.compareAndSet(STATE_NOT_IN_USE, STATE_IN_USE)) {
// If we may have stolen another waiter's connection, request another bag add.
if (waiting > 1) {
listener.addBagItem(waiting - 1);
}
return bagEntry;
}
}

listener.addBagItem(waiting);

// 還拿不到,就需要等待別人釋放了
timeout = timeUnit.toNanos(timeout);
do {
final var start = currentTime();
final T bagEntry = handoffQueue.poll(timeout, NANOSECONDS);
if (bagEntry == null || bagEntry.compareAndSet(STATE_NOT_IN_USE, STATE_IN_USE)) {
return bagEntry;
}

timeout -= elapsedNanos(start);
} while (timeout > 10_000);

return null;
}
finally {
waiters.decrementAndGet();
}

首先要注意,這段代碼可能是由不同的線程執(zhí)行的,所以必須要考慮線程安全問題。由于shardList是線程安全的CopyOnWriteArrayList,適合讀多寫少的場(chǎng)景,我們可以直接進(jìn)行遍歷。

這段代碼的目的是一樣的,需要從sharedList找到一個(gè)空閑的連接對(duì)象。這里把自增的waiting變量傳遞到外面的代碼進(jìn)行處理,主要是由于想要根據(jù)waiting的大小來確定是否創(chuàng)建新的對(duì)象。

如果無法從池子里獲取連接,則需要等待別的線程釋放一些資源。

創(chuàng)建對(duì)象的過程是異步的,要想獲取它,還需要依賴一段循環(huán)代碼。while循環(huán)代碼是納秒精度,會(huì)嘗試從handoffQueue里獲取。最終會(huì)調(diào)用SynchronousQueue的transfer方法。

歸還連接

有借就有還,當(dāng)某個(gè)連接使用完畢,它將被歸還到池子中。

public void requite(final T bagEntry)
{
bagEntry.setState(STATE_NOT_IN_USE);

for (var i = 0; waiters.get() > 0; i++) {
if (bagEntry.getState() != STATE_NOT_IN_USE || handoffQueue.offer(bagEntry)) {
return;
}
else if ((i & 0xff) == 0xff) {
parkNanos(MICROSECONDS.toNanos(10));
}
else {
Thread.yield();
}
}

final var threadLocalList = threadList.get();
if (threadLocalList.size() < 50) {
threadLocalList.add(weakThreadLocals ? new WeakReference<>(bagEntry) : bagEntry);
}
}

首先,把這個(gè)對(duì)象置為可用狀態(tài)。然后,代碼會(huì)進(jìn)入一個(gè)循環(huán),等待使用方把這個(gè)連接接手過去。當(dāng)連接處于STATE_NOT_IN_USE狀態(tài),或者隊(duì)列中的數(shù)據(jù)被取走了,那么就可以直接返回了。

由于waiters.get()是實(shí)時(shí)獲取的,有可能長(zhǎng)時(shí)間一直大于0,這樣代碼就會(huì)變成死循環(huán),浪費(fèi)CPU。代碼會(huì)嘗試不同層次的睡眠,一個(gè)是每隔255個(gè)waiter睡10ns,一個(gè)是使用yield讓出cpu時(shí)間片。

如果歸還連接的時(shí)候并沒有被其他線程獲取到,那么最后我們會(huì)把歸還的連接放入到相對(duì)應(yīng)的ThreadLocal里,因?yàn)閷?duì)一個(gè)連接來說,借和還,通常是一個(gè)線程。

知識(shí)點(diǎn)

看起來平平無奇的幾行代碼,為什么搞懂了就能Hold住大部分的并發(fā)編程場(chǎng)景呢?主要還是這里面的知識(shí)點(diǎn)太多。下面我簡(jiǎn)單羅列一下,你可以逐個(gè)攻破。

  • 使用ThreadLocal來緩存本地資源引用,使用線程封閉的資源來減少鎖的沖突。
  • 采用讀多寫少的線程安全的CopyOnWriteArrayList來緩存所有對(duì)象,幾乎不影響讀取效率。
  • 使用基于CAS的AtomicInteger來計(jì)算等待者的數(shù)量,無鎖操作使得計(jì)算更加快速。
  • 0容量的交換隊(duì)列SynchronousQueue,使得對(duì)象傳遞更加迅速。
  • 采用compareAndSet的CAS原語來控制狀態(tài)的變更,安全且效率高。很多核心代碼都是這么設(shè)計(jì)的。
  • 在循環(huán)中使用park、yield等方法,避免死循環(huán)占用大量CPU。
  • 需要了解并發(fā)數(shù)據(jù)結(jié)構(gòu)中的offer、poll、peek、put、take、add、remove方法的區(qū)別,并靈活應(yīng)用。
  • CAS在設(shè)置狀態(tài)時(shí),采用了volatile關(guān)鍵字修飾,對(duì)于volatile的使用也是一個(gè)常見的優(yōu)化點(diǎn)。
  • 需要了解WeakReference弱引用在垃圾回收時(shí)候的表現(xiàn)。

麻雀雖小,五臟俱全。如果你想要你的多線程編程能力更上一層樓,讀一讀這個(gè)短小精悍的ConcurrentBag吧。當(dāng)你掌握了它,多線程的那些東西,不過是小菜一碟。

作者簡(jiǎn)介:小姐姐味道  (xjjdog),一個(gè)不允許程序員走彎路的公眾號(hào)。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。

責(zé)任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2020-03-12 10:16:45

代碼Java多線程

2015-09-14 09:07:15

Java多線程

2023-12-07 07:28:25

線程共享資源

2019-09-24 14:19:12

PythonC語言文章

2019-12-04 10:20:57

代碼開發(fā)工具

2020-08-12 09:53:18

代碼開發(fā)工具

2010-02-04 10:19:39

C++多線程

2012-01-12 10:09:30

Java

2020-06-16 11:00:40

線程Java代碼

2015-12-22 10:39:52

Java多線程問題

2017-01-19 10:24:38

Java多線程問題

2024-10-17 09:29:06

2025-07-11 00:57:30

2009-07-17 17:29:13

多任務(wù)多線程

2010-03-17 19:24:38

Java多線程循環(huán)

2009-03-12 10:52:43

Java線程多線程

2020-04-07 11:10:30

Python數(shù)據(jù)線程

2010-01-08 10:48:05

VB.NET多線程

2010-03-17 09:33:30

Java多線程方案

2023-06-05 07:56:10

線程分配處理器
點(diǎn)贊
收藏

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

台湾佬综合网| 6699嫩草久久久精品影院| 久久爱另类一区二区小说| 不卡av电影院| 黄色性视频网站| 亚洲精品在线影院| 一级中文字幕一区二区| 免费精品视频一区二区三区| 夜夜躁很很躁日日躁麻豆| 午夜日韩激情| 亚洲一级免费视频| 成人啪啪18免费游戏链接| 国产另类xxxxhd高清| 一区在线中文字幕| 精品一区二区三区自拍图片区| 成人免费一区二区三区| 在线欧美不卡| 久久久999精品视频| 亚洲 欧美 日韩在线| 欧美91在线|欧美| 岛国av在线不卡| 樱空桃在线播放| 国产美女性感在线观看懂色av| 国产91精品露脸国语对白| 国产精品第七十二页| 国产在线视频在线观看| 无码一区二区三区视频| 亚洲欧美日韩一区在线| 国产a级片视频| 不卡精品视频| 欧美日韩黄视频| 日韩欧美黄色大片| 国产直播在线| 亚洲一区二区三区美女| 国产成人生活片| 日本高清中文字幕在线| 国产视频一区在线观看 | 黄色一级片免费在线观看| 欧美国产高潮xxxx1819| 久久精品亚洲国产| 亚洲综合图片一区| 成人精品久久| 一区二区三区视频观看| 蜜臀av一区二区三区有限公司| 一区二区精彩视频| 欧美一二三四在线| 永久免费看片在线观看| 日韩视频一二区| 欧美日韩不卡一区二区| 亚洲 欧美 另类人妖| 日本免费一区二区三区四区| 欧美性xxxxxxx| 免费在线观看亚洲视频| 男人的天堂免费在线视频| 午夜av区久久| 久久国产亚洲精品无码| 成人美女视频| 欧美亚洲尤物久久| 91极品视频在线观看| 国产精品无码久久久久| 欧美久久免费观看| gogo亚洲国模私拍人体| 凹凸av导航大全精品| 亚洲第一天堂av| 国产精品无码毛片| 五月天亚洲一区| 亚洲欧美国产视频| 国产第一页精品| 亚洲精品二区三区| 欧美激情免费观看| 亚洲GV成人无码久久精品 | 亚洲久久中文字幕| 99久久这里有精品| 欧美白人最猛性xxxxx69交| 国产伦精品一区二区三区88av| 国产精品丝袜在线播放| 亚洲欧美日韩天堂一区二区| 亚洲天堂精品一区| 欧美日韩亚洲一区二区三区在线| 久久久亚洲福利精品午夜| 国产成人在线免费观看视频| 爽好久久久欧美精品| 91精品国产综合久久久久久久久| 性做久久久久久久| 99re这里只有精品6| 亚洲欧洲精品在线观看| 手机av免费在线| 狠狠操狠狠色综合网| 在线观看日本一区二区| 亚洲精品v亚洲精品v日韩精品| 日韩不卡在线观看| www.涩涩爱| 亚洲乱码久久| 国产欧美一区二区三区四区| 人人妻人人澡人人爽久久av| 中文字幕 久热精品 视频在线| 影音先锋男人的网站| 午夜裸体女人视频网站在线观看| 欧美性高清videossexo| 国产精品嫩草69影院| 色综合综合色| 欧美激情一区二区三区成人| 精人妻无码一区二区三区| 国产99久久久精品| 一本久道久久综合| sm久久捆绑调教精品一区| 欧美日韩一区国产| 亚洲中文字幕一区| 欧美 亚欧 日韩视频在线| 热久久这里只有精品| 国产wwwwwww| 中文字幕精品一区二区三区精品| 欧美在线观看视频免费| 欧美va在线观看| 亚洲韩国日本中文字幕| 亚洲欧美精品aaaaaa片| 日韩在线一区二区| 国产一区二区久久久| 最新黄网在线观看| 欧美精品一卡两卡| 精品欧美一区二区久久久| 极品尤物久久久av免费看| 91精品中国老女人| 成人免费黄色网页| 欧美日韩一区二区在线| 国产大学生视频| 欧美日韩三区| 1卡2卡3卡精品视频| 麻豆视频在线观看免费| 欧美在线观看视频一区二区 | 国精产品一区一区三区有限在线| 国产精品视频第一页| 国产女主播在线一区二区| 人妻熟女一二三区夜夜爱| 国产福利一区二区精品秒拍| 久久国产精品久久久久久| 亚洲天堂中文网| 国产精品久久久久一区| 日韩爱爱小视频| 精品少妇av| 国产精品精品视频| 久草福利在线视频| 在线观看欧美日本| 五月婷六月丁香| 日本aⅴ精品一区二区三区 | 91精品黄色| 亚洲七七久久综合桃花剧情介绍| 欧美一级日韩不卡播放免费| 成人涩涩小片视频日本| 精品一区二区三区影院在线午夜| 亚洲制服欧美久久| 国产激情一区| 欧美大片欧美激情性色a∨久久| 国产欧美熟妇另类久久久 | 26uuu国产在线精品一区二区| 免费成人午夜视频| 国产精品嫩模av在线| 国产精品福利在线| 黄在线免费看| 欧美电影免费提供在线观看| 国产在线一区视频| 91蜜桃视频在线| 欧美黄色一级片视频| 凹凸成人精品亚洲精品密奴| 国产伦精品免费视频| 国产激情在线视频| 精品国产乱码久久久久久1区2区 | 中文字幕乱码av| 国产精品伊人色| 一女被多男玩喷潮视频| 国产区精品区| 91欧美激情另类亚洲| 亚洲欧美成人影院| 亚洲精品一二区| 一区不卡在线观看| 尤物av一区二区| 你懂的在线观看网站| 日韩精品一二区| 天天综合中文字幕| 老司机精品在线| 国产精品第七影院| 国产白丝在线观看| 在线播放国产一区中文字幕剧情欧美| 国产一区二区视频免费观看| 亚洲午夜久久久久久久久电影院| 久久久久久久久免费看无码| 蜜桃av噜噜一区| 成人免费看片'免费看| 国产在线日韩精品| 亚洲综合日韩在线| 美女福利一区二区| 麻豆国产精品va在线观看不卡| 亚洲欧美日韩成人在线| 欧美精品亚洲二区| 久久久久久久久久影院| 中文字幕在线不卡一区二区三区| 国产伦精品一区二区三区88av| 免费av网站大全久久| 日本大胆人体视频| 日韩成人免费| 鲁鲁视频www一区二区| 欧美第一在线视频| 国产精品海角社区在线观看| av成人 com a| 欧美超级乱淫片喷水| 日av在线播放| 精品精品欲导航| 夜夜嗨av禁果av粉嫩avhd| 日韩欧美国产高清91| 欧美成人综合色| 国产精品视频一二三区| 性欧美成人播放77777| 国产精品自在欧美一区| 污污网站免费看| 久久高清国产| 青青青青草视频| 亚洲色图欧美| 一区二区国产日产| 国产精品探花在线观看| 久久精品二区| 麻豆一区一区三区四区| 国产成人精品免费视频大全最热 | 精品国产一区久久| 国产人妖一区二区三区| 欧美人狂配大交3d怪物一区| 无码视频在线观看| 欧美日韩一二三四五区| 国产一级二级三级视频| 亚洲免费观看高清完整版在线| www..com.cn蕾丝视频在线观看免费版 | 依依成人综合视频| 免费看特级毛片| 国产精品久久久久aaaa| 黄色片网站在线播放| 亚洲国产精品高清| 国产18无套直看片| 日本一区免费视频| 神马久久久久久久久久久| 26uuu亚洲综合色| 亚洲天堂网一区二区| 99精品视频在线观看免费| 色综合久久五月| 成人激情综合网站| 制服丝袜第一页在线观看| 成人性生交大片| 人妻激情偷乱频一区二区三区| 福利一区二区在线| 欧美一区二区免费在线观看| 成人av网址在线| 亚洲国产果冻传媒av在线观看| 91在线你懂得| b站大片免费直播| 国产女人水真多18毛片18精品视频| 国产123在线| ●精品国产综合乱码久久久久| 男人晚上看的视频| 亚洲精品国产无套在线观| 精品在线视频免费观看| 精品女厕一区二区三区| 无码人妻丰满熟妇精品| 欧美日韩国产三级| 国产chinasex对白videos麻豆| 日韩精品一区二区三区视频播放 | 91成年人视频| 欧美一区二区久久久| 老熟妇高潮一区二区高清视频| 亚洲第一免费播放区| 久久精品蜜桃| 久久精品一本久久99精品| 欧美色图天堂| 欧美自拍视频在线观看| 成人性片免费| 91久久大香伊蕉在人线| 亚洲精品合集| 一级一片免费播放| 91久久综合| 少妇激情一区二区三区| 国产在线一区观看| 800av在线播放| 亚洲国产精品ⅴa在线观看| 亚洲色图综合区| 岛国av在线不卡| 国产精品国产一区二区三区四区| 欧美哺乳videos| 国产高清免费av在线| 欧美人交a欧美精品| 都市激情亚洲综合| 亚洲曰本av电影| 夜夜躁狠狠躁日日躁2021日韩| 伊人av成人| 国产农村妇女毛片精品久久莱园子| youjizzxxxx18| av一区二区久久| 精品亚洲乱码一区二区| 午夜激情综合网| 91精品中文字幕| 亚洲精品一区中文| 污视频网站在线免费| 国产精品嫩草影院久久久| 成人资源在线| 黄色网址在线免费看| 日韩av电影一区| 精品少妇人妻av一区二区三区| 中文字幕日韩av资源站| 一级片在线观看免费| 精品国产sm最大网站免费看| 中文字幕在线播放| 欧美亚洲另类制服自拍| 日韩区欧美区| 亚洲欧洲精品在线观看| 久久中文在线| 无码精品一区二区三区在线播放| 日韩理论在线观看| 国产精品自拍第一页| 亚洲娇小xxxx欧美娇小| 羞羞的视频在线观看| 91精品啪在线观看麻豆免费| 久久99国产精品视频| 久久精品国产sm调教网站演员| 国内精品第一页| 美女三级黄色片| 欧美色网一区二区| 国产露出视频在线观看| 欧美与黑人午夜性猛交久久久| 中文字幕亚洲在线观看| 一本二本三本亚洲码| 久久丁香综合五月国产三级网站 | 无套内谢的新婚少妇国语播放| 操人视频在线观看欧美| 亚洲电影二区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 久久三级福利| 久久久久亚洲av无码专区桃色| 亚洲va欧美va人人爽| 亚洲第一天堂影院| 欧美精品aaa| 视频欧美一区| 欧妇女乱妇女乱视频| 国产成a人亚洲| 精品无码av在线| 亚洲第一精品福利| 男人天堂视频在线观看| 国产一区在线免费观看| 亚洲精品视频啊美女在线直播| 制服丝袜在线第一页| 亚洲国产精品一区二区久久| 国产成人三级在线观看视频| 久久男人av资源网站| 日韩大尺度在线观看| 国产最新免费视频| 久久久久久免费| 中文在线观看免费高清| 久久久97精品| 国产成人tv| 日本熟妇人妻xxxxx| 欧美激情一区二区三区四区| 亚洲一级特黄毛片| 另类视频在线观看| 超碰在线一区| 欧美精品色婷婷五月综合| 国产欧美日韩亚州综合| 91福利在线观看视频| 久久6免费高清热精品| 美女视频亚洲色图| 黄色片视频在线播放| 中文字幕av一区二区三区免费看| 中文字幕日产av| 九九热精品视频在线播放| 久久婷婷国产| 一级片视频免费观看| 亚洲一区二区综合| 久香视频在线观看| 成人疯狂猛交xxx| 樱桃成人精品视频在线播放| 97超碰在线免费观看| 7777精品久久久大香线蕉| 国内老司机av在线| 日本免费高清一区| 国产精品一区二区久久不卡| 国产精品777777| 日韩视频在线免费| 日韩有码中文字幕在线| 鲁一鲁一鲁一鲁一av| 亚洲成av人片在线观看| 在线观看黄色av| 国产一区免费在线观看| 免费观看日韩av| 日本一二三区视频| 社区色欧美激情 | 秋霞影院一区二区三区| 午夜xxxxx| 色素色在线综合| 色老头在线观看| 一区二区成人国产精品| 91亚洲资源网| 99在线无码精品入口| 国产成一区二区| 亚洲少妇在线| 玖玖爱免费视频| 日韩在线观看视频免费|