日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

線程池遇到父子任務(wù),有大坑,要注意!

來源: 責(zé)編: 時間:2024-07-17 07:45:11 590觀看
導(dǎo)讀你好呀,我是歪歪。最近在使用線程池的時候踩了一個坑,給你分享一下。在實(shí)際業(yè)務(wù)場景下,涉及到業(yè)務(wù)代碼和不同的微服務(wù),導(dǎo)致問題有點(diǎn)難以定位,但是最終分析出原因之后,發(fā)現(xiàn)可以用一個很簡單的例子來演示。所以歪師傅這次先用

你好呀,我是歪歪。Q6128資訊網(wǎng)——每日最新資訊28at.com

最近在使用線程池的時候踩了一個坑,給你分享一下。Q6128資訊網(wǎng)——每日最新資訊28at.com

在實(shí)際業(yè)務(wù)場景下,涉及到業(yè)務(wù)代碼和不同的微服務(wù),導(dǎo)致問題有點(diǎn)難以定位,但是最終分析出原因之后,發(fā)現(xiàn)可以用一個很簡單的例子來演示。Q6128資訊網(wǎng)——每日最新資訊28at.com

所以歪師傅這次先用 Demo 說問題,再說場景,方便吸收。Q6128資訊網(wǎng)——每日最新資訊28at.com

Demo

老規(guī)矩,還是先上個代碼:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

這個代碼的邏輯非常簡單,首先我們搞了一個線程池,然后起一個 for 循環(huán)往線程池里面仍了 5 個任務(wù),這是核心邏輯。Q6128資訊網(wǎng)——每日最新資訊28at.com

對于這幾個任務(wù),我們的這個自定義線程池處理起來,不能說得心應(yīng)手吧,至少也是手拿把掐。Q6128資訊網(wǎng)——每日最新資訊28at.com

其他的 StopWatch 是為了統(tǒng)計運(yùn)行時間用的。至于 CountDownLatch,你可以理解為在業(yè)務(wù)流程中,需要這五個任務(wù)都執(zhí)行完成之后才能往下走,所以我搞了一個 CountDownLatch。Q6128資訊網(wǎng)——每日最新資訊28at.com

這個代碼運(yùn)行起來是沒有任何問題的,我們在日志中搜索“執(zhí)行完成”,也能搜到 5 個,這個結(jié)果也能證明程序是正常結(jié)束的:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

同時,可以看到運(yùn)行時間是 4s。Q6128資訊網(wǎng)——每日最新資訊28at.com

示意圖大概是這樣的:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

然后歪師傅看著這個代碼,發(fā)現(xiàn)了一個可以優(yōu)化的地方:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

這個地方從數(shù)據(jù)庫撈出來的數(shù)據(jù),它們之間是沒有依賴關(guān)系的,也就是說它們之間也是可以并行執(zhí)行的。Q6128資訊網(wǎng)——每日最新資訊28at.com

所以歪師傅把代碼改成了這樣:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

在異步線程里面去處理這部分從數(shù)據(jù)庫中撈出來的數(shù)據(jù),并行處理加快響應(yīng)速度。Q6128資訊網(wǎng)——每日最新資訊28at.com

對應(yīng)到圖片,大概就是這個意思:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

把程序運(yùn)行起來之后,日志變成了這樣:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

我們搜索“執(zhí)行完成”,也能搜到 5 個對應(yīng)輸出。Q6128資訊網(wǎng)——每日最新資訊28at.com

而且我們就拿“任務(wù)2”來說:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

當(dāng)前線程pool-1-thread-3,---【任務(wù)2】開始執(zhí)行---當(dāng)前線程pool-1-thread-3,---【任務(wù)2】執(zhí)行完成---當(dāng)前線程pool-1-thread-1,【任務(wù)2】開始處理數(shù)據(jù)=1當(dāng)前線程pool-1-thread-2,【任務(wù)2】開始處理數(shù)據(jù)=2

從日志輸出來看,任務(wù) 2 需要處理的兩個數(shù)據(jù),確實(shí)是在不同的異步線程中處理數(shù)據(jù),也實(shí)現(xiàn)了我的需求。Q6128資訊網(wǎng)——每日最新資訊28at.com

但是,程序運(yùn)行直接就是到了 9.9ms:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

這個優(yōu)化這么牛逼的嗎?Q6128資訊網(wǎng)——每日最新資訊28at.com

從 4s 到了 9.9ms?Q6128資訊網(wǎng)——每日最新資訊28at.com

稍加分析,你會發(fā)現(xiàn)這里面是有問題的。Q6128資訊網(wǎng)——每日最新資訊28at.com

那么問題就來了,到底是啥問題呢?Q6128資訊網(wǎng)——每日最新資訊28at.com

你也分析分析大概是啥問題,別老是想著直接找答案啊。Q6128資訊網(wǎng)——每日最新資訊28at.com

問題就是由于轉(zhuǎn)異步了,所以 for 循環(huán)里面的任務(wù)中的 countDownLatch 很快就減到 0 了。Q6128資訊網(wǎng)——每日最新資訊28at.com

于是 await 繼續(xù)執(zhí)行,所以很快就輸出了程序運(yùn)行時間。Q6128資訊網(wǎng)——每日最新資訊28at.com

然而實(shí)際上子任務(wù)還在繼續(xù)執(zhí)行,程序并沒有真正完成。Q6128資訊網(wǎng)——每日最新資訊28at.com

9.9ms 只是任務(wù)提交到線程池的時間,每個任務(wù)的數(shù)據(jù)處理時間還沒算呢:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

從日志輸出上也可以看出,在輸出了 StopWatch 的日志后,各個任務(wù)還在處理數(shù)據(jù)。Q6128資訊網(wǎng)——每日最新資訊28at.com

這樣時間就顯得不夠真實(shí)。Q6128資訊網(wǎng)——每日最新資訊28at.com

那么我們應(yīng)該怎么辦呢?Q6128資訊網(wǎng)——每日最新資訊28at.com

很簡單嘛,需要子任務(wù)真正執(zhí)行完成后,父任務(wù)的 countDownLatch 才能進(jìn)行 countDown 的動作。Q6128資訊網(wǎng)——每日最新資訊28at.com

具體實(shí)現(xiàn)上就是給子任務(wù)再加一個 countDownLatch 柵欄:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

我們希望的運(yùn)行結(jié)果應(yīng)該是這樣的:Q6128資訊網(wǎng)——每日最新資訊28at.com

當(dāng)前線程pool-1-thread-3,---【任務(wù)2】開始執(zhí)行---當(dāng)前線程pool-1-thread-1,【任務(wù)2】開始處理數(shù)據(jù)=1當(dāng)前線程pool-1-thread-2,【任務(wù)2】開始處理數(shù)據(jù)=2當(dāng)前線程pool-1-thread-3,---【任務(wù)2】執(zhí)行完成---

即子任務(wù)全部完成之后,父任務(wù)才能算執(zhí)行完成,這樣統(tǒng)計出來的時間才是準(zhǔn)確的。Q6128資訊網(wǎng)——每日最新資訊28at.com

思路清晰,非常完美,再次運(yùn)行,觀察日志我們會發(fā)現(xiàn):Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

呃,怎么回事,日志怎么不輸出了?Q6128資訊網(wǎng)——每日最新資訊28at.com

是的,就是不輸出了。Q6128資訊網(wǎng)——每日最新資訊28at.com

不輸出了,就是踩到這個坑了。Q6128資訊網(wǎng)——每日最新資訊28at.com

不論你重啟多少次,都是這樣:日志不輸出了,程序就像是卡著了一樣。Q6128資訊網(wǎng)——每日最新資訊28at.com

坑在哪兒

上面這個 Demo 已經(jīng)是我基于遇到的生產(chǎn)問題,極力簡化后的版本了。Q6128資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在,這個坑也已經(jīng)呈現(xiàn)在你眼前了。Q6128資訊網(wǎng)——每日最新資訊28at.com

我們一起來分析一波。Q6128資訊網(wǎng)——每日最新資訊28at.com

首先,我問你:真的在線上遇到這種程序“假死”的問題,你會怎么辦?Q6128資訊網(wǎng)——每日最新資訊28at.com

早幾年,歪師傅的習(xí)慣是抱著代碼慢慢啃,試圖從代碼中找到端倪。Q6128資訊網(wǎng)——每日最新資訊28at.com

這樣確實(shí)是可以,但是通常來說效率不高。Q6128資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在我的習(xí)慣是直接把現(xiàn)場 dump 下來,分析現(xiàn)場。Q6128資訊網(wǎng)——每日最新資訊28at.com

比如在這個場景下,我們直觀上的感受是“卡住了”,那就 dump 一把線程,管它有棗沒棗,打一桿子再說:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

通過 Dump 文件,可以發(fā)現(xiàn)線程池的線程都在 MainTest 的第 30 行上 parking ,處于等待狀態(tài):Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

那么第 30 行是啥玩意?Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

這行代碼在干啥?Q6128資訊網(wǎng)——每日最新資訊28at.com

countDownLatchSub.await();Q6128資訊網(wǎng)——每日最新資訊28at.com

是父任務(wù)在等待子任務(wù)執(zhí)行結(jié)束,運(yùn)行 finally 代碼,把 countDownLatchSub 的計數(shù) countDown 到 0,才會繼續(xù)執(zhí)行:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

所以現(xiàn)在的現(xiàn)象就是子任務(wù)的 countDownLatchSub 把父任務(wù)的攔住了。Q6128資訊網(wǎng)——每日最新資訊28at.com

換句話說就是父任務(wù)被攔住是因為子任務(wù)的 finally 代碼中的 countDownLatchSub.countDown() 方法沒有被執(zhí)行。Q6128資訊網(wǎng)——每日最新資訊28at.com

好,那么最關(guān)鍵的問題就來了:為什么沒有執(zhí)行?Q6128資訊網(wǎng)——每日最新資訊28at.com

你先別往下看,閉上眼睛在你的小腦瓜子里面推演一下,琢磨一下:finally 為什么沒有執(zhí)行?Q6128資訊網(wǎng)——每日最新資訊28at.com

或者再換個更加接近真實(shí)的問題:子任務(wù)為什么沒有執(zhí)行?Q6128資訊網(wǎng)——每日最新資訊28at.com

這個點(diǎn),非常簡單,可以說一點(diǎn)就破。Q6128資訊網(wǎng)——每日最新資訊28at.com

琢磨明白了,這個坑的原理摸摸清楚了。Q6128資訊網(wǎng)——每日最新資訊28at.com

...Q6128資訊網(wǎng)——每日最新資訊28at.com

...Q6128資訊網(wǎng)——每日最新資訊28at.com

...Q6128資訊網(wǎng)——每日最新資訊28at.com

琢磨明白了嗎?你就刷刷往下看?Q6128資訊網(wǎng)——每日最新資訊28at.com

沒明白我再給你一個信息:需要結(jié)合線程池的參數(shù)和運(yùn)行原理來分析。Q6128資訊網(wǎng)——每日最新資訊28at.com

什么?Q6128資訊網(wǎng)——每日最新資訊28at.com

你說線程池的運(yùn)行原理你不清楚?Q6128資訊網(wǎng)——每日最新資訊28at.com

請你取關(guān)好嗎,你個假粉絲。Q6128資訊網(wǎng)——每日最新資訊28at.com

...Q6128資訊網(wǎng)——每日最新資訊28at.com

...Q6128資訊網(wǎng)——每日最新資訊28at.com

...Q6128資訊網(wǎng)——每日最新資訊28at.com

好,不管你“恍然大悟”了沒有,歪師傅給你講一下。Q6128資訊網(wǎng)——每日最新資訊28at.com

讓你知道“一點(diǎn)就破”這四個是怎么回事兒。Q6128資訊網(wǎng)——每日最新資訊28at.com

首先,我們把目光聚焦在線程池這里:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

這個線程池核心線程數(shù)是 3,但是我們要提交 5 個任務(wù)到線程池去。Q6128資訊網(wǎng)——每日最新資訊28at.com

父任務(wù)哐哐哐,就把核心線程數(shù)占滿了。Q6128資訊網(wǎng)——每日最新資訊28at.com

接下來子任務(wù)也要往這個線程池提交任務(wù)怎么辦?Q6128資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然是進(jìn)隊列等著了。Q6128資訊網(wǎng)——每日最新資訊28at.com

一進(jìn)隊列,就完犢子。Q6128資訊網(wǎng)——每日最新資訊28at.com

到這里,我覺得你應(yīng)該能想明白問題了。Q6128資訊網(wǎng)——每日最新資訊28at.com

應(yīng)該給到我一個恍然大悟的表情,并配上“哦哦哦~”這樣的內(nèi)心 OS。Q6128資訊網(wǎng)——每日最新資訊28at.com

你想想,父任務(wù)這個時候干啥?Q6128資訊網(wǎng)——每日最新資訊28at.com

是不是等在 countDownLatchSub.await() 這里。Q6128資訊網(wǎng)——每日最新資訊28at.com

而 countDownLatchSub.await() 什么時候能繼續(xù)執(zhí)行?Q6128資訊網(wǎng)——每日最新資訊28at.com

是不是要所有子任務(wù)都執(zhí)行 finally 后?Q6128資訊網(wǎng)——每日最新資訊28at.com

那么子任務(wù)現(xiàn)在在干啥?Q6128資訊網(wǎng)——每日最新資訊28at.com

是不是都在線程池里面的隊列等著被執(zhí)行呢?Q6128資訊網(wǎng)——每日最新資訊28at.com

那線程池隊列里面的任務(wù)什么時候才執(zhí)行?Q6128資訊網(wǎng)——每日最新資訊28at.com

是不是等著有空閑線程的時候?Q6128資訊網(wǎng)——每日最新資訊28at.com

那現(xiàn)在有沒有空閑線程?Q6128資訊網(wǎng)——每日最新資訊28at.com

沒有,所有的線程都去執(zhí)行父任務(wù)去了。Q6128資訊網(wǎng)——每日最新資訊28at.com

那你想想,父任務(wù)這個時候干啥?Q6128資訊網(wǎng)——每日最新資訊28at.com

是不是等在 countDownLatchSub.await() 這里。Q6128資訊網(wǎng)——每日最新資訊28at.com

...Q6128資訊網(wǎng)——每日最新資訊28at.com

父任務(wù)在等子任務(wù)執(zhí)行。Q6128資訊網(wǎng)——每日最新資訊28at.com

子任務(wù)在等線程池調(diào)度。Q6128資訊網(wǎng)——每日最新資訊28at.com

線程池在等父任務(wù)釋放線程。Q6128資訊網(wǎng)——每日最新資訊28at.com

閉環(huán)了,相互等待了,家人們。Q6128資訊網(wǎng)——每日最新資訊28at.com

這,就是坑。Q6128資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在把坑的原理摸清楚了,我在給你說一下真實(shí)的線上場景踩到這個坑是怎么樣的呢?Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

上游發(fā)起請求到微服務(wù) A 的接口 1,該接口需要調(diào)用微服務(wù) B 的接口 2。Q6128資訊網(wǎng)——每日最新資訊28at.com

但是微服務(wù) B 的接口 2,需要從微服務(wù) A 接口 3 獲取數(shù)據(jù)。Q6128資訊網(wǎng)——每日最新資訊28at.com

然而在微服務(wù) A 內(nèi)部,全局使用的是同一個自定義線程池。Q6128資訊網(wǎng)——每日最新資訊28at.com

更巧的是接口 1 和接口 3 內(nèi)部都使用了這個自定義線程池做異步并行處理,想著是加快響應(yīng)速度。Q6128資訊網(wǎng)——每日最新資訊28at.com

整個情況就變成了這樣:Q6128資訊網(wǎng)——每日最新資訊28at.com

  1. 接口 1 收到請求之后,把請求轉(zhuǎn)到自定義線程池中,然后等接口 2 返回。
  2. 接口 2 調(diào)用接口 3,并等待返回。
  3. 接口 3 里面把請求轉(zhuǎn)到了自定義線程池中,被放入了隊列。
  4. 線程池的線程都被接口 1 給占住了,沒有資源去執(zhí)行隊列里面的接口 3 任務(wù)。
  5. 相互等待,一直僵持。

我們的 Demo 還是能比較清晰的看到父子任務(wù)之間的關(guān)系。Q6128資訊網(wǎng)——每日最新資訊28at.com

但是在這個微服務(wù)的場景下,在無形之間,就形成了不易察覺的父子任務(wù)關(guān)系。Q6128資訊網(wǎng)——每日最新資訊28at.com

所以就踩到了這個坑。Q6128資訊網(wǎng)——每日最新資訊28at.com

怎么避免

找到了坑的原因,解決方案就隨之而出了。Q6128資訊網(wǎng)——每日最新資訊28at.com

父子任務(wù)不要共用一個線程池,給子任務(wù)也搞一個自定義線程池就可以了:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行起來看看日志:Q6128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Q6128資訊網(wǎng)——每日最新資訊28at.com

首先整體運(yùn)行時間只需要 2s 了,達(dá)到了我想要的效果。Q6128資訊網(wǎng)——每日最新資訊28at.com

另外,我們觀察一個具體的任務(wù):Q6128資訊網(wǎng)——每日最新資訊28at.com

當(dāng)前線程pool-1-thread-3,---【任務(wù)2】開始執(zhí)行---當(dāng)前線程pool-2-thread-1,【任務(wù)2】開始處理數(shù)據(jù)=1當(dāng)前線程pool-2-thread-4,【任務(wù)2】開始處理數(shù)據(jù)=2當(dāng)前線程pool-1-thread-3,---【任務(wù)2】執(zhí)行完成---

日志輸出符合我們前面分析的,所有子任務(wù)執(zhí)行完成后,父任務(wù)才打印執(zhí)行完成,且子任務(wù)在不同的線程中執(zhí)行。Q6128資訊網(wǎng)——每日最新資訊28at.com

而使用不同的線程池,換一個高大上的說法就叫做:線程池隔離。Q6128資訊網(wǎng)——每日最新資訊28at.com

而且在一個項目中,公用一個線程池,也是一個埋坑的邏輯。Q6128資訊網(wǎng)——每日最新資訊28at.com

至少給你覺得關(guān)鍵的邏輯,單獨(dú)分配一個線程池吧。Q6128資訊網(wǎng)——每日最新資訊28at.com

避免出現(xiàn)線程池的線程都在執(zhí)行非核心邏輯了,反而重要的任務(wù)在隊列里面排隊去了。Q6128資訊網(wǎng)——每日最新資訊28at.com

這就有點(diǎn)不合理了。Q6128資訊網(wǎng)——每日最新資訊28at.com

最后,一句話總結(jié)這個問題:Q6128資訊網(wǎng)——每日最新資訊28at.com

如果線程池的任務(wù)之間存在父子關(guān)系,那么請不要使用同一個線程池。如果使用了同一個線程池,可能會因為子任務(wù)進(jìn)了隊列,導(dǎo)致父任務(wù)一直等待,出現(xiàn)假死現(xiàn)象。Q6128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-101274-0.html線程池遇到父子任務(wù),有大坑,要注意!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: React 新 Hook:UseFormStatus 使用詳解

下一篇: B+樹層面查詢數(shù)據(jù)的全過程詳解

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • 自動化在DevOps中的力量:簡化軟件開發(fā)和交付

    自動化在DevOps中扮演著重要角色,它提升了DevOps的效能。通過自動化工具和方法,DevOps團(tuán)隊可以實(shí)現(xiàn)以下目標(biāo):消除手動和重復(fù)性任務(wù)。簡化流程。在整個軟件開發(fā)生命周期中實(shí)現(xiàn)更
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業(yè)人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經(jīng)知道了,就當(dāng)作復(fù)習(xí)一下,古人云,溫故而知新嘛。現(xiàn)在,我們就開始今
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯,每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數(shù)登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國境內(nèi)的北坡路線。相
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬

    來源 | 電商在線文|易琬玉編輯|斯問受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、“Ringdoll戒之人形”淘寶店鋪有關(guān)外貌的評價,黃山已經(jīng)聽累了。生于1985年的他,哪
  • 自律,給不了Keep自由!

    來源 | 互聯(lián)網(wǎng)品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 疑似小米14外觀設(shè)計圖曝光:后置相機(jī)模組變化不大

    下半年的大幕已經(jīng)開啟,而誰將成為下半年手機(jī)圈的主角就成為了大家關(guān)注的焦點(diǎn),其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據(jù)10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點(diǎn)包括行業(yè)領(lǐng)先的性能,令人印象深刻的電池續(xù)航,精美豐
Top 主站蜘蛛池模板: 平南县| 贵州省| 海兴县| 祁连县| 如皋市| 来安县| 平武县| 东港市| 普格县| 虹口区| 札达县| 石阡县| 延寿县| 辽中县| 洪雅县| 福安市| 奉贤区| 玛纳斯县| 苍山县| 京山县| 青铜峡市| 德州市| 寻乌县| 资中县| 辰溪县| 沅江市| 桦甸市| 正阳县| 炎陵县| 教育| 乌恰县| 新安县| 彰武县| 乐都县| 张家界市| 电白县| 繁峙县| 盈江县| 余江县| 武威市| 淮安市|