日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

linux家用云服務(wù)器 Linux搭建服務(wù)器

今天給各位分享關(guān)于linux家用云服務(wù)器(Linux搭建服務(wù)器)的知識,希望對你有幫助,現(xiàn)在開始把!

linux家用云服務(wù)器 Linux搭建服務(wù)器


1、這篇文章,我們循序漸進,從內(nèi)存、磁盤I/O、 *** I/O、CPU、緩存、架構(gòu)、算法等多層次遞進,串聯(lián)起高性能開發(fā)十大必須掌握的核心技術(shù) 。–I/O優(yōu)化:零拷貝技術(shù)–I/O優(yōu)化:多路復(fù)用技術(shù)–線程池技術(shù)–無鎖編程技術(shù)–進程間通信技術(shù)–RPC&&序列化技術(shù)–數(shù)據(jù)庫索引技術(shù)–緩存技術(shù)&&布隆過濾器–全文搜索技術(shù)–負載均衡技術(shù)準備好了嗎,坐穩(wěn)了,發(fā)車!首先,我們從最簡單的模型開始 。老板告訴你,開發(fā)一個靜態(tài)web服務(wù)器,把磁盤文件(網(wǎng)頁、圖片)通過 *** 發(fā)出去,怎么做?你花了兩天時間,擼了一個0版本:主線程進入一個循環(huán),等待連接來一個連接就啟動一個工作線程來處理工作線程中,等待對方請求,然后從磁盤讀文件、往套接口發(fā)送數(shù)據(jù),完事兒上線一天,老板發(fā)現(xiàn)太慢了,大一點的圖片加載都有卡頓感 。
2、讓你優(yōu)化,這個時候,你需要:I/O優(yōu)化:零拷貝技術(shù)上面的工作線程,從磁盤讀文件、再通過 *** 發(fā)送數(shù)據(jù),數(shù)據(jù)從磁盤到 ***,兜兜轉(zhuǎn)轉(zhuǎn)需要拷貝四次,其中CPU親自搬運都需要兩次 。零拷貝技術(shù),解放CPU,文件數(shù)據(jù)直接從內(nèi)核發(fā)送出去,無需再拷貝到應(yīng)用程序緩沖區(qū),白白浪費資源 。LinuxAPI:
3、ssize_tsendfile(intout_fd,intin_fd,off_t*offset,size_tcount);函數(shù)名字已經(jīng)把函數(shù)的功能解釋的很明顯了:發(fā)送文件 。
4、指定要發(fā)送的文件描述符和 *** 套接字描述符,一個函數(shù)搞定!用上了零拷貝技術(shù)后開發(fā)了0版本,圖片加載速度明顯有了提升 。不過老板發(fā)現(xiàn)同時訪問的人變多了以后,又變慢了,又讓你繼續(xù)優(yōu)化 。這個時候,你需要:I/O優(yōu)化:多路復(fù)用技術(shù)前面的版本中,每個線程都要阻塞在recv等待對方的請求,這來訪問的人多了,線程開的就多了,大量線程都在阻塞,系統(tǒng)運轉(zhuǎn)速度也隨之下降 。
5、這個時候,你需要多路復(fù)用技術(shù),使用select模型,將所有等待(accept、recv)都放在主線程里,工作線程不需要再等待 。過了一段時間之后,網(wǎng)站訪問的人越來越多了,就連select也開始有點應(yīng)接不暇,老板繼續(xù)讓你優(yōu)化性能 。這個時候,你需要升級多路復(fù)用模型為epoll 。
6、select有三弊,epoll有三優(yōu) 。select底層采用數(shù)組來管理套接字描述符,同時管理的數(shù)量有上限,一般不超過幾千個,epoll使用樹和鏈表來管理,同時管理數(shù)量可以很大 。select不會告訴你到底哪個套接字來了消息,你需要一個個去詢問 。
7、epoll直接告訴你誰來了消息,不用輪詢 。select進行系統(tǒng)調(diào)用時還需要把套接字列表在用戶空間和內(nèi)核空間來回拷貝,循環(huán)中調(diào)用select時簡直浪費 。epoll統(tǒng)一在內(nèi)核管理套接字描述符,無需來回拷貝 。
8、用上了epoll多路復(fù)用技術(shù),開發(fā)了0版本,你的網(wǎng)站能同時處理很多用戶請求了 。但是貪心的老板還不滿足,不舍得升級硬件服務(wù)器,卻讓你進一步提高服務(wù)器的吞吐量 。你研究后發(fā)現(xiàn),之前的方案中,工作線程總是用到才創(chuàng)建,用完就關(guān)閉,大量請求來的時候,線程不斷創(chuàng)建、關(guān)閉、創(chuàng)建、關(guān)閉,開銷挺大的 。
9、這個時候,你需要:線程池技術(shù)我們可以在程序一開始啟動后就批量啟動一波工作線程,而不是在有請求來的時候才去創(chuàng)建,使用一個公共的任務(wù)隊列,請求來臨時,向隊列中投遞任務(wù),各個工作線程統(tǒng)一從隊列中不斷取出任務(wù)來處理,這就是線程池技術(shù) 。多線程技術(shù)的使用一定程度提升了服務(wù)器的并發(fā)能力,但同時,多個線程之間為了數(shù)據(jù)同步,常常需要使用互斥體、信號、條件變量等手段來同步多個線程 。這些重量級的同步手段往往會導(dǎo)致線程在用戶態(tài)/內(nèi)核態(tài)多次切換,系統(tǒng)調(diào)用,線程切換都是不小的開銷 。

推薦閱讀