国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

高效處理流數(shù)據(jù)的利器:環(huán)形緩沖區(qū)(Ring Buffer)實(shí)現(xiàn)詳解

0
分享至

前面兩篇文章,我們聊了事件驅(qū)動(dòng)架構(gòu)最基礎(chǔ)的兩種實(shí)現(xiàn)—— 回調(diào)函數(shù) 和 信號(hào)槽 ,在簡(jiǎn)單控制事件上傳遞很有優(yōu)勢(shì),但是對(duì)于流數(shù)據(jù)的處理:回調(diào)和信號(hào)槽都是同步阻塞,嵌套深了容易卡死系統(tǒng),而且沒緩存,高頻場(chǎng)景下必丟事件。

今天這一篇,我們聊一聊事件驅(qū)動(dòng)架構(gòu)的“核心基石”—— 環(huán)形緩沖 。


很多工程師覺得環(huán)形緩沖就是個(gè)“簡(jiǎn)單的隊(duì)列”,沒必要花時(shí)間深究。但在我看來(lái),它是嵌入式事件驅(qū)動(dòng)中“最被低估的組件”——它的核心價(jià)值,恰恰是解決 回調(diào)信號(hào)槽 的缺陷: 讓“事件產(chǎn)生”和“事件處理”徹底異步解耦,實(shí)現(xiàn)事件緩存,從根源上杜絕丟數(shù)據(jù)、防阻塞 。

1. 什么是環(huán)形緩沖?

首先得弄明白它的核心原理—— 本質(zhì)上它就是基于FIFO(先進(jìn)先出)的環(huán)形隊(duì)列,靠?jī)蓚€(gè)關(guān)鍵指針(讀指針和寫指針),實(shí)現(xiàn)事件/數(shù)據(jù)的循環(huán)存儲(chǔ)與讀取 ??此坪?jiǎn)單,卻精準(zhǔn)擊中兩個(gè)核心痛點(diǎn):

解決“事件觸發(fā)頻率高于處理速度”的丟數(shù)據(jù)問題 ——事件來(lái)了不著急處理,先存進(jìn)緩沖,等主循環(huán)/任務(wù)有空了再讀,相當(dāng)于給事件加了個(gè)“臨時(shí)倉(cāng)庫(kù)”;

徹底擺脫同步阻塞 ——通過是生產(chǎn)者-消費(fèi)者模式,事件發(fā)生器(中斷、外設(shè)、傳感器)是“生產(chǎn)者”,只做一件事:往環(huán)形緩沖里寫事件,不碰任何業(yè)務(wù)邏輯(避免像回調(diào)那樣阻塞);事件處理器(主循環(huán)、RTOS任務(wù))是“消費(fèi)者”,只做一件事:從緩沖里讀事件、處理事件,異步執(zhí)行,不用等生產(chǎn)者。這就完美解決了回調(diào)的同步阻塞問題。

它不像回調(diào)那樣“急功近利”(觸發(fā)了就必須立刻執(zhí)行),也不像信號(hào)槽那樣“束手無(wú)策”(沒地方存事件,處理不過來(lái)就丟),而是“張弛有度”——用緩沖做過渡,實(shí)現(xiàn)異步解耦,這才是嵌入式高可靠系統(tǒng)的核心邏輯。

2. 怎么實(shí)現(xiàn)環(huán)形緩沖?

首先我們先定義一個(gè)結(jié)構(gòu)體:

buf: 存儲(chǔ)緩沖數(shù)據(jù)的指針;

read_ptr: 讀指針,指向下一個(gè)待讀取的位置;

write_ptr: 寫指針,指向下一個(gè)待寫入的位置;

buf_size: 緩沖大小

// 環(huán)形緩沖最大緩存字節(jié)數(shù)(根據(jù)項(xiàng)目調(diào)整,建議2的冪次,優(yōu)化運(yùn)算)#define EVENT_BUF_SIZE 32 // 定義環(huán)形緩沖核心結(jié)構(gòu)體typedefstruct{uint8_t *buf; // 普通uint8_t指針,用于基礎(chǔ)數(shù)據(jù)緩存,暫不關(guān)聯(lián)事件uint8_t read_ptr; // 讀指針(消費(fèi)者用)uint8_t write_ptr; // 寫指針(生產(chǎn)者用)uint8_t buf_size; // 緩沖大小,與EVENT_BUF_SIZE對(duì)應(yīng),便于參數(shù)化管理}RingBuffer_TypeDef;

先初始化, 綁定緩沖大小

// 初始化環(huán)形緩沖(系統(tǒng)啟動(dòng)時(shí)調(diào)用,傳入環(huán)形緩沖指針、緩存地址和大小,支持多緩沖分別初始化)voidRingBuffer_Init(RingBuffer_TypeDef *rb, uint8_t *buf, uint8_t buf_size){if (rb ==  || buf ==  || buf_size == 0) return; // 參數(shù)校驗(yàn),避免空指針和無(wú)效大小 rb->buf = buf; // 綁定uint8_t指針緩存地址 rb->buf_size = buf_size;// 綁定緩沖大小 rb->read_ptr = 0; rb->write_ptr = 0;memset(rb->buf, 0, buf_size); // 初始化緩存內(nèi)容}

判空&判滿:

// 判斷環(huán)形緩沖是否為空(消費(fèi)者判斷依據(jù),傳入緩沖指針)uint8_tRingBuffer_IsEmpty(RingBuffer_TypeDef *rb){if (rb == ) return1; // 空指針默認(rèn)返回空(容錯(cuò)處理)return (rb->read_ptr == rb->write_ptr);}// 判斷環(huán)形緩沖是否滿(生產(chǎn)者判斷依據(jù),避免溢出,傳入緩沖指針)uint8_tRingBuffer_IsFull(RingBuffer_TypeDef *rb){if (rb == ) return1; // 空指針默認(rèn)返回滿(容錯(cuò)處理)// 犧牲1個(gè)字節(jié),避免空滿判斷混淆(嵌入式最優(yōu)權(quán)衡,親測(cè)可靠)return ((rb->write_ptr + 1) % rb->buf_size == rb->read_ptr);}

生產(chǎn)者寫, 寫入緩沖后寫指針往后移動(dòng) :

// 寫入字節(jié)到環(huán)形緩沖(中斷/生產(chǎn)者調(diào)用,無(wú)阻塞,傳入緩沖指針和要寫入的字節(jié))uint8_tRingBuffer_WriteByte(RingBuffer_TypeDef *rb, uint8_t data){if (rb ==  || rb->buf == ) return0; // 空指針校驗(yàn),避免異常if(RingBuffer_IsFull(rb)) return0; // 隊(duì)列滿,返回失?。杉尤罩居涗?,便于定位問題) rb->buf[rb->write_ptr] = data; rb->write_ptr = (rb->write_ptr + 1) % rb->buf_size;return1;}

消費(fèi)者讀, 讀出數(shù)據(jù)后,讀指針往后移動(dòng) :

// 從環(huán)形緩沖讀取字節(jié)(主循環(huán)/消費(fèi)者調(diào)用,傳入緩沖指針和接收數(shù)據(jù)的指針)uint8_tRingBuffer_ReadByte(RingBuffer_TypeDef *rb, uint8_t *data){if (rb ==  || rb->buf ==  || data == ) return0; // 多參數(shù)校驗(yàn)if(RingBuffer_IsEmpty(rb)) return0; // 隊(duì)列空,返回失敗 *data = rb->buf[rb->read_ptr]; rb->read_ptr = (rb->read_ptr + 1) % rb->buf_size;return1;}

代碼可以直接復(fù)制用,但有幾個(gè)關(guān)鍵避坑點(diǎn)必須強(qiáng)調(diào),都是我踩過的經(jīng)驗(yàn)教訓(xùn),大家直接避開就能少踩坑:

① 緩沖大小建議設(shè)為2的冪次,比如32、64、128,這樣可以用位與運(yùn)算(&)替代模運(yùn)算(%), MCU執(zhí)行效率能提升不少 ;

② 空滿判斷,優(yōu)先用“犧牲1個(gè)字節(jié)”的方式, 邏輯簡(jiǎn)單且可靠 ,避免出現(xiàn)空滿誤判,導(dǎo)致數(shù)據(jù)丟失或溢出;

③ 中斷中只能調(diào)用寫入接口(RingBuffer_WriteByte),讀取接口(RingBuffer_ReadByte)必須放在主循環(huán)/任務(wù)中, 絕對(duì)不能在中斷中讀取、處理數(shù)據(jù) ,否則會(huì)導(dǎo)致中斷阻塞,系統(tǒng)卡死;

④ 初始化時(shí)必須傳入有效的uint8_t緩存地址和大小,避免空指針異常,建議用全局?jǐn)?shù)組作為緩存載體(如下示例):

// 示例:定義全局緩存數(shù)組,初始化環(huán)形緩沖時(shí)傳入(適配uint8_t指針)uint8_t uart_rx_buf[EVENT_BUF_SIZE]; // 串口接收緩存數(shù)組RingBuffer_TypeDef uart_ring_buf; // 串口對(duì)應(yīng)的環(huán)形緩沖// 初始化調(diào)用(主函數(shù)中)RingBuffer_Init(&uart_ring_buf, uart_rx_buf, EVENT_BUF_SIZE);

看到這里,相信大家對(duì)環(huán)形緩沖區(qū)有了一定的了解,那么我再深入以下問幾個(gè)問題:

1.環(huán)形緩沖區(qū)里面的buf只能是uint8指針嗎?

答案當(dāng)然不是,這個(gè)buf指的是一塊一塊內(nèi)存,那塊內(nèi)存可以只含一個(gè)字節(jié),也可以含多個(gè)字節(jié),比如一個(gè)事件的結(jié)構(gòu)體,比如這樣:

// 事件結(jié)構(gòu)體:標(biāo)準(zhǔn)化格式,適配所有事件類型typedefstruct{uint8_t event_id; // 事件ID(區(qū)分串口接收、ADC采樣等)void *event_param; // 事件參數(shù)(可傳數(shù)據(jù)指針,需保證內(nèi)存生命周期)void (*callback)(void*); // 回調(diào)函數(shù)}Event_TypeDef;
//帶事件的環(huán)形緩沖核心結(jié)構(gòu)體typedefstruct{ Event_TypeDef buf[EVENT_BUF_SIZE];uint8_t read_ptr; // 讀指針(消費(fèi)者用)uint8_t write_ptr; // 寫指針(生產(chǎn)者用)uint8_t buf_size; // 緩沖大小,與EVENT_BUF_SIZE對(duì)應(yīng),便于參數(shù)化管理}RingBuffer_TypeDef;

我們可以按需改變這個(gè)部分。

2.因?yàn)榫彌_區(qū)成頭尾相連的環(huán)形,寫操作可能會(huì)覆蓋未及時(shí)讀取的數(shù)據(jù),有的場(chǎng)景允許這種情況發(fā)生,有的場(chǎng)景又嚴(yán)格限制這種情況發(fā)生。實(shí)際該怎么選擇呢?

這兩種策略該如何選擇要結(jié)合具體的應(yīng)用場(chǎng)景。如音/視頻流中,丟掉一些數(shù)據(jù)不要緊,可以選擇覆蓋未及時(shí)讀取的數(shù)據(jù);在任務(wù)間通信的時(shí)候,要嚴(yán)格保證數(shù)據(jù)正確傳輸,這個(gè)時(shí)候就不能覆蓋了,需要拋出異常。

3. 如果遇到多任務(wù)讀取同一個(gè)緩沖區(qū)需要怎么處理呢?

上面的方案只適用于 單生產(chǎn)者 - 單消費(fèi)者 ,如果遇到多個(gè)中斷寫同一個(gè)緩沖、多個(gè)任務(wù)讀同一個(gè)緩沖的場(chǎng)景,就需要做線程安全處理,我們可以在緩沖區(qū)結(jié)構(gòu)體里新增一個(gè)鎖的成員,讀和寫的過程中都需要加鎖和解鎖。

3. 實(shí)戰(zhàn)代碼對(duì)比

我們?cè)倥e一個(gè)和之前回調(diào)結(jié)合的例子:

案例需求:STM32F407串口接收高頻數(shù)據(jù)(每秒1000+字節(jié)),避免回調(diào)阻塞,實(shí)現(xiàn)異步安全處理,同時(shí)兼容回調(diào)函數(shù)的快速響應(yīng)特性。

核心思路:用環(huán)形緩沖做“中間載體”,串口中斷(生產(chǎn)者)只寫數(shù)據(jù)到緩沖(不阻塞),主循環(huán)(消費(fèi)者)讀取緩沖數(shù)據(jù),再通過回調(diào)函數(shù)處理業(yè)務(wù)邏輯;同時(shí)對(duì)比信號(hào)槽的實(shí)現(xiàn)缺陷,凸顯環(huán)形緩沖的優(yōu)勢(shì)。

#include#include#include"stm32f4xx_hal.h"// 1. 事件結(jié)構(gòu)體(統(tǒng)一回調(diào)、信號(hào)槽、環(huán)形緩沖的事件格式)typedefstruct{uint8_t event_id; // 事件ID:0=串口接收事件void *event_param; // 事件參數(shù)(傳遞串口接收數(shù)據(jù))void (*callback)(void*); // 回調(diào)函數(shù)(復(fù)用回調(diào)特性,處理業(yè)務(wù)邏輯)}Event_TypeDef;// 2. 環(huán)形緩沖核心結(jié)構(gòu)體(復(fù)用上文基礎(chǔ),適配事件+回調(diào))#define EVENT_BUF_SIZE 32 typedefstruct{ Event_TypeDef buf[EVENT_BUF_SIZE];uint8_t read_ptr; // 讀指針(消費(fèi)者:主循環(huán))uint8_t write_ptr; // 寫指針(生產(chǎn)者:串口中斷)}RingBuffer_TypeDef;static RingBuffer_TypeDef Event_RingBuf; // 全局事件緩沖
// 3. 信號(hào)槽模擬實(shí)現(xiàn)(用于對(duì)比,凸顯環(huán)形緩沖優(yōu)勢(shì))typedefstruct{void (*slot)(void*); // 信號(hào)槽函數(shù)}SignalSlot_TypeDef;static SignalSlot_TypeDef Uart_Slot = {};// 信號(hào)槽注冊(cè)(模擬前文信號(hào)槽用法,無(wú)緩存)voidSignalSlot_Register(SignalSlot_TypeDef *slot, void (*func)(void*)){if(slot != ) slot->slot = func;}// 信號(hào)發(fā)送(無(wú)緩存,高頻場(chǎng)景易丟數(shù))voidSignal_Send(SignalSlot_TypeDef *slot, void *param){if(slot != && slot->slot != ){ slot->slot(param); // 同步執(zhí)行,類似回調(diào)阻塞風(fēng)險(xiǎn) }}
// 4. 環(huán)形緩沖基礎(chǔ)接口(初始化、讀寫、空滿判斷)voidRingBuffer_Init(void){ Event_RingBuf.read_ptr = 0; Event_RingBuf.write_ptr = 0;memset(Event_RingBuf.buf, 0, sizeof(Event_RingBuf.buf));}uint8_tRingBuffer_IsEmpty(void){return (Event_RingBuf.read_ptr == Event_RingBuf.write_ptr);}uint8_tRingBuffer_IsFull(void){return ((Event_RingBuf.write_ptr + 1) % EVENT_BUF_SIZE == Event_RingBuf.read_ptr);}// 寫入事件(中斷中調(diào)用,無(wú)阻塞,兼容回調(diào)函數(shù))uint8_tRingBuffer_WriteEvent(Event_TypeDef event){if(RingBuffer_IsFull) return0; // 隊(duì)列滿,避免溢出(信號(hào)槽無(wú)此機(jī)制) Event_RingBuf.buf[Event_RingBuf.write_ptr] = event; Event_RingBuf.write_ptr = (Event_RingBuf.write_ptr + 1) % EVENT_BUF_SIZE;return1;}// 讀取事件(主循環(huán)調(diào)用,異步執(zhí)行回調(diào))uint8_tRingBuffer_ReadEvent(Event_TypeDef *event){if(RingBuffer_IsEmpty) return0; *event = Event_RingBuf.buf[Event_RingBuf.read_ptr]; Event_RingBuf.read_ptr = (Event_RingBuf.read_ptr + 1) % EVENT_BUF_SIZE;return1;}// 5. 業(yè)務(wù)處理回調(diào)函數(shù)(復(fù)用回調(diào)特性,無(wú)阻塞)voidUart_Data_Process(void *param){uint8_t data = *(uint8_t*)param;// 模擬業(yè)務(wù)邏輯:協(xié)議解析、數(shù)據(jù)上報(bào)(耗時(shí)操作,若直接在中斷回調(diào)會(huì)阻塞)HAL_UART_Transmit(&huart1, &data, 1, 100); // 回顯數(shù)據(jù)}// 6. 串口中斷回調(diào)(生產(chǎn)者:只寫緩沖,不處理業(yè)務(wù),避免阻塞)voidHAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){if (huart->Instance == USART1){staticuint8_t rx_data; rx_data = huart->Instance->DR; // 讀取接收數(shù)據(jù)
// 方案1:環(huán)形緩沖+回調(diào)(推薦,無(wú)阻塞、不丟數(shù)) Event_TypeDef event; event.event_id = 0; event.event_param = ?_data; event.callback = Uart_Data_Process; // 綁定回調(diào)函數(shù)RingBuffer_WriteEvent(event); // 寫入緩沖,無(wú)阻塞返回
// 方案2:直接用信號(hào)槽(對(duì)比用,高頻場(chǎng)景易丟數(shù)、可能阻塞)// Signal_Send(&Uart_Slot, ?_data); // 同步執(zhí)行,若處理耗時(shí)則阻塞中斷
HAL_UART_Receive_IT(&huart1, ?_data, 1); // 重新使能中斷 }}// 7. 主循環(huán)(消費(fèi)者:異步讀取事件,執(zhí)行回調(diào))intmain(void){HAL_Init;SystemClock_Config;MX_USART1_UART_Init;RingBuffer_Init; // 初始化環(huán)形緩沖SignalSlot_Register(&Uart_Slot, Uart_Data_Process); // 注冊(cè)信號(hào)槽(對(duì)比用)
HAL_UART_Receive_IT(&huart1, (uint8_t*)?_data, 1); // 使能串口中斷
while (1){ Event_TypeDef event;// 異步讀取事件,執(zhí)行回調(diào)(無(wú)事件則低功耗,不阻塞)if(RingBuffer_ReadEvent(&event) == 1){if(event.callback != ){ event.callback(event.event_param); // 執(zhí)行回調(diào),處理業(yè)務(wù) } } else {HAL_Delay(1); // 低功耗,避免空輪詢 } }}
4. 適用場(chǎng)景與避坑

環(huán)形緩沖到底該用在什么地方?什么時(shí)候不用?結(jié)合我十年的項(xiàng)目經(jīng)驗(yàn),整理了清晰的適用場(chǎng)景和避坑點(diǎn),幫大家少走彎路:

? 串口、USB、以太網(wǎng)、BLE 高頻數(shù)據(jù)接收(回調(diào)易阻塞,信號(hào)槽易丟數(shù),環(huán)形緩沖剛好解決);

? ADC、麥克風(fēng)、加速度傳感器高頻采樣(采樣中斷不能阻塞,必須用緩沖緩存數(shù)據(jù));

? 中斷產(chǎn)生數(shù)據(jù)、主循環(huán)異步處理(徹底解耦,提升系統(tǒng)穩(wěn)定性,減少調(diào)試成本);

? 所有異步通信場(chǎng)景(工業(yè)級(jí)項(xiàng)目的標(biāo)配,沒有之一)。

同樣,也有不適合的場(chǎng)景,別浪費(fèi)內(nèi)存,避免畫蛇添足:

? 簡(jiǎn)單控制類事件(比如LED點(diǎn)亮、按鍵響應(yīng)):無(wú)需緩存,直接響應(yīng)即可,用環(huán)形緩沖純屬多余;

? 無(wú)高頻交互、無(wú)需緩存的極簡(jiǎn)裸機(jī)系統(tǒng)(比如簡(jiǎn)單的GPIO電平切換,邏輯單一,沒必要多此一舉)。

5. 寫在后面

今天這一期,我們從原理、方法、適用場(chǎng)景,再到實(shí)戰(zhàn)代碼和避坑技巧,把環(huán)形緩沖徹底講透了,你會(huì)發(fā)現(xiàn)只要涉及到異步通信的都會(huì)有它的影子。最后我再給大家分享幾個(gè)開源的緩沖區(qū)代碼,大家有興趣的可以看看:

RT-Thread 的ringbuffer.c和ringbuffer.h文件中,

Linux 內(nèi)核文件kfifo.h和kfifo.c中也有環(huán)形緩沖區(qū)的代碼實(shí)現(xiàn);

LwRB(Lightweight Ring Buffer)是一款專為嵌入式系統(tǒng)設(shè)計(jì)的 無(wú)鎖、單寫單讀安全 的環(huán)形緩沖區(qū)庫(kù),采用 C11 實(shí)現(xiàn),零動(dòng)態(tài)內(nèi)存依賴,適合串口收發(fā)、DMA 數(shù)據(jù)搬運(yùn)、傳感器數(shù)據(jù)緩存等場(chǎng)景。Github地址: https://github.com/MaJerle/lwrb.

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
少年低成本Cos弗利薩大王,結(jié)果乳膠漆洗不掉,悲劇了

少年低成本Cos弗利薩大王,結(jié)果乳膠漆洗不掉,悲劇了

英國(guó)那些事兒
2026-04-19 23:07:52
特朗普幫了中國(guó)大忙,中國(guó)首次成為全球第一,日本完全被踩在腳下

特朗普幫了中國(guó)大忙,中國(guó)首次成為全球第一,日本完全被踩在腳下

小小科普員
2026-03-26 00:27:10
復(fù)雜的黎巴嫩,走投無(wú)路的真主黨

復(fù)雜的黎巴嫩,走投無(wú)路的真主黨

寰宇大觀察
2026-04-17 17:36:11
伊朗確認(rèn)將參加2026年美加墨世界杯

伊朗確認(rèn)將參加2026年美加墨世界杯

界面新聞
2026-04-19 22:44:47
特朗普:如果到周三未達(dá)成結(jié)束戰(zhàn)爭(zhēng)的長(zhǎng)期協(xié)議,可能會(huì)終止與伊朗的?;?,但封鎖將繼續(xù),伊朗不會(huì)擁有核武器

特朗普:如果到周三未達(dá)成結(jié)束戰(zhàn)爭(zhēng)的長(zhǎng)期協(xié)議,可能會(huì)終止與伊朗的?;?,但封鎖將繼續(xù),伊朗不會(huì)擁有核武器

魯中晨報(bào)
2026-04-18 12:05:07
藍(lán)色起源“新格倫”可重復(fù)使用火箭助推器實(shí)現(xiàn)首次復(fù)用回收成功

藍(lán)色起源“新格倫”可重復(fù)使用火箭助推器實(shí)現(xiàn)首次復(fù)用回收成功

不看車bukanche
2026-04-19 19:49:50
賀嬌龍賬號(hào)時(shí)隔100天更新,官方開通新賬號(hào)進(jìn)行遷移,“90后”清華畢業(yè)生成為“推薦官”

賀嬌龍賬號(hào)時(shí)隔100天更新,官方開通新賬號(hào)進(jìn)行遷移,“90后”清華畢業(yè)生成為“推薦官”

極目新聞
2026-04-19 18:11:43
尹正自曝把摩托車全賣了:“車牌漲價(jià)了,賺翻了,我愛摩托車”

尹正自曝把摩托車全賣了:“車牌漲價(jià)了,賺翻了,我愛摩托車”

悅君兮君不知
2026-04-18 22:21:30
石油枯竭竟是假象?顛覆認(rèn)知,石油根本不是遠(yuǎn)古動(dòng)植物演化而來(lái)

石油枯竭竟是假象?顛覆認(rèn)知,石油根本不是遠(yuǎn)古動(dòng)植物演化而來(lái)

丁丁鯉史紀(jì)
2026-04-13 16:00:40
鎖定降級(jí)!海牛剛看到一絲希望,就收到國(guó)際足聯(lián)處罰,保級(jí)懸了

鎖定降級(jí)!海牛剛看到一絲希望,就收到國(guó)際足聯(lián)處罰,保級(jí)懸了

體壇風(fēng)之子
2026-04-19 17:43:12
4月19日晚間,多家上市公司發(fā)布重大利好利空好消息

4月19日晚間,多家上市公司發(fā)布重大利好利空好消息

A股數(shù)據(jù)表
2026-04-19 17:38:48
大爆發(fā)!上海,再迎交通利好!

大爆發(fā)!上海,再迎交通利好!

新浪財(cái)經(jīng)
2026-04-19 19:10:24
率領(lǐng)考文垂升入英超,蘭帕德當(dāng)選英冠賽季最佳主帥

率領(lǐng)考文垂升入英超,蘭帕德當(dāng)選英冠賽季最佳主帥

懂球帝
2026-04-20 05:21:05
中年抑郁的人,多半有這9個(gè)跡象,看似正常卻危險(xiǎn)

中年抑郁的人,多半有這9個(gè)跡象,看似正常卻危險(xiǎn)

十點(diǎn)讀書
2026-04-19 18:37:02
五一假期火車票開售以來(lái),鐵路12306拒絕出票105.6萬(wàn)張

五一假期火車票開售以來(lái),鐵路12306拒絕出票105.6萬(wàn)張

新京報(bào)
2026-04-19 15:04:19
讀衛(wèi)校時(shí)去同學(xué)家玩,對(duì)他姐姐一見鐘情,3年后我成了同學(xué)的姐夫

讀衛(wèi)校時(shí)去同學(xué)家玩,對(duì)他姐姐一見鐘情,3年后我成了同學(xué)的姐夫

農(nóng)村情感故事
2025-04-12 08:00:16
帶兒子看急診,護(hù)士竟是前妻,她頭都沒抬:孩子?jì)寷]來(lái)??jī)鹤樱何覌尣辉诹?,護(hù)士阿姨能做我新媽嗎?

帶兒子看急診,護(hù)士竟是前妻,她頭都沒抬:孩子?jì)寷]來(lái)??jī)鹤樱何覌尣辉诹?,護(hù)士阿姨能做我新媽嗎?

品讀時(shí)刻
2026-04-11 09:12:01
悲喜夜:拜仁4-2奪冠,阿森納1-2,41歲C羅飆第969球,利物浦2-1

悲喜夜:拜仁4-2奪冠,阿森納1-2,41歲C羅飆第969球,利物浦2-1

側(cè)身凌空斬
2026-04-20 02:04:31
連魯迅都想不到,當(dāng)代網(wǎng)友為了省錢開始說文言文了。。

連魯迅都想不到,當(dāng)代網(wǎng)友為了省錢開始說文言文了。。

差評(píng)XPIN
2026-04-20 00:14:24
阿爾特塔:英超幾乎重新開始了,爭(zhēng)冠仍在繼續(xù)

阿爾特塔:英超幾乎重新開始了,爭(zhēng)冠仍在繼續(xù)

懂球帝
2026-04-20 03:12:07
2026-04-20 07:03:00
我不叫阿哏
我不叫阿哏
分享有趣、有用的故事!
333文章數(shù) 6678關(guān)注度
往期回顧 全部

科技要聞

50分26秒破人類紀(jì)錄!300臺(tái)機(jī)器人狂飆半馬

頭條要聞

半年下沉22厘米 女子家中坐擁價(jià)值上億別墅卻沒法住人

頭條要聞

半年下沉22厘米 女子家中坐擁價(jià)值上億別墅卻沒法住人

體育要聞

湖人1比0火箭:老詹比烏度卡像教練

娛樂要聞

何潤(rùn)東漲粉百萬(wàn)!內(nèi)娛隔空掀桌第一人

財(cái)經(jīng)要聞

華誼兄弟,8年虧光85億

汽車要聞

29分鐘大定破萬(wàn) 極氪8X為什么這么多人買?

態(tài)度原創(chuàng)

健康
房產(chǎn)
數(shù)碼
游戲
家居

干細(xì)胞抗衰4大誤區(qū),90%的人都中招

房產(chǎn)要聞

官宣簽約最強(qiáng)城更!??跇鞘校蝗粴⑷肷衩胤科?!

數(shù)碼要聞

華為新機(jī)發(fā)布前瞻:闊折疊X Max+影像旗艦Pura 90,都沒懸念了

"二次元GTA"直播爆了:疑似貼臉嘲諷其他二游!

家居要聞

法式線條 時(shí)光靜淌

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版