chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis 延時(shí)隊(duì)列,一次性搞明白

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 作者:數(shù)據(jù)分析與開發(fā) ? 2020-10-30 16:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

所謂延時(shí)隊(duì)列就是延時(shí)的消息隊(duì)列,下面說一下一些業(yè)務(wù)場(chǎng)景

實(shí)踐場(chǎng)景

訂單支付失敗,每隔一段時(shí)間提醒用戶

用戶并發(fā)量的情況,可以延時(shí)2分鐘給用戶發(fā)短信

先來看看Redis實(shí)現(xiàn)普通的消息隊(duì)列

我們知道,對(duì)于專業(yè)的消息隊(duì)列中間件,如Kafka和RabbitMQ,消費(fèi)者在消費(fèi)消息之前要進(jìn)行一系列的繁瑣過程。

如RabbitMQ發(fā)消息之前要?jiǎng)?chuàng)建 Exchange,再創(chuàng)建 Queue,還要將 Queue 和 Exchange 通過某種規(guī)則綁定起來,發(fā)消息的時(shí)候要指定 routingkey,還要控制頭部信息

但是絕大 多數(shù)情況下,雖然我們的消息隊(duì)列只有一組消費(fèi)者,但還是需要經(jīng)歷上面一些過程。

有了 Redis,對(duì)于那些只有一組消費(fèi)者的消息隊(duì)列,使用 Redis 就可以非常輕松的搞定。Redis 的消息隊(duì)列不是專業(yè)的消息隊(duì)列,它沒有非常多的高級(jí)特性, 沒有 ack 保證,如果對(duì)消息的可靠性有著極致的追求,那么它就不適合使用

異步消息隊(duì)列基本實(shí)現(xiàn)

Redis 的 list(列表) 數(shù)據(jù)結(jié)構(gòu)常用來作為異步消息隊(duì)列使用,使用 rpush/lpush 操作入隊(duì)列, 使用 lpop 和 rpop 來出隊(duì)列

>rpushqueue月伴飛魚1月伴飛魚2月伴飛魚3 (integer)3 >lpopqueue "月伴飛魚1" >llenqueue (integer)2

問題1:如果隊(duì)列空了

客戶端是通過隊(duì)列的 pop 操作來獲取消息,然后進(jìn)行處理。處理完了再接著獲取消息, 再進(jìn)行處理。如此循環(huán)往復(fù),這便是作為隊(duì)列消費(fèi)者的客戶端的生命周期。

可是如果隊(duì)列空了,客戶端就會(huì)陷入 pop 的死循環(huán),不停地 pop,沒有數(shù)據(jù),接著再 pop, 又沒有數(shù)據(jù)。這就是浪費(fèi)生命的空輪詢??蛰喸儾坏吡丝蛻舳说?CPU,redis 的 QPS 也 會(huì)被拉高,如果這樣空輪詢的客戶端有幾十來個(gè),Redis 的慢查詢可能會(huì)顯著增多。

通常我們使用 sleep 來解決這個(gè)問題,讓線程睡一會(huì),睡個(gè) 1s 鐘就可以了。不但客戶端 的 CPU 能降下來,Redis 的 QPS 也降下來了

問題2:隊(duì)列延遲

用上面睡眠的辦法可以解決問題。同時(shí)如果只有 1 個(gè)消費(fèi)者,那么這個(gè)延遲就是 1s。如果有多個(gè)消費(fèi)者,這個(gè)延遲會(huì)有所下降,因 為每個(gè)消費(fèi)者的睡覺時(shí)間是岔開來的。

有沒有什么辦法能顯著降低延遲呢?

那就是 blpop/brpop。

這兩個(gè)指令的前綴字符 b 代表的是 blocking,也就是阻塞讀。

阻塞讀在隊(duì)列沒有數(shù)據(jù)的時(shí)候,會(huì)立即進(jìn)入休眠狀態(tài),一旦數(shù)據(jù)到來,則立刻醒過來。消 息的延遲幾乎為零。用 blpop/brpop 替代前面的 lpop/rpop,就完美解決了上面的問題。

問題3:空閑連接自動(dòng)斷開

其實(shí)他還有個(gè)問題需要解決—— 空閑連接的問題。

如果線程一直阻塞在哪里,Redis 的客戶端連接就成了閑置連接,閑置過久,服務(wù)器一般 會(huì)主動(dòng)斷開連接,減少閑置資源占用。這個(gè)時(shí)候 blpop/brpop 會(huì)拋出異常來。

所以編寫客戶端消費(fèi)者的時(shí)候要小心,注意捕獲異常,還要重試。

分布式鎖沖突處理

假如客戶端在處理請(qǐng)求時(shí)加分布式鎖沒加成功怎么辦。

一般有 3 種策略來處理加鎖失?。?/p>

1、直接拋出異常,通知用戶稍后重試;

2、sleep 一會(huì)再重試;

3、將請(qǐng)求轉(zhuǎn)移至延時(shí)隊(duì)列,過一會(huì)再試;

直接拋出特定類型的異常

這種方式比較適合由用戶直接發(fā)起的請(qǐng)求,用戶看到錯(cuò)誤對(duì)話框后,會(huì)先閱讀對(duì)話框的內(nèi) 容,再點(diǎn)擊重試,這樣就可以起到人工延時(shí)的效果。如果考慮到用戶體驗(yàn),可以由前端的代碼 替代用戶自己來進(jìn)行延時(shí)重試控制。它本質(zhì)上是對(duì)當(dāng)前請(qǐng)求的放棄,由用戶決定是否重新發(fā)起 新的請(qǐng)求。

sleep

sleep 會(huì)阻塞當(dāng)前的消息處理線程,會(huì)導(dǎo)致隊(duì)列的后續(xù)消息處理出現(xiàn)延遲。如果碰撞的比 較頻繁或者隊(duì)列里消息比較多,sleep 可能并不合適。如果因?yàn)閭€(gè)別死鎖的 key 導(dǎo)致加鎖不成 功,線程會(huì)徹底堵死,導(dǎo)致后續(xù)消息永遠(yuǎn)得不到及時(shí)處理。

延時(shí)隊(duì)列

這種方式比較適合異步消息處理,將當(dāng)前沖突的請(qǐng)求扔到另一個(gè)隊(duì)列延后處理以避開沖突。

延時(shí)隊(duì)列的實(shí)現(xiàn)

我們可以使用 zset這個(gè)命令,用設(shè)置好的時(shí)間戳作為score進(jìn)行排序,使用zadd score1 value1 ....命令就可以一直往內(nèi)存中生產(chǎn)消息。再利用 zrangebysocre 查詢符合條件的所有待處理的任務(wù),通過循環(huán)執(zhí)行隊(duì)列任務(wù)即可。也可以通過zrangebyscore key min max withscores limit 0 1查詢最早的一條任務(wù),來進(jìn)行消費(fèi)

privateJedisjedis; publicvoidredisDelayQueueTest(){ Stringkey="delay_queue"; //實(shí)際開發(fā)建議使用業(yè)務(wù)ID和隨機(jī)生成的唯一ID作為value,隨機(jī)生成的唯一ID可以保證消息的唯一性,業(yè)務(wù)ID可以避免value攜帶的信息過多 StringorderId1=UUID.randomUUID().toString(); jedis.zadd(queueKey,System.currentTimeMillis()+5000,orderId1); StringorderId12=UUID.randomUUID().toString(); jedis.zadd(queueKey,System.currentTimeMillis()+5000,orderId2); newThread(){ @Override publicvoidrun(){ while(true){ SetresultList; //只獲取第一條數(shù)據(jù),只獲取不會(huì)移除數(shù)據(jù) resultList=jedis.zrangebyscore(key,System.currentTimeMillis(),0,1); if(resultList.size()==0){ try{ Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); break; } }else{ //移除數(shù)據(jù)獲取到的數(shù)據(jù) if(jedis.zrem(key,resultList.get(0))>0){ StringorderId=resultList.get(0); log.info("orderId={}",resultList.get(0)); this.handleMsg(orderId); } } } } }.start(); } publicvoidhandleMsg(Tmsg){ System.out.println(msg); }

上面的實(shí)現(xiàn), 在多線程邏輯上也是沒有問題的, 假設(shè)有兩個(gè)線程 T1, T2和其他更多線程, 處理邏輯如下, 保證了多線程情況下只有一個(gè)線程處理了對(duì)應(yīng)的消息:

1.T1, T2 和其他更多線程調(diào)用 zrangebyscore 獲取到了一條消息 A

2.T1 準(zhǔn)備開始刪除消息 A, 由于是原子操作, T2 和其他更多線程等待 T1 執(zhí)行 zrem 刪除消息 A 后再執(zhí)行 zrem 刪除消息 A

3.T1 刪除了消息 A, 返回刪除成功標(biāo)記 1, 并對(duì)消息 A 進(jìn)行處理

4.T2 其他更多線程開始 zrem 刪除消息 A, 由于消息 A 已經(jīng)被刪除, 所以所有的刪除均失敗, 放棄了對(duì)消息 A 的處理

同時(shí),我們要注意一定要對(duì)handle_msg進(jìn)行異常捕獲,避免因?yàn)閭€(gè)別任務(wù)處理問題導(dǎo)致循環(huán)異常退 出

進(jìn)一步優(yōu)化

上面的算法中同一個(gè)任務(wù)可能會(huì)被多個(gè)進(jìn)程取到之后再使用 zrem 進(jìn)行爭(zhēng)搶,那些沒搶到 的進(jìn)程都是白取了一次任務(wù),這是浪費(fèi)??梢钥紤]使用 lua scripting 來優(yōu)化一下這個(gè)邏輯,將 zrangebyscore 和 zrem 一同挪到服務(wù)器端進(jìn)行原子化操作,這樣多個(gè)進(jìn)程之間爭(zhēng)搶任務(wù)時(shí)就不 會(huì)出現(xiàn)這種浪費(fèi)了

使用調(diào)用Lua腳本進(jìn)一步優(yōu)化

Lua 腳本, 如果有超時(shí)的消息, 就刪除, 并返回這條消息, 否則返回空字符串:

StringluaScript="localresultArray=redis.call('zrangebyscore',KEYS[1],0,ARGV[1],'limit',0,1) "+ "if#resultArray>0then "+ "ifredis.call('zrem',KEYS[1],resultArray[1])>0then "+ "returnresultArray[1] "+ "else "+ "return'' "+ "end "+ "else "+ "return'' "+ "end"; jedis.eval(luaScript,ScriptOutputType.VALUE,newString[]{key},String.valueOf(System.currentTimeMillis()));

Redis延時(shí)隊(duì)列優(yōu)勢(shì)

Redis用來進(jìn)行實(shí)現(xiàn)延時(shí)隊(duì)列是具有這些優(yōu)勢(shì)的:

1.Redis zset支持高性能的 score 排序。

2.Redis是在內(nèi)存上進(jìn)行操作的,速度非常快。

3.Redis可以搭建集群,當(dāng)消息很多時(shí)候,我們可以用集群來提高消息處理的速度,提高可用性。

4.Redis具有持久化機(jī)制,當(dāng)出現(xiàn)故障的時(shí)候,可以通過AOF和RDB方式來對(duì)數(shù)據(jù)進(jìn)行恢復(fù),保證了數(shù)據(jù)的可靠性

Redis延時(shí)隊(duì)列劣勢(shì)

使用 Redis 實(shí)現(xiàn)的延時(shí)消息隊(duì)列也存在數(shù)據(jù)持久化, 消息可靠性的問題

沒有重試機(jī)制 - 處理消息出現(xiàn)異常沒有重試機(jī)制, 這些需要自己去實(shí)現(xiàn), 包括重試次數(shù)的實(shí)現(xiàn)等

沒有 ACK 機(jī)制 - 例如在獲取消息并已經(jīng)刪除了消息情況下, 正在處理消息的時(shí)候客戶端崩潰了, 這條正在處理的這些消息就會(huì)丟失, MQ 是需要明確的返回一個(gè)值給 MQ 才會(huì)認(rèn)為這個(gè)消息是被正確的消費(fèi)了

如果對(duì)消息可靠性要求較高, 推薦使用 MQ 來實(shí)現(xiàn)

Redission實(shí)現(xiàn)延時(shí)隊(duì)列

基于Redis的Redisson分布式延遲隊(duì)列結(jié)構(gòu)的RDelayedQueue Java對(duì)象在實(shí)現(xiàn)了RQueue接口的基礎(chǔ)上提供了向隊(duì)列按要求延遲添加項(xiàng)目的功能。該功能可以用來實(shí)現(xiàn)消息傳送延遲按幾何增長(zhǎng)或幾何衰減的發(fā)送策略

RQueuedistinationQueue=... RDelayedQueuedelayedQueue=getDelayedQueue(distinationQueue); //10秒鐘以后將消息發(fā)送到指定隊(duì)列 delayedQueue.offer("msg1",10,TimeUnit.SECONDS); //一分鐘以后將消息發(fā)送到指定隊(duì)列 delayedQueue.offer("msg2",1,TimeUnit.MINUTES);

在該對(duì)象不再需要的情況下,應(yīng)該主動(dòng)銷毀。僅在相關(guān)的Redisson對(duì)象也需要關(guān)閉的時(shí)候可以不用主動(dòng)銷毀。

RDelayedQueuedelayedQueue=... delayedQueue.destroy();

是不是很方便...............

責(zé)任編輯:xj

原文標(biāo)題:Redis 延時(shí)隊(duì)列,這次徹底給你整明白了

文章出處:【微信公眾號(hào):數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    89

    文章

    3704

    瀏覽量

    96264
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20653
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    390

    瀏覽量

    11866

原文標(biāo)題:Redis 延時(shí)隊(duì)列,這次徹底給你整明白了

文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    bootloader和APP燒錄,能不能一次性分別燒錄到對(duì)應(yīng)的位置?

    目前我是用STM32 ST-LINK Utility將bootloader和APP分別下載到對(duì)應(yīng)的地址分區(qū),那么各位有什么更好的辦法可以一次性的將這兩個(gè)文件燒錄? 主要是解決量產(chǎn)的問題,我也想找對(duì)應(yīng)的DLL庫自己開發(fā)個(gè)上位機(jī)軟件來解決這個(gè)問題,但是并沒有找到有效的API
    發(fā)表于 09-25 06:34

    地平線征程6B一次性成功點(diǎn)亮

    近日,地平線面向入門級(jí)主動(dòng)安全領(lǐng)域的新代車載智能計(jì)算方案——征程6B一次性成功點(diǎn)亮!從回片上電到1V出圖僅用時(shí)23分鐘,征程6B再次刷新智駕計(jì)算方案點(diǎn)亮的行業(yè)速度!自2024年發(fā)布以來,地平線征程
    的頭像 發(fā)表于 07-16 17:35 ?769次閱讀

    一次性血壓傳感器NPC-100T:精準(zhǔn)監(jiān)測(cè)的無菌守護(hù)者

    在醫(yī)療領(lǐng)域,血壓監(jiān)測(cè)是評(píng)估患者生命體征、指導(dǎo)臨床決策的核心環(huán)節(jié)。傳統(tǒng)可重復(fù)使用的血壓傳感器雖然普及,但存在交叉感染風(fēng)險(xiǎn)、消毒成本高以及設(shè)備老化導(dǎo)致的精度下降等問題。一次性血壓傳感器NPC-100T
    的頭像 發(fā)表于 05-19 13:21 ?375次閱讀
    <b class='flag-5'>一次性</b>血壓傳感器NPC-100T:精準(zhǔn)監(jiān)測(cè)的無菌守護(hù)者

    一次消諧裝置與二消諧裝置區(qū)別、一次消諧器與二消諧器的區(qū)別

    一次消諧器與二消諧器是電力系統(tǒng)中用于抑制諧振過電壓的不同裝置,主要區(qū)別如下: 安裝位置:一次消諧器串聯(lián)于電壓互感器(PT)一次側(cè)中性點(diǎn)與地之間,直接承受高電壓;二
    的頭像 發(fā)表于 05-07 09:58 ?2452次閱讀
    <b class='flag-5'>一次</b>消諧裝置與二<b class='flag-5'>次</b>消諧裝置區(qū)別、<b class='flag-5'>一次</b>消諧器與二<b class='flag-5'>次</b>消諧器的區(qū)別

    一次性使用心電電極片性能測(cè)試 深圳測(cè)

    一次性使用心電電極片性能測(cè)試 :YICE0196 心電電極電性能測(cè)試儀、 心電電極電性能測(cè)試儀(SEAM) 心電電極性能測(cè)試儀
    的頭像 發(fā)表于 03-19 11:27 ?812次閱讀
    <b class='flag-5'>一次性</b>使用心電電極片性能測(cè)試 深圳<b class='flag-5'>一</b>測(cè)

    歐度MEDI-SNAP一次性醫(yī)用插頭發(fā)布

    歐度MEDI-SNAP一次性醫(yī)用插頭產(chǎn)品組加入新成員啦!為滿足一次性內(nèi)窺鏡、一次性手術(shù)消融刀等設(shè)備中的耗材需求,歐度將ODU MEDI-SNAP一次性醫(yī)用插頭的鎖定方式擴(kuò)展為插拔自鎖和
    的頭像 發(fā)表于 02-21 16:00 ?729次閱讀

    ER34615 14.4V 57000mAh 一次性鋰亞硫酰氯鋰離子電池 物聯(lián)網(wǎng)用

    ,不妨考慮 ER34615 14.4V 57000mAh 一次性鋰亞硫酰氯鋰離子電池,它可能會(huì)成為你項(xiàng)目成功的關(guān)鍵助力。
    的頭像 發(fā)表于 02-13 15:46 ?639次閱讀
    ER34615 14.4V 57000mAh <b class='flag-5'>一次性</b>鋰亞硫酰氯鋰離子電池 物聯(lián)網(wǎng)用

    Nordic推出nPM2100 PMIC,延長(zhǎng)一次性電池工作時(shí)間

    和多種節(jié)能功能,有效管理能源資源,從而顯著延長(zhǎng)了一次性原電池(非充電電池)在各類應(yīng)用中的工作時(shí)間。 nPM2100 PMIC專為那些依賴一次性電池供電的設(shè)備而設(shè)計(jì),如無線鼠標(biāo)和鍵盤、消費(fèi)資產(chǎn)跟蹤器、遙控器以及隨身醫(yī)療設(shè)備等。這些設(shè)備通常要求長(zhǎng)時(shí)間運(yùn)行,而電池更換卻可能帶來
    的頭像 發(fā)表于 02-12 14:15 ?666次閱讀

    Nordic發(fā)布nPM2100 PMIC,延長(zhǎng)一次性電池工作時(shí)間

    效的升壓穩(wěn)壓器和系列節(jié)能功能,實(shí)現(xiàn)了對(duì)能源資源的精細(xì)管理,從而顯著延長(zhǎng)了一次性(非充電)電池在各類應(yīng)用中的使用時(shí)間。 nPM2100 PMIC的推出,無疑為無線鼠標(biāo)、鍵盤、消費(fèi)資產(chǎn)跟蹤設(shè)備、遙控器以及隨身醫(yī)療設(shè)備等提供了更為持久的電力支持。這些設(shè)備在日常使用中頻繁依賴于
    的頭像 發(fā)表于 01-24 15:47 ?826次閱讀

    長(zhǎng)光辰芯發(fā)布首款一次性醫(yī)療內(nèi)窺鏡CMOS圖像傳感器

    近期,長(zhǎng)光辰芯在醫(yī)療影像領(lǐng)域邁出了重要步,正式發(fā)布了其最新研發(fā)的面向一次性醫(yī)療內(nèi)窺鏡的CMOS圖像傳感器及其光學(xué)模組——GXS1508/GXSM1508。 這款創(chuàng)新產(chǎn)品的推出,不僅標(biāo)志著長(zhǎng)光辰芯在
    的頭像 發(fā)表于 01-23 14:16 ?1005次閱讀

    一次性鋰電池為什么不能充電?文講清!

    一次性鋰電池不能充電,是由它的正負(fù)極材料、電解液等決定的。雖然它不能充電,但在某些場(chǎng)景下,還是有著不可替代的作用。希望通過這篇文章,能讓大家對(duì)一次性鋰電池有更深入的了解,以后在生活中使用的時(shí)候,也能更安全、更環(huán)保。
    的頭像 發(fā)表于 01-23 14:11 ?2031次閱讀
    <b class='flag-5'>一次性</b>鋰電池為什么不能充電?<b class='flag-5'>一</b>文講清!

    一次性鋰電池為何不能充電?文帶你了解

    一次性鋰電池由于其電極材料、電解質(zhì)特性以及結(jié)構(gòu)設(shè)計(jì)等方面的原因,決定了它不能像可充電鋰電池那樣進(jìn)行充電。我們?cè)谑褂秒姵貢r(shí),定要嚴(yán)格按照電池的類型和使用說明來操作,避免因不當(dāng)使用帶來的安全隱患。如果大家還有關(guān)于電池的其他問題,歡迎在評(píng)論區(qū)留言討論。
    的頭像 發(fā)表于 01-20 14:27 ?1983次閱讀
    <b class='flag-5'>一次性</b>鋰電池為何不能充電?<b class='flag-5'>一</b>文帶你了解

    ADS1256第一次上電的時(shí)候,采集的ADC信號(hào)是實(shí)際值的半,為什么?

    會(huì)幾個(gè)小時(shí)復(fù)現(xiàn)一次,有時(shí)候會(huì)幾天復(fù)現(xiàn)一次,真的明白哪里出問題,希望各位大神幫忙解決下。具體會(huì)在哪些地方出問題。
    發(fā)表于 12-13 15:33

    智芯傳感ZXP4系列一次性血壓傳感器介紹

    智芯傳感ZXP4系列一次性血壓傳感器,主要供醫(yī)療單位對(duì)患者進(jìn)行動(dòng)脈壓、中心靜脈壓、肺動(dòng)脈壓、左冠狀動(dòng)脈壓等多種血壓監(jiān)測(cè),屬于有創(chuàng)血壓監(jiān)測(cè)。
    的頭像 發(fā)表于 12-04 13:52 ?3616次閱讀
    智芯傳感ZXP4系列<b class='flag-5'>一次性</b>血壓傳感器介紹

    【AI技術(shù)支持】USB_CDC電腦串口一次性發(fā)送100000byte丟包問題處理

    啟明云端/01你是否曾遇到過?在使用ESP32-S3,ESP-IDF版本為idf5.2時(shí),蒸汽鍋產(chǎn)品基于例程tusb_serial_device測(cè)試USBCDC自發(fā)自收,電腦CDC串口一次性發(fā)送
    的頭像 發(fā)表于 11-07 08:01 ?1235次閱讀
    【AI技術(shù)支持】USB_CDC電腦串口<b class='flag-5'>一次性</b>發(fā)送100000byte丟包問題處理