多進(jìn)程服務(wù)器

一、多進(jìn)程服務(wù)器

  • read()阻塞的話就是【單客戶端】響應(yīng)的服務(wù)器
  • 多進(jìn)程服務(wù)器是【多客戶端響應(yīng)的服務(wù)器】

之所以需要多客戶端響應(yīng)的原因是——

三次握手的時(shí)候是阻塞在accept()那里菜谣,然后accept()返回成功后榕订,到read()那里阻塞

這時(shí)候如果來一個(gè)新連接况鸣,因?yàn)檫€是阻塞在read()中(一直在等待),而不在accept()中(所以三次握手不能及時(shí)的響應(yīng)),所以【新連接請(qǐng)求】會(huì)緩存在accept隊(duì)列中

- 如果將readaccept都設(shè)置成非阻塞的,那么就是【非阻塞】輪詢模型牲距,這樣的壞處:每來一個(gè)客戶端鏈接,都有一個(gè)read()钥庇,這樣后面會(huì)有越來越多的read()(也會(huì)有越來越多的【套接字】)牍鞠。而且如果沒數(shù)據(jù)讀,會(huì)導(dǎo)致CPU空轉(zhuǎn)(CPU使用率很高)

一评姨、多進(jìn)程服務(wù)器

多進(jìn)程模型难述,在accept()和read()中間打斷,加一個(gè)fork()吐句,fork()出來的子進(jìn)程來讀數(shù)據(jù)胁后,再關(guān)閉子進(jìn)程的fd

父進(jìn)程則是回到accept()那里繼續(xù)監(jiān)聽,最后關(guān)閉父進(jìn)程的fd

父進(jìn)程阻塞在accept()那里嗦枢,子進(jìn)程會(huì)阻塞在read()那里攀芯,二者互相不影響,從而實(shí)現(xiàn)多進(jìn)程并發(fā)

  • fork()之后净宵,套接字的引用計(jì)數(shù)會(huì)加1敲才,但是file結(jié)構(gòu)體沒有復(fù)制過來裹纳,只是【復(fù)制過來的指針】也指向了file結(jié)構(gòu)體,文件描述符表復(fù)制了過來

  • 子進(jìn)程的clntfd和父進(jìn)程的clntfd指向的是同一個(gè)套接字紧武,套接字的引用計(jì)數(shù)加1

exit(-1)退出進(jìn)程的函數(shù)
父進(jìn)程則是continue回到accept()繼續(xù)阻塞

  • pid為-1意味著創(chuàng)建進(jìn)程失敗

如果在連接過程中剃氧,如果客戶端先關(guān)閉,那么客戶端的進(jìn)程就會(huì)變成僵尸進(jìn)程阻星,所以要處理僵尸進(jìn)程

  • 如何回收進(jìn)程——wait()【阻塞等待】朋鞍,waitpid()【非阻塞接收】
  • 多進(jìn)程服務(wù)器模型中的accept()read()是【阻塞的】,所以不能使用wait()阻塞等待

二妥箕、使用信號(hào)回收進(jìn)程

使用信號(hào)的方式回收滥酥,因?yàn)?code>父進(jìn)程一直阻塞在accept()那里等待連接,所以均不能設(shè)置成阻塞等待和非阻塞輪詢畦幢,因此使用信號(hào)

  • SIGCHID(子進(jìn)程退出的時(shí)候坎吻,會(huì)給父進(jìn)程發(fā)送一個(gè)信號(hào)SIGCHID)
  • sig_handler()使用waitpid()來非阻塞的處理信號(hào)

因?yàn)榭赡苡?code>多個(gè)子進(jìn)程同時(shí)退出,所以while()來保證可以接收到所有子進(jìn)程退出的信號(hào)

三宇葱、關(guān)閉多余的fd

因?yàn)閒ork()是在accept()后面瘦真,所以fork()之前就已經(jīng)有2個(gè)fd了——lstnfd和clntfd,但是子進(jìn)程又用不到lstnfd黍瞧,所以子進(jìn)程中需要關(guān)閉lstnfd

如果子進(jìn)程這里不關(guān)閉的話诸尽,那么因?yàn)閘stnfd對(duì)應(yīng)套接字的引用計(jì)數(shù)是2,所以父進(jìn)程要關(guān)閉2次fd

父進(jìn)程也要關(guān)閉clntfd印颤,不然子進(jìn)程的close(clntfd)并沒有真正的關(guān)掉您机,只是引用計(jì)數(shù)-1(不關(guān)閉就意味著不釋放資源,會(huì)導(dǎo)致內(nèi)存泄露

  • 如果服務(wù)器要把數(shù)據(jù)寫回去年局,那么就是在子進(jìn)程中讀完數(shù)據(jù)(read)后通過write(clntfd, buf)將數(shù)據(jù)寫回去

  • 因?yàn)?code>write()是在子進(jìn)程中际看,如果寫的時(shí)候讀端關(guān)閉了,就會(huì)有一個(gè)信號(hào)SIGPIPE(管道破裂)發(fā)送給子進(jìn)程某宪,可以默認(rèn)不處理仿村,也可以處理

ulimit -a 可以查看總共可以創(chuàng)建的進(jìn)程數(shù)量

  • 可以去系統(tǒng)改這個(gè)數(shù)量锐朴,也要考慮物理內(nèi)存的大小兴喂,如果物理內(nèi)存不夠,那么就會(huì)將一部分的進(jìn)程交換到交換分區(qū)中(比較慢)焚志,再需要使用的話則是從交換分區(qū)中恢復(fù)

  • 如果不想去交換分區(qū)衣迷,則需要設(shè)置一下【粘住位】

fork()后子進(jìn)程和父進(jìn)程【接收到的數(shù)據(jù)】不一樣,所以會(huì)重新申請(qǐng)物理內(nèi)存(內(nèi)存頁)比如buf就是不一樣的酱酬,原則是【讀時(shí)共享壶谒,寫時(shí)復(fù)制】`

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膳沽,隨后出現(xiàn)的幾起案子汗菜,更是在濱河造成了極大的恐慌让禀,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陨界,死亡現(xiàn)場(chǎng)離奇詭異巡揍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)菌瘪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門腮敌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人俏扩,你說我怎么就攤上這事糜工。” “怎么了录淡?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵捌木,是天一觀的道長。 經(jīng)常有香客問我嫉戚,道長钮莲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任彼水,我火速辦了婚禮崔拥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凤覆。我一直安慰自己链瓦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布盯桦。 她就那樣靜靜地躺著慈俯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拥峦。 梳的紋絲不亂的頭發(fā)上贴膘,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音略号,去河邊找鬼刑峡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛玄柠,可吹牛的內(nèi)容都是我干的突梦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羽利,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宫患!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起这弧,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤娃闲,失蹤者是張志新(化名)和其女友劉穎虚汛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皇帮,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泽疆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玲献。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殉疼。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捌年,靈堂內(nèi)的尸體忽然破棺而出瓢娜,到底是詐尸還是另有隱情,我是刑警寧澤礼预,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布眠砾,位于F島的核電站,受9級(jí)特大地震影響托酸,放射性物質(zhì)發(fā)生泄漏褒颈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一励堡、第九天 我趴在偏房一處隱蔽的房頂上張望谷丸。 院中可真熱鬧,春花似錦应结、人聲如沸刨疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揩慕。三九已至,卻和暖如春扮休,著一層夾襖步出監(jiān)牢的瞬間迎卤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工玷坠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躬贡,地道東北人弊攘。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓愈污,卻偏偏與公主長得像回季,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秕重,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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