一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

引入消息隊(duì)列會(huì)多出哪些問(wèn)題

Linux愛(ài)好者 ? 來(lái)源:蘇三說(shuō)技術(shù) ? 作者:熱愛(ài)所以堅(jiān)持ing ? 2021-09-23 14:53 ? 次閱讀

前言

最近,消息隊(duì)列(Message Queue ,簡(jiǎn)稱 MQ)越來(lái)越火。很多公司在用,很多人在用,其重要性不言而喻。

如果讓你回答下面這些問(wèn)題,你的心中是否有答案了呢?

為什么要用 MQ?

引入 MQ 會(huì)多出哪些問(wèn)題?

如何解決這些問(wèn)題?

本文將會(huì)一一為你解答,這些看似平常卻很有意義的問(wèn)題。

1. 傳統(tǒng)模式有哪些痛點(diǎn)

痛點(diǎn) 1

有些復(fù)雜的業(yè)務(wù)系統(tǒng),一次用戶請(qǐng)求可能會(huì)同步調(diào)用 N 個(gè)系統(tǒng)的接口,需要等待所有的接口都返回才能真正的獲取執(zhí)行結(jié)果。

這種同步接口調(diào)用的方式總耗時(shí)比較長(zhǎng),非常影響用戶體驗(yàn)。特別是在網(wǎng)絡(luò)不穩(wěn)定的情況下,極容易出現(xiàn)接口超時(shí)問(wèn)題。

痛點(diǎn) 2

很多復(fù)雜的業(yè)務(wù)系統(tǒng),一般都會(huì)拆分成多個(gè)子系統(tǒng)。以用戶下單為例,請(qǐng)求會(huì)先通過(guò)訂單系統(tǒng),然后分別調(diào)用支付系統(tǒng)、庫(kù)存系統(tǒng)、積分系統(tǒng)和物流系統(tǒng)。

系統(tǒng)之間耦合性太高,如果調(diào)用的任何一個(gè)子系統(tǒng)出現(xiàn)異常,整個(gè)請(qǐng)求都會(huì)異常。對(duì)系統(tǒng)的穩(wěn)定性非常不利。

痛點(diǎn) 3

為了吸引用戶,有時(shí)候會(huì)搞一些活動(dòng),比如秒殺等。

如果用戶少還好,不會(huì)影響系統(tǒng)的穩(wěn)定性。但如果用戶突增,一時(shí)間所有的請(qǐng)求都到數(shù)據(jù)庫(kù),可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)無(wú)法承受這么大的壓力,響應(yīng)變慢或者直接掛掉。

對(duì)于這種突然出現(xiàn)的請(qǐng)求峰值,無(wú)法保證系統(tǒng)的穩(wěn)定性。

2. 為什么要用 MQ

對(duì)于上面?zhèn)鹘y(tǒng)模式的三類(lèi)問(wèn)題,使用 MQ 就能輕松解決。

2.1 異步

對(duì)于痛點(diǎn) 1 同步接口調(diào)用導(dǎo)致響應(yīng)時(shí)間長(zhǎng)的問(wèn)題。使用 MQ 之后,將同步調(diào)用改成異步調(diào)用,能夠顯著減少系統(tǒng)響應(yīng)時(shí)間。

系統(tǒng) A 作為消息的生產(chǎn)者,在完成本職工作后就能直接返回結(jié)果了。無(wú)需等待消息消費(fèi)者的返回,它們最終會(huì)獨(dú)立完成所有的業(yè)務(wù)功能。

這樣能避免總耗時(shí)比較長(zhǎng),從而影響用戶的體驗(yàn)的問(wèn)題。

2.2 解耦

對(duì)于痛點(diǎn) 2 子系統(tǒng)間耦合性太大的問(wèn)題,使用 MQ 之后,只需要依賴于 MQ。避免了各個(gè)子系統(tǒng)間的強(qiáng)依賴問(wèn)題。

訂單系統(tǒng)作為消息生產(chǎn)者,保證它自己沒(méi)有異常即可,不會(huì)受到支付系統(tǒng)等業(yè)務(wù)子系統(tǒng)的異常影響。并且各個(gè)消費(fèi)者業(yè)務(wù)子系統(tǒng)之間,也互不影響。

這樣就把之前復(fù)雜的業(yè)務(wù)子系統(tǒng)的依賴關(guān)系,轉(zhuǎn)換為只依賴于 MQ 的簡(jiǎn)單依賴,從而顯著的降低了系統(tǒng)間的耦合度。

2.3 削峰

對(duì)于痛點(diǎn) 3,由于突然出現(xiàn)的請(qǐng)求峰值導(dǎo)致系統(tǒng)不穩(wěn)定的問(wèn)題。使用 MQ 后,能夠起到削峰的作用。

訂單系統(tǒng)接收到用戶請(qǐng)求之后,將請(qǐng)求直接發(fā)送到 MQ;

然后,訂單消費(fèi)者從 MQ 中消費(fèi)消息,做寫(xiě)庫(kù)操作;

當(dāng)出現(xiàn)請(qǐng)求峰值的情況,由于消費(fèi)者的消費(fèi)能力有限,會(huì)按照自己的節(jié)奏來(lái)消費(fèi)消息。多余請(qǐng)求不處理,保留在 MQ 的隊(duì)列中,不會(huì)對(duì)系統(tǒng)的穩(wěn)定性造成影響。

3. 引入 MQ 會(huì)多出哪些問(wèn)題

引入 MQ 后讓子系統(tǒng)間耦合性降低了,異步處理機(jī)制減少了系統(tǒng)的響應(yīng)時(shí)間。同時(shí)能夠有效的應(yīng)對(duì)請(qǐng)求峰值問(wèn)題,提升了系統(tǒng)的穩(wěn)定性。

但是,引入 MQ 的同時(shí)也會(huì)帶來(lái)一些問(wèn)題。

3.1 重復(fù)消費(fèi)問(wèn)題

重復(fù)消費(fèi)問(wèn)題可以說(shuō)是 MQ 中普遍存在的問(wèn)題,不管你用哪種 MQ 都無(wú)法避免。

有哪些場(chǎng)景會(huì)出現(xiàn)重復(fù)的消息呢?

消息生產(chǎn)者產(chǎn)生了重復(fù)的消息;

Kafka 和 RocketMQ 的 offset 被回調(diào)了;

消息消費(fèi)者確認(rèn)失敗;

消息消費(fèi)者確認(rèn)時(shí)超時(shí);

業(yè)務(wù)系統(tǒng)主動(dòng)發(fā)起重試。

如果重復(fù)消息不做正確的處理,會(huì)對(duì)業(yè)務(wù)造成很大的影響,產(chǎn)生重復(fù)數(shù)據(jù)或者導(dǎo)致數(shù)據(jù)異常,比如會(huì)員系統(tǒng)多開(kāi)通了一個(gè)月的會(huì)員等。

3.2 數(shù)據(jù)一致性問(wèn)題

很多時(shí)候,如果 MQ 的消費(fèi)者業(yè)務(wù)處理異常,就會(huì)出現(xiàn)數(shù)據(jù)一致性問(wèn)題。

舉個(gè)例子,一個(gè)完整的業(yè)務(wù)流程是,下單成功之后送 100 個(gè)積分。下單寫(xiě)庫(kù)成功了,但是消息消費(fèi)者在送積分的時(shí)候失敗了。這樣就會(huì)造成數(shù)據(jù)不一致的情況,即該業(yè)務(wù)流程的部分?jǐn)?shù)據(jù)寫(xiě)庫(kù)了,另外一部分沒(méi)有寫(xiě)庫(kù)。

如果下單和送積分在同一個(gè)事務(wù)中,要么同時(shí)成功,要么同時(shí)失敗。這樣不會(huì)出現(xiàn)數(shù)據(jù)一致性問(wèn)題的。

但由于跨系統(tǒng)調(diào)用,為了性能考慮一般不會(huì)使用強(qiáng)一致性的方案,而改成達(dá)成最終一致性即可。

3.3 消息丟失問(wèn)題

同樣消息丟失問(wèn)題,也是 MQ 中普遍存在的問(wèn)題,不管你用哪種 MQ 都無(wú)法避免。

有哪些場(chǎng)景會(huì)出現(xiàn)消息丟失問(wèn)題呢?

生產(chǎn)者產(chǎn)生消息時(shí),由于網(wǎng)絡(luò)原因發(fā)送到 MQ 失敗了;

MQ 服務(wù)器持久化,存儲(chǔ)磁盤(pán)時(shí)出現(xiàn)異常;

Kafka 和 RocketMQ 的 offset 被回調(diào)時(shí),略過(guò)了很多消息;

消費(fèi)者剛讀取消息,已經(jīng) ACK 確認(rèn),但業(yè)務(wù)還沒(méi)處理完,服務(wù)就被重啟了。

導(dǎo)致消息丟失問(wèn)題的原因挺多的,生產(chǎn)者、MQ 服務(wù)器、消費(fèi)者都有可能產(chǎn)生問(wèn)題。我在這里就不一一列舉了。

最終的結(jié)果會(huì)導(dǎo)致消費(fèi)者無(wú)法正確的處理消息,而導(dǎo)致數(shù)據(jù)不一致的情況。

3.4 消息順序問(wèn)題

有些業(yè)務(wù)數(shù)據(jù)是有狀態(tài)的,比如訂單有下單、支付、完成、退貨等狀態(tài)。如果訂單數(shù)據(jù)作為消息體,就會(huì)涉及順序問(wèn)題了。

例如消費(fèi)者收到同一個(gè)訂單的兩條消息。第一條消息的狀態(tài)是下單,第二條消息的狀態(tài)是支付,這是沒(méi)問(wèn)題的。

但如果第一條消息的狀態(tài)是支付,第二條消息的狀態(tài)是下單就會(huì)有問(wèn)題了。沒(méi)有下單就先支付了?

消息順序問(wèn)題是一個(gè)非常棘手的問(wèn)題,比如:

Kafka 同一個(gè) partition 中能保證順序,但是不同的 partition 無(wú)法保證順序;

RabbitMQ的同一個(gè) queue 能夠保證順序,但是如果多個(gè)消費(fèi)者同一個(gè) queue 也會(huì)有順序問(wèn)題。

如果消費(fèi)者使用多線程消費(fèi)消息,也無(wú)法保證順序。

如果消費(fèi)消息時(shí)同一個(gè)訂單的多條消息中,中間的一條消息出現(xiàn)異常情況,順序?qū)?huì)被打亂。

還有如果生產(chǎn)者發(fā)送到 MQ 中的路由規(guī)則,跟消費(fèi)者不一樣,也無(wú)法保證順序。

3.5 消息堆積

如果消息消費(fèi)者讀取消息的速度,能夠跟上消息生產(chǎn)者的節(jié)奏,那么整套 MQ 機(jī)制就能發(fā)揮最大作用。

但是很多時(shí)候,由于某些批處理或者其他原因,導(dǎo)致消費(fèi)速度小于生產(chǎn)速度。這樣會(huì)直接導(dǎo)致消息堆積問(wèn)題,從而影響業(yè)務(wù)功能。

這里以下單開(kāi)通會(huì)員為例,如果消息出現(xiàn)堆積會(huì)導(dǎo)致用戶下單之后,很久之后才能變成會(huì)員。這種情況肯定會(huì)引起大量用戶投訴。

3.6 系統(tǒng)復(fù)雜度提升

這里說(shuō)的系統(tǒng)復(fù)雜度和系統(tǒng)耦合性是不一樣的。

假設(shè)以前只有系統(tǒng) A、系統(tǒng) B 和系統(tǒng) C 三個(gè)系統(tǒng),引入 MQ 之后,除了需要關(guān)注前面三個(gè)系統(tǒng)之外,還需要關(guān)注 MQ 服務(wù)。需要關(guān)注的點(diǎn)越多,系統(tǒng)的復(fù)雜度越高。

MQ 的機(jī)制需要生產(chǎn)者、MQ 服務(wù)器、消費(fèi)者。有一定的學(xué)習(xí)成本,需要額外部署 MQ 服務(wù)器。

有些 MQ 功能非常強(qiáng)大、用法有點(diǎn)復(fù)雜,例如 RocketMQ。如果使用不好,會(huì)出現(xiàn)很多問(wèn)題。有些問(wèn)題,不像接口調(diào)用那么容易排查,從而導(dǎo)致系統(tǒng)的復(fù)雜度提升了。

4. 如何解決這些問(wèn)題?

MQ 是一種趨勢(shì),總體來(lái)說(shuō)對(duì)我們的系統(tǒng)是利大于弊的,難道因?yàn)樗鼤?huì)出現(xiàn)一些問(wèn)題,我們就不用它了?那么我們要如何解決這些問(wèn)題呢?

4.1 重復(fù)消息問(wèn)題

不管是由于生產(chǎn)者產(chǎn)生的重復(fù)消息,還是由于消費(fèi)者導(dǎo)致的重復(fù)消息,我們都可以在消費(fèi)者中解決這個(gè)問(wèn)題。

這就要求消費(fèi)者在做業(yè)務(wù)處理時(shí),要做冪等設(shè)計(jì)。如果有不知道如何設(shè)計(jì)的朋友,可以參考“高并發(fā)下如何保證接口的冪等性?”,里面介紹得非常詳細(xì)。

在這里我推薦增加一張消費(fèi)消息表,來(lái)解決 MQ 的這類(lèi)問(wèn)題。

消費(fèi)消息表中,使用 messageId 做唯一索引。在處理業(yè)務(wù)邏輯之前,先根據(jù) messageId 查詢一下該消息有沒(méi)有處理過(guò)。如果已經(jīng)處理過(guò)了則直接返回成功,如果沒(méi)有處理過(guò),則繼續(xù)做業(yè)務(wù)處理。

4.2 數(shù)據(jù)一致性問(wèn)題

我們都知道數(shù)據(jù)一致性分為:

強(qiáng)一致性

弱一致性

最終一致性

而 MQ 為了性能考慮使用的是最終一致性,那么必定會(huì)出現(xiàn)數(shù)據(jù)不一致的問(wèn)題。這類(lèi)問(wèn)題大概率是因?yàn)橄M(fèi)者讀取消息后,業(yè)務(wù)邏輯處理失敗導(dǎo)致的。這時(shí)候可以增加重試機(jī)制。

重試分為同步重試和異步重試。

有些消息量比較小的業(yè)務(wù)場(chǎng)景,可以采用同步重試。在消費(fèi)消息時(shí)如果處理失敗,立刻重試 3-5 次,如果還是失敗則寫(xiě)入到記錄表中。

但如果消息量比較大,則不建議使用這種方式。因?yàn)槿绻霈F(xiàn)網(wǎng)絡(luò)異常,可能會(huì)導(dǎo)致大量的消息不斷重試,影響消息讀取速度造成消息堆積。

消息量比較大的業(yè)務(wù)場(chǎng)景,建議采用異步重試。在消費(fèi)者處理失敗之后,立刻寫(xiě)入重試表,有個(gè) job 專(zhuān)門(mén)定時(shí)重試。

還有一種做法:如果消費(fèi)失敗,自己給同一個(gè) topic 發(fā)一條消息。在后面的某個(gè)時(shí)間點(diǎn),自己又會(huì)消費(fèi)到那條消息,起到了重試的效果。如果對(duì)消息順序要求不高的場(chǎng)景,可以使用這種方式。

4.3 消息丟失問(wèn)題

不管你是否承認(rèn),有時(shí)候消息真的會(huì)丟。即使這種概率非常小,也會(huì)對(duì)業(yè)務(wù)有影響。生產(chǎn)者、MQ 服務(wù)器、消費(fèi)者都有可能會(huì)導(dǎo)致消息丟失的問(wèn)題。為了解決這個(gè)問(wèn)題,我們可以增加一張消息發(fā)送表。

當(dāng)生產(chǎn)者發(fā)完消息之后,會(huì)往該表中寫(xiě)入一條數(shù)據(jù),狀態(tài) status 標(biāo)記為待確認(rèn);

如果消費(fèi)者讀取消息之后,調(diào)用生產(chǎn)者的 API 更新該消息的 status 為已確認(rèn);

有個(gè) job 每隔一段時(shí)間檢查一次消息發(fā)送表,如果5分鐘(這個(gè)時(shí)間可以根據(jù)實(shí)際情況來(lái)定)后還有狀態(tài)是待確認(rèn)的消息,則認(rèn)為該消息已經(jīng)丟失了,重新發(fā)條消息。

這樣不管是由于生產(chǎn)者、MQ 服務(wù)器、還是消費(fèi)者導(dǎo)致的消息丟失問(wèn)題,job 都會(huì)重新發(fā)消息。

4.4 消息順序問(wèn)題

消息順序問(wèn)題是一種常見(jiàn)問(wèn)題。我們以 Kafka 消費(fèi)訂單消息為例,訂單有下單、支付、完成、退貨等狀態(tài)。這些狀態(tài)是有先后順序的,如果順序錯(cuò)了會(huì)導(dǎo)致業(yè)務(wù)異常。

解決這類(lèi)問(wèn)題之前,我們需要先確認(rèn):消費(fèi)者是否真的需要知道中間狀態(tài),只知道最終狀態(tài)行不行?

其實(shí)很多時(shí)候,我真的需要知道的是最終狀態(tài)。這時(shí)可以把流程優(yōu)化一下:

這種方式可以解決大部分的消息順序問(wèn)題。

但如果真的有需要保證消息順序的需求,那么可以將訂單號(hào)路由到不同的 partition。同一個(gè)訂單號(hào)的消息,每次到發(fā)到同一個(gè) partition。

4.5 消息堆積

如果消費(fèi)者消費(fèi)消息的速度小于生產(chǎn)者生產(chǎn)消息的速度,將會(huì)出現(xiàn)消息堆積問(wèn)題。其實(shí)這類(lèi)問(wèn)題產(chǎn)生的原因很多。如果想要進(jìn)一步了解,可以看看“我用kafka兩年踩過(guò)的一些非比尋常的坑”。

那么消息堆積問(wèn)題該如何解決呢?這個(gè)要看消息是否需要保證順序。

如果不需要保證順序,可以讀取消息之后用多線程處理業(yè)務(wù)邏輯。

這樣就能增加業(yè)務(wù)邏輯處理速度,解決消息堆積問(wèn)題。但是線程池的核心線程數(shù)和最大線程數(shù)需要合理配置,不然可能會(huì)浪費(fèi)系統(tǒng)資源。

如果需要保證順序,可以讀取消息之后將消息按照一定的規(guī)則分發(fā)到多個(gè)隊(duì)列中,然后在隊(duì)列中用單線程處理。

責(zé)任編輯:haq

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

    關(guān)注

    12

    文章

    9603

    瀏覽量

    87028
  • 消息
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    12948

原文標(biāo)題:面霸篇:MQ 的 5 大問(wèn)題詳解

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

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

    NVME控制器之隊(duì)列管理模塊

    隊(duì)列管理模塊是整個(gè)NVMe Host控制器的核心模塊,該模塊實(shí)現(xiàn)了提交隊(duì)列與完成隊(duì)列的管理,多隊(duì)列請(qǐng)求的仲裁判決等功能。隊(duì)列管理模塊中含有數(shù)
    發(fā)表于 05-03 20:19

    NVME控制器之隊(duì)列管理模塊

    隊(duì)列管理模塊是整個(gè)NVMe Host控制器的核心模塊,該模塊實(shí)現(xiàn)了提交隊(duì)列與完成隊(duì)列的管理,多隊(duì)列請(qǐng)求的仲裁判決等功能。隊(duì)列管理模塊中含有數(shù)
    的頭像 發(fā)表于 05-03 15:32 ?62次閱讀
    NVME控制器之<b class='flag-5'>隊(duì)列</b>管理模塊

    LTspice里壓敏電阻MOV怎么引入?

    LTspice里壓敏電阻MOV怎么引入
    發(fā)表于 04-28 08:26

    芯片離子注入后退火會(huì)引入的工藝問(wèn)題

    本文簡(jiǎn)單介紹了芯片離子注入后退火會(huì)引入的工藝問(wèn)題:射程末端(EOR)缺陷、硼離子注入退火問(wèn)題和磷離子注入退火問(wèn)題。
    的頭像 發(fā)表于 04-23 10:54 ?190次閱讀
    芯片離子注入后退火<b class='flag-5'>會(huì)</b><b class='flag-5'>引入</b>的工藝問(wèn)題

    STM32F103 TIM1_CH3N輸出的PWM波形為什么會(huì)多出一個(gè)邊沿?

    紅色為T(mén)IM1_CH3N,綠色為T(mén)IM1_CH3,為什么TIM1_CH3N輸出的PWM波形會(huì)多出這一個(gè)邊沿?是由于什么原因?qū)е碌模?/div>
    發(fā)表于 03-13 06:58

    JavaWeb消息隊(duì)列使用指南

    在現(xiàn)代的JavaWeb應(yīng)用中,消息隊(duì)列(Message Queue)是一種常見(jiàn)的技術(shù),用于異步處理任務(wù)、解耦系統(tǒng)組件、提高系統(tǒng)性能和可靠性。 1. 消息隊(duì)列的基本概念 消息隊(duì)列是一種應(yīng)用程序?qū)?yīng)
    的頭像 發(fā)表于 11-25 09:27 ?373次閱讀

    探索字節(jié)隊(duì)列的魔法:多類(lèi)型支持、函數(shù)重載與線程安全

    探索字節(jié)隊(duì)列的魔法:多類(lèi)型支持、函數(shù)重載與線程安全代碼難度指數(shù):文章學(xué)習(xí)重點(diǎn):參數(shù)宏的使用技巧一、引言在嵌入式系統(tǒng)和實(shí)時(shí)應(yīng)用中,數(shù)據(jù)的傳輸和處理是至關(guān)重要的。字節(jié)隊(duì)列(ByteQueue)是一種重要
    的頭像 發(fā)表于 11-15 01:08 ?1102次閱讀
    探索字節(jié)<b class='flag-5'>隊(duì)列</b>的魔法:多類(lèi)型支持、函數(shù)重載與線程安全

    為什么同一個(gè)隊(duì)列引用的全局變量,運(yùn)行在兩個(gè)子vi中發(fā)現(xiàn)隊(duì)列數(shù)據(jù)丟失了

    我創(chuàng)建了一個(gè)隊(duì)列,然后將隊(duì)列引用做了個(gè)全局變量,運(yùn)行在兩個(gè)子vi中,一個(gè)是只入隊(duì)列,另一個(gè)是只出隊(duì)列。但我發(fā)現(xiàn),一個(gè)字vi數(shù)據(jù)入隊(duì)列成功,檢
    發(fā)表于 11-14 11:47

    tlv320aic3016配置好以后然后打開(kāi)中斷允許,沒(méi)有錄音數(shù)據(jù)的輸入,到隊(duì)列fifo的數(shù)是0嗎?

    配置好以后然后打開(kāi)中斷允許如果沒(méi)有錄音數(shù)據(jù)的輸入,那么到隊(duì)列fifo的數(shù)是0嗎,level的值會(huì)變化嗎?
    發(fā)表于 10-28 07:11

    在進(jìn)入OPA847放大器之前加了LC高通濾波,請(qǐng)問(wèn)這樣會(huì)引入過(guò)多噪聲嗎?

    ,發(fā)現(xiàn)如果不濾除直流分量的話,我的互阻增益就很小,所以我在進(jìn)入放大器之前加了LC高通濾波,請(qǐng)問(wèn)這樣會(huì)引入過(guò)多噪聲么?還有別的方法可以消除直流分量嗎?
    發(fā)表于 09-14 07:17

    CS1237與CS1238有效數(shù)據(jù)位為什么會(huì)不同?

    CS1237與CS1238有效數(shù)據(jù)位為什么會(huì)不同? CS1237:20位(5V) CS1238:20.7位(5V) 這兩款A(yù)DC應(yīng)該是一樣的吧,除了1238多出一組多路開(kāi)關(guān),后面的東西應(yīng)該是一樣的吧?為什么有效數(shù)據(jù)位數(shù)會(huì)不同?
    發(fā)表于 09-08 18:55

    嵌入式環(huán)形隊(duì)列與消息隊(duì)列的實(shí)現(xiàn)原理

    嵌入式環(huán)形隊(duì)列,也稱為環(huán)形緩沖區(qū)或循環(huán)隊(duì)列,是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),用于在固定大小的存儲(chǔ)區(qū)域中高效地存儲(chǔ)和訪問(wèn)數(shù)據(jù)。其主要特點(diǎn)包括固定大小的數(shù)組和兩個(gè)指針(頭指針和尾指針),分別指向隊(duì)列的起始位置和結(jié)束位置。
    的頭像 發(fā)表于 09-02 15:29 ?988次閱讀

    示波器探頭在測(cè)試的時(shí)候會(huì)引入什么負(fù)載效應(yīng)

    在進(jìn)行電子測(cè)試時(shí),示波器探頭作為一種重要的測(cè)量工具,其性能對(duì)測(cè)量結(jié)果的準(zhǔn)確性具有重要影響。然而,在使用示波器探頭進(jìn)行測(cè)量時(shí),探頭本身也會(huì)引入一定的負(fù)載效應(yīng),影響測(cè)試結(jié)果。 一、示波器探頭的基本原理
    的頭像 發(fā)表于 08-09 14:30 ?833次閱讀

    玩轉(zhuǎn)RT-Thread之消息隊(duì)列的應(yīng)用

    在嵌入式系統(tǒng)開(kāi)發(fā)中,實(shí)時(shí)處理串口和ADC數(shù)據(jù)是一項(xiàng)重要的任務(wù)。本文將介紹如何在RT-Thread實(shí)時(shí)操作系統(tǒng)中,利用消息隊(duì)列來(lái)同時(shí)處理來(lái)自串口和ADC的數(shù)據(jù)。通過(guò)這種方法,我們能夠高效地管理和處理
    的頭像 發(fā)表于 07-23 08:11 ?800次閱讀
    玩轉(zhuǎn)RT-Thread之消息<b class='flag-5'>隊(duì)列</b>的應(yīng)用

    esp32s3在中斷里面printf會(huì)重啟,怎么才能在中斷里面printf?

    我在定時(shí)中斷里面 想打印信息,發(fā)現(xiàn)printf 會(huì)導(dǎo)致重啟 應(yīng)該是 中斷堆棧 和 任務(wù)堆棧 沖突的問(wèn)題把 我想實(shí)時(shí)獲取 中斷的打印信息,不想通過(guò) 消息隊(duì)列 在任務(wù)級(jí)別打印 應(yīng)該怎么處理
    發(fā)表于 06-12 06:30