溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux中并發(fā)服務(wù)器的實(shí)現(xiàn)模式有哪些

發(fā)布時間:2021-07-16 14:37:39 來源:億速云 閱讀:121 作者:小新 欄目:服務(wù)器

這篇文章主要介紹了Linux中并發(fā)服務(wù)器的實(shí)現(xiàn)模式有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1>單線程或者單進(jìn)程

相當(dāng)于短鏈接,當(dāng)accept之后,就開始數(shù)據(jù)的接收和數(shù)據(jù)的發(fā)送,不接受新的連接,即一個server,一個client

不存在并發(fā)。

2>循環(huán)服務(wù)器和并發(fā)服務(wù)器

1.循環(huán)服務(wù)器:一個server只能一次只能接收一個client,當(dāng)當(dāng)前client結(jié)束訪問之后才能進(jìn)行下一個client的連接。

2.并發(fā)服務(wù)器:一個server同一時間可以響應(yīng)很多客戶端的訪問。

3>select+多線程模式

并發(fā)服務(wù)器的三種實(shí)現(xiàn)方式

1.多進(jìn)程并發(fā)服務(wù)器

是指TCP連接后,每一個客戶機(jī)的請求并不由服務(wù)器直接處理,而是由服務(wù)器創(chuàng)建一個子進(jìn)程來處理

2.多線程并發(fā)服務(wù)器

多進(jìn)程服務(wù)器是對多進(jìn)程的服務(wù)器的改進(jìn),由于多進(jìn)程服務(wù)器在創(chuàng)建進(jìn)程時要消耗較大的系統(tǒng)資源,所以用線程來取代進(jìn)程,這樣服務(wù)處理程序可以較快的創(chuàng)建。據(jù)統(tǒng)計,創(chuàng)建線程于創(chuàng)建進(jìn)程要快10100倍,所以又把線程稱為“輕量級”進(jìn)程。進(jìn)程與進(jìn)程不同的是:一個進(jìn)程內(nèi)所有線程共享相同的全局內(nèi)存,全局變量等信息。

是指TCP連接后,每一個客戶機(jī)的請求并不由服務(wù)器直接處理,而是由服務(wù)器創(chuàng)

3.多路復(fù)用I/O

I/O是為了解決線程/進(jìn)程阻塞在那個I/O調(diào)用中,常用select或者pool

4>epoll

在linux2.6之后有的epoll,實(shí)用的方法是:用一個線程專門進(jìn)行端口的監(jiān)聽,accept接收到連接的時候,把連接設(shè)置成非阻塞方式,把epoll時間設(shè)置成邊緣觸發(fā)方式,加入epoll管理。接收線程阻塞在epoll的等待事件函數(shù)。另外一個線程專門用于數(shù)據(jù)發(fā)送。

注意:

1.如果把epoll設(shè)置成水平觸發(fā)效率就下降采用select的水平。

2.Unix系統(tǒng)下有單個進(jìn)程打開的描述符的限制,還有系統(tǒng)內(nèi)打開的描述符的數(shù)目限制。系統(tǒng)內(nèi)打開的描述符數(shù)目限制由軟硬鏈接限制兩個。硬連接是根據(jù)機(jī)器的配置而不同。軟連接限制可以修改但是必須小于硬限制。

應(yīng)用:

Linux下大規(guī)模的TCP并發(fā)。

當(dāng)前并發(fā)還有其它的方式。比如線程池。進(jìn)程池等,每種模式都有他的優(yōu)缺點(diǎn),如果大規(guī)模的并發(fā),采用epoll會更好。

epoll的時間設(shè)置有邊緣觸發(fā)方式和水平觸發(fā)方式

1.水平觸發(fā)方式:

如果文件描述符已經(jīng)就緒可以非阻塞的執(zhí)行IO操作了,此時會觸發(fā)通知。允許在任意時候重復(fù)檢測IO的狀態(tài),沒有必要每次描述符就緒后盡可能多的執(zhí)行IO,select,poll就屬于水平觸發(fā)事件。

只要滿足要求就觸發(fā)一個事件。

2.邊緣觸發(fā)方式:

如果文件描述符自上次狀態(tài)改變后有新的IO活動到來,此時會觸發(fā)通知。在收到一個IO事件通知盡可能多的執(zhí)行IO操作,因為如果再一次通知中沒有執(zhí)行完IO那么就需要等到下一次新的IO活動到來才能獲取就緒的描述符。信號驅(qū)動式IO就屬于邊緣觸發(fā)。

每當(dāng)狀態(tài)改變就觸發(fā)一個事件。

eg:現(xiàn)在有一個1000個字節(jié)的報文,無論是水平觸發(fā)還是邊緣觸發(fā),都會發(fā)送一個只讀通知,當(dāng)收到了100個字節(jié)后,水平觸發(fā)因為還有字節(jié)沒有讀完,就會發(fā)送一個只讀通知,但是邊緣觸發(fā)會一直保持等待的通知,等待接下來的報文的到來,直到邊緣觸發(fā)返回EWOULDBLOCK就摒棄這個socket。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Linux中并發(fā)服務(wù)器的實(shí)現(xiàn)模式有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI