日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

如何打造高效的多任务、高并发的网络服务器系统?

發(fā)布時(shí)間:2023/12/19 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何打造高效的多任务、高并发的网络服务器系统? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

同一個(gè)功能的軟件,不同的團(tuán)隊(duì),不同工程師去實(shí)現(xiàn),肯定是千差萬(wàn)別,甚至從根本上完全不同。所以軟件開(kāi)發(fā)在未來(lái)很長(zhǎng)時(shí)間內(nèi)仍然是一項(xiàng)工匠的手工勞動(dòng),尤其像多任務(wù),高并發(fā),偏底層這種對(duì)實(shí)現(xiàn)技巧比較高的系統(tǒng),這種系統(tǒng)對(duì)開(kāi)發(fā)者來(lái)說(shuō)仍然充滿(mǎn)挑戰(zhàn),考驗(yàn)工程師對(duì)產(chǎn)品的理解,經(jīng)驗(yàn)的積累,技術(shù)方案的取舍,以及各種因素的權(quán)衡。總之,平庸的軟件系統(tǒng),很多人都可以做,但在這個(gè)領(lǐng)域內(nèi)的標(biāo)桿產(chǎn)品,只有功力深厚的工程師才能駕馭。

對(duì)應(yīng)用服務(wù)器業(yè)務(wù)類(lèi)型的深入理解
開(kāi)發(fā)一個(gè)產(chǎn)品,肯定要先對(duì)產(chǎn)品的業(yè)務(wù)和功能必須有深入的理解,脫離業(yè)務(wù)去談產(chǎn)品的技術(shù)實(shí)現(xiàn),那無(wú)異于空中樓閣,沒(méi)有根基,產(chǎn)品是為解決業(yè)務(wù)需求,業(yè)務(wù)痛點(diǎn)而存在的。首先架構(gòu)師將一個(gè)大的解決方案進(jìn)行模塊切分,然后對(duì)每個(gè)軟件業(yè)務(wù)模塊進(jìn)行需求定義,接下來(lái)技術(shù)專(zhuān)家對(duì)實(shí)現(xiàn)方案進(jìn)行技術(shù)論證決策和開(kāi)發(fā)任務(wù)提煉,最后開(kāi)發(fā)工程師負(fù)責(zé)開(kāi)發(fā)任務(wù)的實(shí)現(xiàn)。作為各個(gè)環(huán)節(jié)的參與者,我們首先要深入理解需求定義,探明軟件日常的工作場(chǎng)景,然后才能有針對(duì)性的進(jìn)行相關(guān)的構(gòu)建和設(shè)計(jì)。
我們一般大體上將服務(wù)器軟件類(lèi)型分為“IO密集型”和“計(jì)算密集型”。IO密集型,顧名思義,就是說(shuō)軟件要處理高并發(fā),大數(shù)據(jù)量的網(wǎng)絡(luò)或者文件IO請(qǐng)求,這時(shí)我們要將CPU計(jì)算資源向IO傾斜,并審慎的選擇高效的IO模型,IO模型的選擇也包含了很多技術(shù)內(nèi)容,同時(shí)也有很多的框架支撐,具體不在此贅述。計(jì)算密集型,就是說(shuō)軟件的主要業(yè)務(wù)是進(jìn)行同步計(jì)算,這時(shí)我們的側(cè)重點(diǎn)要考慮如何在多核CPU之間分配、同步這些計(jì)算任務(wù),使之充分利用計(jì)算資源;IO層面如何做到精簡(jiǎn),穩(wěn)定,可靠。當(dāng)然也存在著“IO和計(jì)算混合型”,那我們就要結(jié)合具體業(yè)務(wù)綜合考慮技術(shù)方案。總之,兵無(wú)常勢(shì) 水無(wú)常形,具體問(wèn)題,具體分析,決策的依據(jù)都來(lái)源于我們?nèi)粘5目偨Y(jié)與積累。

計(jì)算任務(wù)的合理分配(多任務(wù)CPU資源的分配)
我們?cè)缫堰~入多核CPU的時(shí)代,在服務(wù)器領(lǐng)域,尤其如此。服務(wù)端的軟件系統(tǒng)要充分利用計(jì)算資源,那就必須適應(yīng)多核CPU的并發(fā)特性。提到這里,很多人會(huì)想“不就是多搞幾個(gè)線(xiàn)程就行了,有什么難的”,是啊,那搞幾個(gè)線(xiàn)程?為什么要把這個(gè)任務(wù)放在這個(gè)線(xiàn)程里?深究起來(lái),都不是簡(jiǎn)單的問(wèn)題,我們?cè)陂_(kāi)發(fā)一個(gè)系統(tǒng)前,必須要有“并發(fā)性規(guī)劃”,根據(jù)業(yè)務(wù)特點(diǎn),進(jìn)行進(jìn)程,線(xiàn)程,線(xiàn)程池,同步/異步,阻塞/非阻塞的規(guī)劃選擇,任何選擇都不是隨意的,都是有考量和統(tǒng)籌的,甚至有模擬演算,這樣的決策才是科學(xué)、有效的。

IO復(fù)用模型的合理選擇
服務(wù)端系統(tǒng)要么要接收外界的數(shù)據(jù)流,要么要監(jiān)聽(tīng)外界的指令。數(shù)據(jù)流和指令的接收處理方式,都要涉及到IO模型的選擇,尤其對(duì)IO密集型的應(yīng)用,IO模型的選擇和開(kāi)發(fā)實(shí)現(xiàn),是產(chǎn)品成功與否的關(guān)鍵,這也是CamelProxy的核心技術(shù)。除了標(biāo)準(zhǔn)的socket標(biāo)準(zhǔn),不同的操作系統(tǒng)平臺(tái)也對(duì)IO復(fù)用模型有不同的技術(shù)支持,比如Linux平臺(tái)的poll, epoll,Windows的重疊IO,完成端口等。同時(shí)也產(chǎn)生了很多第三方的跨平臺(tái)的C++網(wǎng)絡(luò)開(kāi)發(fā)框架和庫(kù),同時(shí)支持同步的,異步的,反應(yīng)式,前攝式的等操作方式,并且也提供了很多網(wǎng)絡(luò)開(kāi)發(fā)過(guò)程必不可少的組件,比如主動(dòng)對(duì)象,線(xiàn)程池,消息隊(duì)列,同步控制等。這方面的框架包括ACE, Libevent, Boost等,都是非常好的網(wǎng)絡(luò)開(kāi)發(fā)知識(shí)總結(jié)和實(shí)現(xiàn)。總之,沒(méi)有差的技術(shù),只有合不合適你當(dāng)前場(chǎng)景的技術(shù),合理的選擇,將會(huì)事半功倍。

內(nèi)存資源的高效使用
作為一個(gè)服務(wù)器后臺(tái)系統(tǒng)的開(kāi)發(fā)者,我們都希望自己的系統(tǒng)高效,能夠長(zhǎng)時(shí)間穩(wěn)定運(yùn)行的,最好能連續(xù)幾個(gè)月,不需要重啟的。從我們的經(jīng)驗(yàn)來(lái)看,要達(dá)到這個(gè)目標(biāo),必須對(duì)內(nèi)存的調(diào)配使用要著重考量。內(nèi)存的使用也是反應(yīng)一個(gè)開(kāi)發(fā)者在C, C++編程能力的重要指標(biāo),如果代碼中臨時(shí)對(duì)象,內(nèi)存復(fù)制滿(mǎn)天飛,起碼就反映了開(kāi)發(fā)者對(duì)語(yǔ)言的機(jī)制沒(méi)有深入洞悉。在內(nèi)存使用技巧上,要注意兩個(gè)方面。首先,不要頻繁的進(jìn)行內(nèi)存的動(dòng)態(tài)分配,釋放,避免內(nèi)存碎片的累積。很多系統(tǒng)也沒(méi)有內(nèi)存泄漏,但隨著運(yùn)行時(shí)間的退役,內(nèi)存占用量不斷上升,最終到了一個(gè)臨界點(diǎn),然后系統(tǒng)就必須重啟。內(nèi)存最好在系統(tǒng)開(kāi)始運(yùn)行就分配好,再根據(jù)系統(tǒng)的負(fù)載的變化動(dòng)態(tài)的調(diào)整預(yù)分配的內(nèi)存,或者用內(nèi)存池等技巧來(lái)優(yōu)化;再者,編程實(shí)現(xiàn)時(shí),注重指針,引用的使用,避免不必要的臨時(shí)對(duì)象的產(chǎn)生,用不好指針的程序員,不是合格的C++開(kāi)發(fā)者。總之,開(kāi)發(fā)高效,穩(wěn)定的系統(tǒng),內(nèi)存的編程實(shí)現(xiàn)技巧必不可少,考驗(yàn)的也是開(kāi)發(fā)者的功力于思考。

多線(xiàn)程并發(fā)的有效控制
充分挖掘多核CPU的計(jì)算能力,就必須應(yīng)用多線(xiàn)程,多執(zhí)行路徑的程序設(shè)計(jì)方式。多線(xiàn)程開(kāi)發(fā)除了帶來(lái)線(xiàn)程路徑設(shè)計(jì)和執(zhí)行任務(wù)分配的問(wèn)題外,還有一個(gè)重要的問(wèn)題就是線(xiàn)程間的協(xié)作和通信。這不僅包括了多線(xiàn)程對(duì)競(jìng)爭(zhēng)資源的訪(fǎng)問(wèn)控制,也包含了線(xiàn)程的通知激活,優(yōu)雅退出,以及衍生出來(lái)消息隊(duì)列,流水線(xiàn)操作,都需要適當(dāng)?shù)膱?chǎng)景選擇合適的方案。

語(yǔ)言工具的選擇
干什么活用什么樣的工具,工具的選擇會(huì)使過(guò)程和結(jié)果事半功倍。做高性能,大容量,高并發(fā)服務(wù)端后臺(tái)服務(wù)軟件系統(tǒng),開(kāi)發(fā)語(yǔ)言一定是C,C++, 因?yàn)樵撜Z(yǔ)言提供了足夠的空間,讓你充分運(yùn)用各種技巧來(lái)優(yōu)化程序的性能,這是其他高層語(yǔ)言所不能具備的,其他語(yǔ)言為了降低開(kāi)發(fā)者所需掌握的難度與復(fù)雜性,做了太多的封裝與抽象化,不適合做一些高性能的應(yīng)用。
選擇了對(duì)的工具,剩下的就是考驗(yàn)實(shí)現(xiàn)者對(duì)工具的運(yùn)用的水平,也是系統(tǒng)實(shí)現(xiàn)的關(guān)鍵和核心,也體現(xiàn)了一個(gè)高水平開(kāi)發(fā)者對(duì)軟件的認(rèn)識(shí)與思考,懂得如何有的放矢,充分解決問(wèn)題,又不臃腫。正可謂“增一分則太長(zhǎng),減一分則太短”,取舍之間,大有乾坤。

這是在開(kāi)發(fā)網(wǎng)絡(luò)代理服務(wù)器CamelProxy系統(tǒng)-CamelProxy代理服務(wù)器過(guò)程中一點(diǎn)經(jīng)驗(yàn)總結(jié),如果您有更好的建議,歡迎批評(píng)指正。

轉(zhuǎn)載于:https://blog.51cto.com/13535157/2093238

總結(jié)

以上是生活随笔為你收集整理的如何打造高效的多任务、高并发的网络服务器系统?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。