色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

聊聊接口優(yōu)化的幾個(gè)方法

馬哥Linux運(yùn)維 ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-01-30 09:37 ? 次閱讀

哪些問題會(huì)引起接口性能問題?

這個(gè)問題的答案非常多,需要根據(jù)自己的業(yè)務(wù)場景具體分析。這里做一個(gè)不完全的總結(jié):

數(shù)據(jù)庫慢查詢

深度分頁問題

未加索引

索引失效

join過多

子查詢過多

in中的值太多

單純的數(shù)據(jù)量過大

業(yè)務(wù)邏輯復(fù)雜

循環(huán)調(diào)用

順序調(diào)用

線程池設(shè)計(jì)不合理

鎖設(shè)計(jì)不合理

機(jī)器問題(fullGC,機(jī)器重啟,線程打滿)

問題解決

1、慢查詢(基于mysql)

1.1 深度分頁

所謂的深度分頁問題,涉及到mysql分頁的原理。通常情況下,mysql的分頁是這樣寫的:

selectname,codefromstudentlimit100,20

含義當(dāng)然就是從student表里查100到120這20條數(shù)據(jù),mysql會(huì)把前120條數(shù)據(jù)都查出來,拋棄前100條,返回20條。當(dāng)分頁所以深度不大的時(shí)候當(dāng)然沒問題,隨著分頁的深入,sql可能會(huì)變成這樣:

selectname,codefromstudentlimit1000000,20

這個(gè)時(shí)候,mysql會(huì)查出來1000020條數(shù)據(jù),拋棄1000000條,如此大的數(shù)據(jù)量,速度一定快不起來。那如何解決呢?一般情況下,最好的方式是增加一個(gè)條件:

selectname,codefromstudentwhereid>1000000limit20

這樣,mysql會(huì)走主鍵索引,直接連接到1000000處,然后查出來20條數(shù)據(jù)。但是這個(gè)方式需要接口的調(diào)用方配合改造,把上次查詢出來的最大id以參數(shù)的方式傳給接口提供方,會(huì)有溝通成本(調(diào)用方:老子不改!)。

1.2 未加索引

這個(gè)是最容易解決的問題,我們可以通過

showcreatetablexxxx(表名)

查看某張表的索引。具體加索引的語句網(wǎng)上太多了,不再贅述。不過順便提一嘴,加索引之前,需要考慮一下這個(gè)索引是不是有必要加,如果加索引的字段區(qū)分度非常低,那即使加了索引也不會(huì)生效。另外,加索引的alter操作,可能引起鎖表,執(zhí)行sql的時(shí)候一定要在低峰期(血淚史!!!!)

1.3 索引失效

這個(gè)是慢查詢最不好分析的情況,雖然mysql提供了explain來評(píng)估某個(gè)sql的查詢性能,其中就有使用的索引。但是為啥索引會(huì)失效呢?mysql卻不會(huì)告訴咱,需要咱自己分析。大體上,可能引起索引失效的原因有這幾個(gè)(可能不完全):

88e72978-9fc3-11ed-bfe3-dac502259ad0.png

需要特別提出的是,關(guān)于字段區(qū)分性很差的情況,在加索引的時(shí)候就應(yīng)該進(jìn)行評(píng)估。如果區(qū)分性很差,這個(gè)索引根本就沒必要加。區(qū)分性很差是什么意思呢,舉幾個(gè)例子,比如:

某個(gè)字段只可能有3個(gè)值,那這個(gè)字段的索引區(qū)分度就很低。

再比如,某個(gè)字段大量為空,只有少量有值;

再比如,某個(gè)字段值非常集中,90%都是1,剩下10%可能是2,3,4....

進(jìn)一步的,那如果不符合上面所有的索引失效的情況,但是mysql還是不使用對應(yīng)的索引,是為啥呢?這個(gè)跟mysql的sql優(yōu)化有關(guān),mysql會(huì)在sql優(yōu)化的時(shí)候自己選擇合適的索引,很可能是mysql自己的選擇算法算出來使用這個(gè)索引不會(huì)提升性能,所以就放棄了。這種情況,可以使用force index 關(guān)鍵字強(qiáng)制使用索引(建議修改前先實(shí)驗(yàn)一下,是不是真的會(huì)提升查詢效率):

selectname,codefromstudentforceindex(XXXXXX)wherename='天才'

其中xxxx是索引名。

1.4 join過多 or 子查詢過多

我把join過多 和子查詢過多放在一起說了。一般來說,不建議使用子查詢,可以把子查詢改成join來優(yōu)化。同時(shí),join關(guān)聯(lián)的表也不宜過多,一般來說2-3張表還是合適的。具體關(guān)聯(lián)幾張表比較安全是需要具體問題具體分析的,如果各個(gè)表的數(shù)據(jù)量都很少,幾百條幾千條,那么關(guān)聯(lián)的表的可以適當(dāng)多一些,反之則需要少一些。

另外需要提到的是,在大多數(shù)情況下join是在內(nèi)存里做的,如果匹配的量比較小,或者join_buffer設(shè)置的比較大,速度也不會(huì)很慢。但是,當(dāng)join的數(shù)據(jù)量比較大的時(shí)候,mysql會(huì)采用在硬盤上創(chuàng)建臨時(shí)表的方式進(jìn)行多張表的關(guān)聯(lián)匹配,這種顯然效率就極低,本來磁盤的IO就不快,還要關(guān)聯(lián)。

一般遇到這種情況的時(shí)候就建議從代碼層面進(jìn)行拆分,在業(yè)務(wù)層先查詢一張表的數(shù)據(jù),然后以關(guān)聯(lián)字段作為條件查詢關(guān)聯(lián)表形成map,然后在業(yè)務(wù)層進(jìn)行數(shù)據(jù)的拼裝。一般來說,索引建立正確的話,會(huì)比join快很多,畢竟內(nèi)存里拼接數(shù)據(jù)要比網(wǎng)絡(luò)傳輸和硬盤IO快得多。

1.5 in的元素過多

這種問題,如果只看代碼的話不太容易排查,最好結(jié)合監(jiān)控和數(shù)據(jù)庫日志一起分析。如果一個(gè)查詢有in,in的條件加了合適的索引,這個(gè)時(shí)候的sql還是比較慢就可以高度懷疑是in的元素過多。一旦排查出來是這個(gè)問題,解決起來也比較容易,不過是把元素分個(gè)組,每組查一次。想再快的話,可以再引入多線程。進(jìn)一步的,如果in的元素量大到一定程度還是快不起來,這種最好還是有個(gè)限制

selectidfromstudentwhereidin(1,2,3......1000)limit200

當(dāng)然了,最好是在代碼層面做個(gè)限制

if(ids.size()>200){
thrownewException("單次查詢數(shù)據(jù)量不能超過200");
}

1.6 單純的數(shù)據(jù)量過大

這種問題,單純代碼的修修補(bǔ)補(bǔ)一般就解決不了了,需要變動(dòng)整個(gè)的數(shù)據(jù)存儲(chǔ)架構(gòu)。或者是對底層mysql分表或分庫+分表;或者就是直接變更底層數(shù)據(jù)庫,把mysql轉(zhuǎn)換成專門為處理大數(shù)據(jù)設(shè)計(jì)的數(shù)據(jù)庫。這種工作是個(gè)系統(tǒng)工程,需要嚴(yán)密的調(diào)研、方案設(shè)計(jì)、方案評(píng)審、性能評(píng)估、開發(fā)、測試、聯(lián)調(diào),同時(shí)需要設(shè)計(jì)嚴(yán)密的數(shù)據(jù)遷移方案、回滾方案、降級(jí)措施、故障處理預(yù)案。除了以上團(tuán)隊(duì)內(nèi)部的工作,還可能有跨系統(tǒng)溝通的工作,畢竟做了重大變更,下游系統(tǒng)的調(diào)用接口的方式有可能會(huì)需要變化。

出于篇幅的考慮,這個(gè)不再展開了,筆者有幸完整參與了一次億級(jí)別數(shù)據(jù)量的數(shù)據(jù)庫分表工作,對整個(gè)過程的復(fù)雜性深有體會(huì),后續(xù)有機(jī)會(huì)也會(huì)分享出來。

2、業(yè)務(wù)邏輯復(fù)雜

2.1 循環(huán)調(diào)用

這種情況,一般都循環(huán)調(diào)用同一段代碼,每次循環(huán)的邏輯一致,前后不關(guān)聯(lián)。比如說,我們要初始化一個(gè)列表,預(yù)置12個(gè)月的數(shù)據(jù)給前端:

Listlist=newArrayList<>();
for(inti=0;i

這種顯然每個(gè)月的數(shù)據(jù)計(jì)算相互都是獨(dú)立的,我們完全可以采用多線程方式進(jìn)行:

//建立一個(gè)線程池,注意要放在外面,不要每次執(zhí)行代碼就建立一個(gè),具體線程池的使用就不展開了
publicstaticExecutorServicecommonThreadPool=newThreadPoolExecutor(5,5,300L,
TimeUnit.SECONDS,newLinkedBlockingQueue<>(10),commonThreadFactory,newThreadPoolExecutor.DiscardPolicy());

//開始多線程調(diào)用
List>futures=newArrayList<>();
for(inti=0;ifuture=commonThreadPool.submit(()->calOneMonthData(i););
futures.add(future);
}

//獲取結(jié)果
Listlist=newArrayList<>();
try{
for(inti=0;i

2.2 順序調(diào)用

如果不是類似上面循環(huán)調(diào)用,而是一次次的順序調(diào)用,而且調(diào)用之間沒有結(jié)果上的依賴,那么也可以用多線程的方式進(jìn)行,例如:

88f74d62-9fc3-11ed-bfe3-dac502259ad0.png

代碼上看:

Aa=doA();
Bb=doB();

Cc=doC(a,b);

Dd=doD(c);
Ee=doE(c);

returndoResult(d,e);

那么可用CompletableFuture解決

CompletableFuturefutureA=CompletableFuture.supplyAsync(()->doA());
CompletableFuturefutureB=CompletableFuture.supplyAsync(()->doB());
CompletableFuture.allOf(futureA,futureB)//等ab兩個(gè)任務(wù)都執(zhí)行完成

Cc=doC(futureA.join(),futureB.join());

CompletableFuturefutureD=CompletableFuture.supplyAsync(()->doD(c));
CompletableFuturefutureE=CompletableFuture.supplyAsync(()->doE(c));
CompletableFuture.allOf(futureD,futureE)//等de兩個(gè)任務(wù)都執(zhí)行完成

returndoResult(futureD.join(),futureE.join());

這樣A B 兩個(gè)邏輯可以并行執(zhí)行,D E兩個(gè)邏輯可以并行執(zhí)行,最大執(zhí)行時(shí)間取決于哪個(gè)邏輯更慢。

3、線程池設(shè)計(jì)不合理

有的時(shí)候,即使我們使用了線程池讓任務(wù)并行處理,接口的執(zhí)行效率仍然不夠快,這種情況可能是怎么回事呢?

這種情況首先應(yīng)該懷疑是不是線程池設(shè)計(jì)的不合理。我覺得這里有必要回顧一下線程池的三個(gè)重要參數(shù):核心線程數(shù)、最大線程數(shù)、等待隊(duì)列。這三個(gè)參數(shù)是怎么打配合的呢?當(dāng)線程池創(chuàng)建的時(shí)候,如果不預(yù)熱線程池,則線程池中線程為0。當(dāng)有任務(wù)提交到線程池,則開始創(chuàng)建核心線程。

892629ac-9fc3-11ed-bfe3-dac502259ad0.png

當(dāng)核心線程全部被占滿,如果再有任務(wù)到達(dá),則讓任務(wù)進(jìn)入等待隊(duì)列開始等待。

8942b072-9fc3-11ed-bfe3-dac502259ad0.png

如果隊(duì)列也被占滿,則開始創(chuàng)建非核心線程運(yùn)行。

89600fdc-9fc3-11ed-bfe3-dac502259ad0.png

如果線程總數(shù)達(dá)到最大線程數(shù),還是有任務(wù)到達(dá),則開始根據(jù)線程池拋棄規(guī)則開始拋棄。

897d83f0-9fc3-11ed-bfe3-dac502259ad0.png

那么這個(gè)運(yùn)行原理與接口運(yùn)行時(shí)間有什么關(guān)系呢?

核心線程設(shè)置過小:核心線程設(shè)置過小則沒有達(dá)到并行的效果

線程池公用,別的業(yè)務(wù)的任務(wù)執(zhí)行時(shí)間太長,占用了核心線程,另一個(gè)業(yè)務(wù)的任務(wù)到達(dá)就直接進(jìn)入了等待隊(duì)列

任務(wù)太多,以至于占滿了線程池,大量任務(wù)在隊(duì)列中等待

在排查的時(shí)候,只要找到了問題出現(xiàn)的原因,那么解決方式也就清楚了,無非就是調(diào)整線程池參數(shù),按照業(yè)務(wù)拆分線程池等等。

4、鎖設(shè)計(jì)不合理

鎖設(shè)計(jì)不合理一般有兩種:鎖類型使用不合理 or 鎖過粗。

鎖類型使用不合理的典型場景就是讀寫鎖。也就是說,讀是可以共享的,但是讀的時(shí)候不能對共享變量寫;而在寫的時(shí)候,讀寫都不能進(jìn)行。在可以加讀寫鎖的時(shí)候,如果我們加成了互斥鎖,那么在讀遠(yuǎn)遠(yuǎn)多于寫的場景下,效率會(huì)極大降低。

鎖過粗則是另一種常見的鎖設(shè)計(jì)不合理的情況,如果我們把鎖包裹的范圍過大,則加鎖時(shí)間會(huì)過長,例如:

publicsynchronizedvoiddoSome(){
Filef=calData();
uploadToS3(f);
sendSuccessMessage();
}

這塊邏輯一共處理了三部分,計(jì)算、上傳結(jié)果、發(fā)送消息。顯然上傳結(jié)果和發(fā)送消息是完全可以不加鎖的,因?yàn)檫@個(gè)跟共享變量根本不沾邊。因此完全可以改成:

publicvoiddoSome(){
Filef=null;
synchronized(this){
f=calData();
}
uploadToS3(f);
sendSuccessMessage();
}

5、機(jī)器問題(fullGC,機(jī)器重啟,線程打滿)

造成這個(gè)問題的原因非常多,筆者就遇到了定時(shí)任務(wù)過大引起fullGC,代碼存在線程泄露引起RSS內(nèi)存占用過高進(jìn)而引起機(jī)器重啟等待諸多原因。需要結(jié)合各種監(jiān)控和具體場景具體分析,進(jìn)而進(jìn)行大事務(wù)拆分、重新規(guī)劃線程池等等工作

6、萬金油解決方式

萬金油這個(gè)形容詞是從我們單位某位老師那里學(xué)來的,但是筆者覺得非常貼切。這些萬金油解決方式往往能解決大部分的接口緩慢的問題,而且也往往是我們解決接口效率問題的最終解決方案。當(dāng)我們實(shí)在是沒有辦法排查出問題,或者實(shí)在是沒有優(yōu)化空間的時(shí)候,可以嘗試這種萬金油的方式。

6.1 緩存

緩存是一種空間換取時(shí)間的解決方案,是在高性能存儲(chǔ)介質(zhì)上(例如:內(nèi)存、SSD硬盤等)存儲(chǔ)一份數(shù)據(jù)備份。當(dāng)有請求打到服務(wù)器的時(shí)候,優(yōu)先從緩存中讀取數(shù)據(jù)。如果讀取不到,則再從硬盤或通過網(wǎng)絡(luò)獲取數(shù)據(jù)。由于內(nèi)存或SSD相比硬盤或網(wǎng)絡(luò)IO的效率高很多,則接口響應(yīng)速度會(huì)變快非常多。緩存適合于應(yīng)用在數(shù)據(jù)讀遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)寫,且數(shù)據(jù)變化不頻繁的場景中。從技術(shù)選型上看,有這些:

簡單的map

guava等本地緩存工具包

緩存中間件:redis、tair或memcached

當(dāng)然,memcached現(xiàn)在用的很少了,因?yàn)橄啾扔趓edis他不占優(yōu)勢。tair則是阿里開發(fā)的一個(gè)分布式緩存中間件,他的優(yōu)勢是理論上可以在不停服的情況下,動(dòng)態(tài)擴(kuò)展存儲(chǔ)容量,適用于大數(shù)據(jù)量緩存存儲(chǔ)。相比于單機(jī)redis緩存當(dāng)然有優(yōu)勢,而他與可擴(kuò)展Redis集群的對比則需要進(jìn)一步調(diào)研。

進(jìn)一步的,當(dāng)前緩存的模型一般都是key-value模型。如何設(shè)計(jì)key以提高緩存的命中率是個(gè)大學(xué)問,好的key設(shè)計(jì)和壞的key設(shè)計(jì)所提升的性能差別非常大。而且,key設(shè)計(jì)是沒有一定之規(guī)的,需要結(jié)合具體的業(yè)務(wù)場景去分析。各個(gè)大公司分享出來的相關(guān)文章,緩存設(shè)計(jì)基本上是最大篇幅。

6.2 回調(diào) or 反查

這種方式往往是業(yè)務(wù)上的解決方式,在訂單或者付款系統(tǒng)中應(yīng)用的比較多。舉個(gè)例子:當(dāng)我們付款的時(shí)候,需要調(diào)用一個(gè)專門的付款系統(tǒng)接口,該系統(tǒng)經(jīng)過一系列驗(yàn)證、存儲(chǔ)工作后還要調(diào)用銀行接口以執(zhí)行付款。由于付款這個(gè)動(dòng)作要求十分嚴(yán)謹(jǐn),銀行側(cè)接口執(zhí)行可能比較緩慢,進(jìn)而拖累整個(gè)付款接口性能。這個(gè)時(shí)候我們就可以采用fast success的方式:當(dāng)必要的校驗(yàn)和存儲(chǔ)完成后,立即返回success,同時(shí)告訴調(diào)用方一個(gè)中間態(tài)“付款中”。而后調(diào)用銀行接口,當(dāng)獲得支付結(jié)果后再調(diào)用上游系統(tǒng)的回調(diào)接口返回付款的最終結(jié)果“成果”or“失敗”。這樣就可以異步執(zhí)行付款過程,提升付款接口效率。當(dāng)然,為了防止多業(yè)務(wù)方接入的時(shí)候回調(diào)接口不統(tǒng)一,可以把結(jié)果拋進(jìn)kafka,讓調(diào)用方監(jiān)聽自己的結(jié)果。

899e6584-9fc3-11ed-bfe3-dac502259ad0.png

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

    關(guān)注

    33

    文章

    8685

    瀏覽量

    151648
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3842

    瀏覽量

    64579
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    826

    瀏覽量

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

    關(guān)注

    0

    文章

    505

    瀏覽量

    19720
  • 接口優(yōu)化
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1365

原文標(biāo)題:聊聊接口優(yōu)化的幾個(gè)方法

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ARM開發(fā)中幾個(gè)常見的寄存器詳解

    筆者今天來聊聊對于ARM幾個(gè)特殊寄存器的理解,F(xiàn)P、SP和LR。
    發(fā)表于 11-22 09:02 ?4299次閱讀

    聊聊寄存器被優(yōu)化的2種情況

    在項(xiàng)目初期,在使用FPGA工具quartus或者vivado生成版本燒入開發(fā)板進(jìn)行調(diào)試時(shí)(DC開啟優(yōu)化選項(xiàng)后同樣會(huì)優(yōu)化掉寄存器),我們有時(shí)會(huì)發(fā)現(xiàn)部分寄存器被優(yōu)化掉了,今天簡單聊聊
    的頭像 發(fā)表于 09-08 15:09 ?2371次閱讀
    <b class='flag-5'>聊聊</b>寄存器被<b class='flag-5'>優(yōu)化</b>的2種情況

    差分接口優(yōu)化射頻收發(fā)器設(shè)計(jì)介紹

    實(shí)際設(shè)計(jì)過程中,工程師需要處理幾個(gè)常見問題,包括阻抗匹配、共模電壓匹配以及復(fù)雜的增益計(jì)算。了解發(fā)射機(jī)和接收機(jī)中的差分電路對優(yōu)化增益匹配和系統(tǒng)性能很有幫助。 
    發(fā)表于 07-04 07:47

    電源優(yōu)化方法是什么

    目錄一、電源優(yōu)化方法1.1 功能禁用1.2 動(dòng)態(tài)功耗管理 (Dynamic Power Management)1.3 頻率縮放1.4 時(shí)鐘門控1.5 使用PL加速二、四大功耗域及PMU2.1 電池
    發(fā)表于 11-12 08:36

    聊聊使用功率FET應(yīng)該注意的問題有哪些

    穩(wěn)壓電源,幾乎都能發(fā)現(xiàn)FET的影子。幾乎每個(gè)電源工程師都用過這東西,或用來逆變;或用來整流;或就當(dāng)個(gè)開關(guān)。 由于用處不同;每個(gè)廠家都對不同用處FET做了專門優(yōu)化。以致同樣耐壓/電流的FET;有多個(gè)
    發(fā)表于 11-12 07:10

    幾個(gè)android版本中電量優(yōu)化功能

    針對電量優(yōu)化android的改動(dòng)在最近幾個(gè)android版本中已存在的電量優(yōu)化功能基礎(chǔ)上,Android 9 引入了一些新功能來持續(xù)改進(jìn)設(shè)備電源管理,以確保將系統(tǒng)資源提供給最需要它們的應(yīng)用.近
    發(fā)表于 12-27 07:23

    聊聊復(fù)位電路

    時(shí)鐘電路我第一篇博客已經(jīng)說講過了,今天我們來聊聊復(fù)位電路。當(dāng)然,復(fù)位電路博大精深,并...
    發(fā)表于 01-17 07:50

    優(yōu)化Unity程序的方法

    的幀速率,使其成為更好、更流暢的體驗(yàn)。 本指南介紹了優(yōu)化Unity程序的方法,尤其是它們的GPU使用。 本指南將優(yōu)化分為三章: ?應(yīng)用程序處理器優(yōu)化?GPU
    發(fā)表于 08-02 18:52

    接口協(xié)議智能編解碼方法研究

    針對當(dāng)前復(fù)雜信息系統(tǒng)仿真中,關(guān)于接口協(xié)議編解碼方法的缺陷,從接口協(xié)議的存儲(chǔ)、程序設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)和編解碼流程幾個(gè)方面,給出了復(fù)雜信息系統(tǒng)仿真中接口
    發(fā)表于 02-21 11:07 ?20次下載

    提升WiFi信號(hào)質(zhì)量的幾個(gè)方法

    提升WiFi信號(hào)質(zhì)量的幾個(gè)方法
    發(fā)表于 01-12 21:58 ?11次下載

    優(yōu)化嵌入式軟件時(shí)可以遵循幾個(gè)通用技巧盤點(diǎn)

    早前的專欄中曾討論過在許多情況下需要優(yōu)化的嵌入式系統(tǒng)的關(guān)鍵特征,包括系統(tǒng)時(shí)序、代碼大小、RAM使用率和能耗。雖然優(yōu)化每個(gè)特征通常要求不同的方法和技術(shù),但開發(fā)人員在優(yōu)化嵌入式軟件時(shí)可以遵
    發(fā)表于 03-08 14:40 ?671次閱讀

    幾個(gè)Matlab編程中常用的優(yōu)化技巧

    用過Matlab的同學(xué)應(yīng)該都知道,Matlab的慢是出了名的,但是再慢也有優(yōu)化的方式,下面我們給出幾個(gè)Matlab編程中常用的優(yōu)化技巧。
    的頭像 發(fā)表于 02-08 15:18 ?3759次閱讀

    利用axi_master接口指令端的幾個(gè)靜態(tài)參數(shù)的優(yōu)化技巧

    本文給大家提供利用axi_master接口指令端的幾個(gè)靜態(tài)參數(shù)的優(yōu)化技巧,從擴(kuò)展總線接口數(shù)量,擴(kuò)展總線位寬,循環(huán)展開等角度入手。最核心的優(yōu)化
    的頭像 發(fā)表于 07-01 09:39 ?1546次閱讀

    接口優(yōu)化的常見方案實(shí)戰(zhàn)總結(jié)

    針對老項(xiàng)目,去年做了許多降本增效的事情,其中發(fā)現(xiàn)最多的就是接口耗時(shí)過長的問題,就集中搞了一次接口性能優(yōu)化。本文將給小伙伴們分享一下接口優(yōu)化
    的頭像 發(fā)表于 03-06 09:22 ?591次閱讀

    聊聊JVM如何優(yōu)化

    進(jìn)行優(yōu)化。 1.JVM內(nèi)存模型 針對JAVA8的模型進(jìn)行討論,JVM的內(nèi)存模型主要分為幾個(gè)關(guān)鍵區(qū)域:堆、方法區(qū)、程序計(jì)數(shù)器、虛擬機(jī)棧和本地方法棧。堆內(nèi)存進(jìn)一步細(xì)分為年輕代、老年代,年輕
    的頭像 發(fā)表于 08-05 17:49 ?513次閱讀
    <b class='flag-5'>聊聊</b>JVM如何<b class='flag-5'>優(yōu)化</b>
    主站蜘蛛池模板: 领导边摸边吃奶边做爽在线观看| 成人在免费视频手机观看网站| 欧美白妞大战非洲大炮| 国产av在线看的| 最新无码二区日本专区| 亚洲国产在线2o20| 色欲AV色欲AV久久麻豆| 男宿舍里的呻吟h| 亚洲国产AV精品卡一卡二| 欧美 亚洲 有码中文字幕| 狠狠色丁香婷婷久久综合五月| 吃胸亲吻吃奶摸下面免费视频| 2224x最新网站| 亚洲中文字幕无码一去台湾| 久久青草费线频观看国产| 国产精品久久久久影院嫩草| xx69美国| 亚洲精品国产第一区第二区| 日本无码人妻精品一区二区视频| 考试考90就可以晚上和老师C| 国产亚洲综合视频| 国产电影无码午夜在线播放| 超碰视频在线| gogo亚洲肉体艺术照片9090| 最近免费中文字幕大全免费| 亚洲天堂av2017| 亚洲国产第一区二区三区| 香蕉在线播放| 偷偷鲁青春草原视频分类| 日本特黄网站| 日韩一区二区天海翼| 肉动漫3D卡通无修在线播放| 秋霞午夜鲁丝片午夜精品久| 欧美s00老人| 嗯别插太快好深再深点| 男人J桶进男人屁股过程| 麻豆久久国产亚洲精品超碰热| 麻生希第一部快播| 木凡的天空在线收听| 牛牛在线1视频| 青青草久久伊人|