day41綜合架構(gòu)網(wǎng)站原理篇

  • HTTP網(wǎng)站資源類型

  • HTTP網(wǎng)站訪問度量

  • 企業(yè)常用網(wǎng)站服務(wù)軟件

  • nginx網(wǎng)站服務(wù)特性

  • nginx服務(wù)部署安裝

1.HTTP網(wǎng)站資源類型
\color{red}{1)靜態(tài)資源:}
?1) 每個(gè)頁(yè)面都有一個(gè)固定的URL/URI地址,且URL一般以.html悦陋、.htm、.shtml等常見形式為后綴揽咕,而且地址中不含有問號(hào)“?”或“&”等特殊符號(hào)舞虱。
?2) 網(wǎng)頁(yè)內(nèi)容一經(jīng)發(fā)布到網(wǎng)站服務(wù)器上蔫仙,無論是否有用戶訪問,每個(gè)網(wǎng)頁(yè)的內(nèi)容都是保存在網(wǎng)站服務(wù)器文件系統(tǒng)上的府蔗,也就是說,靜態(tài)網(wǎng)頁(yè)是實(shí)實(shí)在在保存在服務(wù)器上的文件實(shí)體汞窗,每個(gè)網(wǎng)頁(yè)都是一個(gè)獨(dú)立的文件姓赤。 缺點(diǎn)
?3) 網(wǎng)頁(yè)內(nèi)容是固定不變的,因此仲吏,容易被搜索引擎收錄(容易被用戶找到)(優(yōu)點(diǎn))不铆。
?4) 因?yàn)榫W(wǎng)頁(yè)沒有數(shù)據(jù)庫(kù)的支持蝌焚,所以在網(wǎng)站制作和維護(hù)方面的工作量較大,當(dāng)網(wǎng)站信息量很大時(shí)誓斥,完全依靠靜態(tài)網(wǎng)頁(yè)比較困難(缺點(diǎn))只洒。
?5) 網(wǎng)頁(yè)的交互性較差,在程序的功能實(shí)現(xiàn)方面有較大的限制(缺點(diǎn))劳坑。
?6) 網(wǎng)頁(yè)程序在用戶瀏覽器端解析毕谴,如IE瀏覽器,程序解析效率很高距芬,由于服務(wù)器端不進(jìn)行解析涝开,并且不需要讀取數(shù)據(jù)庫(kù),因此服務(wù)器端可以接受更多的并發(fā)訪問框仔。當(dāng)客戶端向服務(wù)器請(qǐng)求數(shù)據(jù)時(shí)忠寻,服務(wù)器會(huì)直接從磁盤文件系統(tǒng)上返回?cái)?shù)據(jù)(不做任何解析)。待客戶端拿到數(shù)據(jù)后存和,在瀏覽器端解析并展現(xiàn)出來(優(yōu)點(diǎn))。

\color{red}{2)動(dòng)態(tài)資源:}
?1) 網(wǎng)頁(yè)擴(kuò)展名后綴常見為:.asp衷旅、.aspx捐腿、.php、.js柿顶、.do茄袖、.cgi等。
?2) 網(wǎng)頁(yè)一般以數(shù)據(jù)庫(kù)技術(shù)為基礎(chǔ)嘁锯,大大降低了網(wǎng)站維護(hù)的工作量宪祥。
?3) 采用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)的網(wǎng)站可以實(shí)現(xiàn)更多的功能,如用戶注冊(cè)家乘、用戶登錄蝗羊、在線調(diào)查、投票仁锯、用戶管理耀找、訂單處理、發(fā)博文等业崖。
?4) 動(dòng)態(tài)網(wǎng)頁(yè)并不是獨(dú)立存在于服務(wù)器上的網(wǎng)頁(yè)文件野芒,當(dāng)用戶請(qǐng)求服務(wù)器上的動(dòng)態(tài)程序時(shí),服務(wù)器解析這些程序并可能通過讀取數(shù)據(jù)庫(kù)來返回一個(gè)完整的網(wǎng)頁(yè)內(nèi)容双炕。
?5) 動(dòng)態(tài)網(wǎng)頁(yè)中的“狞悲?”在搜索引擎的收錄方面存在一定的問題,搜索引擎一般不會(huì)從一個(gè)網(wǎng)站的數(shù)據(jù)庫(kù)中訪問全部網(wǎng)頁(yè)妇斤,或者出于技術(shù)等方面的考慮摇锋,搜索蜘蛛一般不會(huì)去抓取網(wǎng)址中“丹拯?”后面的內(nèi)容,因此在企業(yè)通過搜索引擎進(jìn)行推廣時(shí)乱投,需要針對(duì)采用動(dòng)態(tài)網(wǎng)頁(yè)的網(wǎng)站做一定的技術(shù)處理(偽靜態(tài)技術(shù))咽笼,以便適應(yīng)搜索引擎的抓取要求。

什么是盜鏈:
其它公司網(wǎng)站盜取本地網(wǎng)站鏈接資源,消耗本地網(wǎng)站流量

\color{red}{3)偽靜態(tài)資源:}
?1) 網(wǎng)頁(yè)一般以數(shù)據(jù)庫(kù)技術(shù)為基礎(chǔ)戚炫,大大降低了網(wǎng)站維護(hù)的工作量剑刑。
?2) 采用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)的網(wǎng)站可以實(shí)現(xiàn)更多的功能,如用戶注冊(cè)双肤、用戶登錄施掏、在線調(diào)查、投票茅糜、用戶管理七芭、訂單處理、發(fā)博文等
?3) 網(wǎng)頁(yè)內(nèi)容是固定不變的蔑赘,因此狸驳,容易被搜索引擎收錄(容易被用戶找到)(優(yōu)點(diǎn))

2.網(wǎng)站訪問度量方式:
ip:記錄每一個(gè)用戶源IP地址,進(jìn)行統(tǒng)計(jì)(不同ip訪問ip數(shù)據(jù)累加,統(tǒng)計(jì)方式:awk數(shù)組缩赛,分析日志耙箍,ELK(開源軟件程序),百度統(tǒng)計(jì)等)

pv:記錄統(tǒng)計(jì)頁(yè)面訪問量pageview

uv:記錄獨(dú)立訪客數(shù)

\color{red}{cookie}
cookie的由來:
HTTP協(xié)議是無狀態(tài)的酥馍,無狀態(tài)的意思是每次請(qǐng)求都是獨(dú)立的辩昆,它的執(zhí)行情況和結(jié)果與前面的請(qǐng)求和之后的請(qǐng)求都無直接關(guān)系,它不會(huì)受前面的請(qǐng)求響應(yīng)情況直接影響旨袒,也不會(huì)直接影響后面的請(qǐng)求響應(yīng)情況汁针。
一句有意思的話來描述就是人生只如初見,對(duì)服務(wù)器來說砚尽,每次請(qǐng)求都是全新的施无。
狀態(tài)可以理解為客戶端和服務(wù)器在某次會(huì)話中產(chǎn)生的數(shù)據(jù),那無狀態(tài)的就以為這些數(shù)據(jù)不會(huì)被保留必孤。會(huì)話中產(chǎn)生的數(shù)據(jù)又是我們需要保存的帆精,也就是說要“保持狀態(tài)”。因此cookie就是在這樣一個(gè)場(chǎng)景下誕生隧魄。

什么是cookie:
cookie具體指的是一段小信息卓练,它是服務(wù)器發(fā)送出來存儲(chǔ)在瀏覽器上的一組組鍵值對(duì),下次訪問服務(wù)器時(shí)瀏覽器會(huì)自動(dòng)攜帶這些鍵值對(duì)购啄,以便服務(wù)器提取有用信息襟企。

\color{red}{session}:
session的由來:
cookie雖然在一定程度上解決了“保持狀態(tài)“的需求,但是由于cookie本身最大支持4096字節(jié)狮含,以及cookie本身保存在客戶端顽悼,可能被攔截或竊取曼振,因此就需要有一種新的東西,它能支持更多的字節(jié)蔚龙,并且他保存在服務(wù)器冰评,有較高的安全性。這就是session木羹。

問題來了甲雅,基于http協(xié)議的無狀態(tài)特征,服務(wù)器根本就不知道訪問者是”誰“坑填。那么上述的cookie就起到橋接的作用抛人。

我們可以給每個(gè)客戶端的cookie分配一個(gè)唯一的id,這樣用戶在訪問時(shí)脐瑰,通過cookie妖枚,服務(wù)器就知道來的人是”誰“。然后我們?cè)俑鶕?jù)不同的cookie的id苍在,在服務(wù)器上保存一段時(shí)間的私密資料绝页,如”賬號(hào)密碼“等。

總結(jié)而言:cookie彌補(bǔ)了http無狀態(tài)的不足寂恬,讓服務(wù)器知道來的人是”誰“抒寂,但是cookie以文本的形式保存在本地,自身安全性較差掠剑,所以我們就通過cookie識(shí)別不同的用戶,對(duì)應(yīng)的在session里保存私密的信息以及超過4096字節(jié)的文本郊愧。

ps:cookie以文本格式存儲(chǔ)在瀏覽器上朴译,存儲(chǔ)量有限;而會(huì)話存儲(chǔ)在服務(wù)端属铁,可以無限量存儲(chǔ)多個(gè)變量并且比cookie更安全

3.企業(yè)常用網(wǎng)站web服務(wù)
靜態(tài)web服務(wù): nginx apache Tengine
動(dòng)態(tài)web服務(wù): php(php編寫動(dòng)態(tài)頁(yè)面) tomcat(java編寫動(dòng)態(tài)頁(yè)面) python(框架編寫動(dòng)態(tài)頁(yè)面)

nginx網(wǎng)站服務(wù):
?特點(diǎn):處理高并發(fā)能力眠寿,占用本地服務(wù)器資源比較少(內(nèi)存資源)
?功能:⑴.nginx可以實(shí)現(xiàn)網(wǎng)站web服務(wù)功能
??⑵.nginx可以實(shí)現(xiàn)負(fù)載均衡功能
??⑶.nginx可以實(shí)現(xiàn)數(shù)據(jù)緩存功能
?緩存的作用是用來減緩后端壓力

nginx使用的網(wǎng)絡(luò)模型是epoll
apache使用的網(wǎng)絡(luò)模型是select
epoll與select:
?select,epoll都是IO多路復(fù)用的機(jī)制焦蘑。I/O多路復(fù)用就通過一種機(jī)制盯拱,可以監(jiān)視多個(gè)描述符,一旦某個(gè)描述符就緒(一般是讀就緒或者寫就緒)例嘱,能夠通知程序進(jìn)行相應(yīng)的讀寫操作狡逢。但select,epoll本質(zhì)上都是同步I/O拼卵,因?yàn)樗麄兌夹枰谧x寫事件就緒后自己負(fù)責(zé)進(jìn)行讀寫奢浑,也就是說這個(gè)讀寫過程是阻塞的,而異步I/O則無需自己負(fù)責(zé)進(jìn)行讀寫腋腮,異步I/O的實(shí)現(xiàn)會(huì)負(fù)責(zé)把數(shù)據(jù)從內(nèi)核拷貝到用戶空間雀彼。
一.問題引出
問題的引出壤蚜,當(dāng)需要讀兩個(gè)以上的I/O的時(shí)候,如果使用阻塞式的I/O徊哑,那么可能長(zhǎng)時(shí)間的阻塞在一個(gè)描述符上面袜刷,另外的描述符雖然有數(shù)據(jù)但是不能讀出來,這樣實(shí)時(shí)性不能滿足要求莺丑,大概的解決方案有以下幾種:

1.使用多進(jìn)程或者多線程著蟹,但是這種方法會(huì)造成程序的復(fù)雜,而且對(duì)與進(jìn)程與線程的創(chuàng)建維護(hù)也需要很多的開銷窒盐。(Apache服務(wù)器是用的子進(jìn)程的方式草则,優(yōu)點(diǎn)可以隔離用戶)

2.用一個(gè)進(jìn)程,但是使用非阻塞的I/O讀取數(shù)據(jù)蟹漓,當(dāng)一個(gè)I/O不可讀的時(shí)候立刻返回炕横,檢查下一個(gè)是否可讀,這種形式的循環(huán)為輪詢(polling)葡粒,這種方法比較浪費(fèi)CPU時(shí)間份殿,因?yàn)榇蠖鄶?shù)時(shí)間是不可讀,但是仍花費(fèi)時(shí)間不斷反復(fù)執(zhí)行read系統(tǒng)調(diào)用嗽交。

3.異步I/O(asynchronous I/O)卿嘲,當(dāng)一個(gè)描述符準(zhǔn)備好的時(shí)候用一個(gè)信號(hào)告訴進(jìn)程,但是由于信號(hào)個(gè)數(shù)有限夫壁,多個(gè)描述符時(shí)不適用拾枣。

4.一種較好的方式為I/O多路轉(zhuǎn)接(I/O multiplexing)(貌似也翻譯多路復(fù)用),先構(gòu)造一張有關(guān)描述符的列表(epoll中為隊(duì)列)盒让,然后調(diào)用一個(gè)函數(shù)梅肤,直到這些描述符中的一個(gè)準(zhǔn)備好時(shí)才返回,返回時(shí)告訴進(jìn)程哪些I/O就緒邑茄。select和epoll這兩個(gè)機(jī)制都是多路I/O機(jī)制的解決方案姨蝴,select為POSIX標(biāo)準(zhǔn)中的,而epoll為L(zhǎng)inux所特有的肺缕。

區(qū)別(epoll相對(duì)select優(yōu)點(diǎn))主要有三:
1.select的句柄數(shù)目受限左医,在linux/posix_types.h頭文件有這樣的聲明:#define __FD_SETSIZE 1024 表示select最多同時(shí)監(jiān)聽1024個(gè)fd。而epoll沒有同木,它的限制是最大的打開文件句柄數(shù)目浮梢。

2.epoll的最大好處是不會(huì)隨著FD的數(shù)目增長(zhǎng)而降低效率,在selec中采用輪詢處理彤路,其中的數(shù)據(jù)結(jié)構(gòu)類似一個(gè)數(shù)組的數(shù)據(jù)結(jié)構(gòu)黔寇,而epoll是維護(hù)一個(gè)隊(duì)列,直接看隊(duì)列是不是空就可以了斩萌。epoll只會(huì)對(duì)“活躍”的socket進(jìn)行操作---這是因?yàn)樵趦?nèi)核實(shí)現(xiàn)中epoll是根據(jù)每個(gè)fd上面的callback函數(shù)實(shí)現(xiàn)的缝裤。那么屏轰,只有“活躍”的socket才會(huì)主動(dòng)的去調(diào)用 callback函數(shù)(把這個(gè)句柄加入隊(duì)列),其他idle狀態(tài)句柄則不會(huì)憋飞,在這點(diǎn)上霎苗,epoll實(shí)現(xiàn)了一個(gè)“偽”AIO。但是如果絕大部分的I/O都是“活躍的”榛做,每個(gè)I/O端口使用率很高的話唁盏,epoll效率不一定比select高(可能是要維護(hù)隊(duì)列復(fù)雜)。

3.使用mmap加速內(nèi)核與用戶空間的消息傳遞检眯。無論是select厘擂,poll還是epoll都需要內(nèi)核把FD消息通知給用戶空間,如何避免不必要的內(nèi)存拷貝就很重要锰瘸,在這點(diǎn)上刽严,epoll是通過內(nèi)核于用戶空間mmap同一塊內(nèi)存實(shí)現(xiàn)的。


圖片.png

二避凝、接口
  1)select

1. int select(int maxfdp1舞萄, fd_set *restrict readfds, fd_set *restrict writefds管削, fd_set *restrict exceptfds倒脓, struct timeval *restrict tvptr);

struct timeval{

long tv_sec;

long tv_usec;

}

有三種情況:tvptr == NULL 永遠(yuǎn)等待;tvptr-》tv_sec == 0 && tvptr-》tv_usec == 0 完全不等待含思;不等于0的時(shí)候?yàn)榈却臅r(shí)間崎弃。select的三個(gè)指針都可以為空,這時(shí)候select提供了一種比sleep更精確的定時(shí)器含潘。注意select的第一個(gè)參數(shù)maxfdp1并不是描述符的個(gè)數(shù)饲做,而是最大的描述符加1,一是起限制作用调鬓,防止出錯(cuò),二來可以給內(nèi)核輪詢的時(shí)候提供一個(gè)上屆酌伊,提高效率腾窝。select返回-1表示出錯(cuò),0表示超時(shí)居砖,返回正值是所有的已經(jīng)準(zhǔn)備好的描述符個(gè)數(shù)(同一個(gè)描述符如果讀和寫都準(zhǔn)備好虹脯,對(duì)結(jié)果影響是+2)。

2.int FD_ISSET(int fd奏候, fd_set *fdset); fd在描述符集合中非0循集,否則返回0

3.int FD_CLR(int fd, fd_set *fd_set); int FD_SET(int fd蔗草, fd_set *fdset) ;int FD_ZERO(fd_set *fdset);

用一段linux 中man里的話“FD_ZERO() clears a set.FD_SET() and FD_CLR() respectively add and remove a given file descriptor from a set. FD_ISSET() tests to see if a file descriptor is part of the set; this is useful after select() returns.”這幾個(gè)函數(shù)與描述符的0和1沒關(guān)系咒彤,只是添加刪除檢測(cè)描述符是否在set中疆柔。
  2)epoll

1.int epoll_create(int size);

創(chuàng)建一個(gè)epoll的句柄,size用來告訴內(nèi)核這個(gè)監(jiān)聽的數(shù)目一共有多大镶柱。這個(gè)參數(shù)不同于select()中的第一個(gè)參數(shù)旷档,給出最大監(jiān)聽的fd+1的值。需要注意的是歇拆,當(dāng)創(chuàng)建好epoll句柄后鞋屈,它就是會(huì)占用一個(gè)fd值,在linux下如果查看/proc/進(jìn)程id/fd/故觅,是能夠看到這個(gè)fd的厂庇,所以在使用完epoll后,必須調(diào)用close()關(guān)閉输吏,否則可能導(dǎo)致fd被耗盡权旷。

2. int epoll_ctl(int epfd, int op评也, int fd炼杖, struct epoll_event *event);

epoll的事件注冊(cè)函數(shù),它不同與select()是在監(jiān)聽事件時(shí)告訴內(nèi)核要監(jiān)聽什么類型的事件盗迟,而是在這里先注冊(cè)要監(jiān)聽的事件類型坤邪。第一個(gè)參數(shù)是epoll_create()的返回值,第二個(gè)參數(shù)表示動(dòng)作罚缕,用三個(gè)宏來表示:

EPOLL_CTL_ADD:注冊(cè)新的fd到epfd中艇纺;

EPOLL_CTL_MOD:修改已經(jīng)注冊(cè)的fd的監(jiān)聽事件;

EPOLL_CTL_DEL:從epfd中刪除一個(gè)fd邮弹;

第三個(gè)參數(shù)是需要監(jiān)聽的fd黔衡,第四個(gè)參數(shù)是告訴內(nèi)核需要監(jiān)聽什么事,struct epoll_event結(jié)構(gòu)如下:

struct epoll_event {

__uint32_t events; /* Epoll events */

epoll_data_t data; /* User data variable */

};

events可以是以下幾個(gè)宏的集合:

EPOLLIN :表示對(duì)應(yīng)的文件描述符可以讀(包括對(duì)端SOCKET正常關(guān)閉)腌乡;

EPOLLOUT:表示對(duì)應(yīng)的文件描述符可以寫盟劫;

EPOLLPRI:表示對(duì)應(yīng)的文件描述符有緊急的數(shù)據(jù)可讀(這里應(yīng)該表示有帶外數(shù)據(jù)到來);

EPOLLERR:表示對(duì)應(yīng)的文件描述符發(fā)生錯(cuò)誤与纽;

EPOLLHUP:表示對(duì)應(yīng)的文件描述符被掛斷侣签;

EPOLLET: 將EPOLL設(shè)為邊緣觸發(fā)(Edge Triggered)模式,這是相對(duì)于水平觸發(fā)(Level Triggered)來說的急迂。

EPOLLONESHOT:只監(jiān)聽一次事件影所,當(dāng)監(jiān)聽完這次事件之后,如果還需要繼續(xù)監(jiān)聽這個(gè)socket的話僚碎,需要再次把這個(gè)socket加入到EPOLL隊(duì)列里

關(guān)于epoll工作模式ET猴娩,LT

LT(level triggered)是缺省的工作方式,并且同時(shí)支持block和no-block socket.在這種做法中,內(nèi)核告訴你一個(gè)文件描述符是否就緒了卷中,然后你可以對(duì)這個(gè)就緒的fd進(jìn)行IO操作矛双。如果你不作任何操作,內(nèi)核還是會(huì)繼續(xù)通知你的仓坞,所以背零,這種模式編程出錯(cuò)誤可能性要小一點(diǎn)。傳統(tǒng)的select/poll都是這種模型的代表.

ET (edge-triggered)是高速工作方式无埃,只支持no-block socket徙瓶。在這種模式下,當(dāng)描述符從未就緒變?yōu)榫途w時(shí)嫉称,內(nèi)核通過epoll告訴你侦镇。然后它會(huì)假設(shè)你知道文件描述符已經(jīng)就緒,并且不會(huì)再為那個(gè)文件描述符發(fā)送更多的就緒通知织阅,直到你做了某些操作導(dǎo)致那個(gè)文件描述符不再為就緒狀態(tài)了壳繁,但是請(qǐng)注意,如果一直不對(duì)這個(gè)fd作IO操作(從而導(dǎo)致它再次變成未就緒)荔棉,內(nèi)核不會(huì)發(fā)送更多的通知(only once)

3. int epoll_wait(int epfd闹炉, struct epoll_event * events, int maxevents润樱, int timeout)

等待事件的產(chǎn)生渣触,類似于select()調(diào)用。參數(shù)events用來從內(nèi)核得到事件的集合壹若,maxevents告之內(nèi)核這個(gè)events有多大嗅钻,這個(gè)maxevents的值不能大于創(chuàng)建epoll_create()時(shí)的size,參數(shù)timeout是超時(shí)時(shí)間(毫秒店展,0會(huì)立即返回养篓,-1永久阻塞)。該函數(shù)返回需要處理的事件數(shù)目赂蕴,如返回0表示已超時(shí)柳弄。


圖片.png

簡(jiǎn)單來說:
epoll:
宿舍管理員: 查詢?nèi)藛T登記表
幼兒園阿姨: 需要上廁所,站到一個(gè)圈里

seletc:
宿舍管理員: 一個(gè)一個(gè)房間去找(遍歷)
幼兒園阿姨: 一個(gè)一個(gè)小朋友去問
4.nginx軟件部署安裝過程:

  方式一:直接yum安裝nginx
   yum install -y nginx  ------歷史穩(wěn)定版本

  方式二:官方源yum安裝nginx
    更新nginx官方源:
    vim /etc/yum.repo.d/nginx.repo 
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key

    yum install -y nginx    ----最新穩(wěn)定版本

  方式三:利用編譯方式安裝軟件
    第一個(gè)里程:下載并解壓源碼包
      wget http://nginx.org/download/nginx-1.16.1.tar.gz
      tar xf nginx-1.16.1.tar.gz
    第二個(gè)里程:解決軟件依賴關(guān)系
      yum install -y  pcre-devel openssl-devel
      pcre:    兼容perl語言正則表達(dá)式
      openssl: 可以實(shí)現(xiàn)HTTPS訪問功能
    第三個(gè)里程:編譯安裝軟件
      第一個(gè)步驟:進(jìn)入源碼包目錄,進(jìn)行配置過程
      cd nginx-1.16.1
      useradd www -M -s /sbin/nologin
      ./configure --prefix=/app/nginx-1.16.1 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
        --prefix=PATH     --- 指定軟件程序目錄
        --sbin-path=PATH  --- 指定軟件命令文件存儲(chǔ)路徑
        --conf-path=PATH  --- 指定軟件配置文件保存路徑
        --error-log-path=PATH  --- 指定軟件日志文件保存路徑
        --user=USER       --- 指定nginx服務(wù)worker進(jìn)程管理用戶
        --group=GROUP     --- 指定nginx服務(wù)worker進(jìn)程管理用戶組
        --with-http_ssl_module           --- 讓nginx開啟HTTPS功能
        --with-http_stub_status_module
       第二個(gè)步驟: 編譯過程==翻譯過程
         nginx-1.16.1目錄下
     make
    
       第三個(gè)步驟: 編譯安裝
         make install

二三步驟可以合并執(zhí)行   make && make install
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末概说,一起剝皮案震驚了整個(gè)濱河市碧注,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌席怪,老刑警劉巖应闯,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纤控,死亡現(xiàn)場(chǎng)離奇詭異挂捻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)船万,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門刻撒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骨田,“玉大人,你說我怎么就攤上這事声怔√停” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵醋火,是天一觀的道長(zhǎng)悠汽。 經(jīng)常有香客問我,道長(zhǎng)芥驳,這世上最難降的妖魔是什么柿冲? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮兆旬,結(jié)果婚禮上假抄,老公的妹妹穿的比我還像新娘。我一直安慰自己丽猬,他們只是感情好宿饱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脚祟,像睡著了一般谬以。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愚铡,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天蛉签,我揣著相機(jī)與錄音,去河邊找鬼沥寥。 笑死碍舍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的邑雅。 我是一名探鬼主播片橡,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼淮野!你這毒婦竟也來了捧书?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤骤星,失蹤者是張志新(化名)和其女友劉穎经瓷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洞难,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舆吮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片色冀。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡潭袱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锋恬,到底是詐尸還是另有隱情屯换,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布与学,位于F島的核電站彤悔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏索守。R本人自食惡果不足惜蜗巧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕾盯。 院中可真熱鬧幕屹,春花似錦、人聲如沸级遭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挫鸽。三九已至说敏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丢郊,已是汗流浹背盔沫。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枫匾,地道東北人架诞。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像干茉,于是被迫代替她去往敵國(guó)和親谴忧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1角虫、基本知識(shí) epoll是在2.6內(nèi)核中提出的狂巢,是之前的select和poll的增強(qiáng)版本茬故。相對(duì)于select和po...
    Daniel521閱讀 655評(píng)論 0 1
  • 本文摘抄自linux基礎(chǔ)編程 IO概念 Linux的內(nèi)核將所有外部設(shè)備都可以看做一個(gè)文件來操作挑宠。那么我們對(duì)與外部設(shè)...
    VD2012閱讀 1,021評(píng)論 0 2
  • 同步IO和異步IO亮垫,阻塞IO和非阻塞IO分別是什么,到底有什么區(qū)別伟骨?不同的人在不同的上下文下給出的答案是不同的。所...
    Daniel521閱讀 1,377評(píng)論 0 6
  • I/O復(fù)用基本概念 I/O多路復(fù)用技術(shù)通過把多個(gè)I/O的阻塞復(fù)用到同一個(gè)select的阻塞上燃异,從而使得系統(tǒng)在單線程...
    Ycres閱讀 957評(píng)論 0 0
  • 常用操作以及概念 求助 –help 指令的基本用法與選項(xiàng)介紹携狭。 man man 是 manual 的縮寫,將指令的...
    Fellers閱讀 432評(píng)論 0 3