漲知識了

這篇文章想寫的是,在各種場合里學(xué)到的厢洞,聽到了一些新東西仇让,新名詞典奉。或者是別人很懂丧叽,但是對于我來說是新接觸的東西卫玖。打算把他們記在這里。

1. 驚群效應(yīng)

最常見的例子就是對于socket描述符的accept操作踊淳,當(dāng)多個用戶進(jìn)程/線程監(jiān)聽在同一個端口上時假瞬,由于實際只可能accept一次,因此就會產(chǎn)生驚群現(xiàn)象迂尝。

也就是說脱茉,多個子進(jìn)程都會阻塞在accept函數(shù)那邊,然后一個鏈接過來垄开,所有的子進(jìn)程調(diào)用的accpet都返回了琴许。但是只有其中的一個是返回成功的。其他的都是-1溉躲。

這個問題是一個古老的問題榜田,但目前的內(nèi)核版本已經(jīng)修復(fù)了這個問題,

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int listenfd;
    pid_t parentid, childid;
    struct sockaddr_in servaddr;
    int forknum = 10;
    short port = 9527;

    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(port);

    listenfd = socket(AF_INET, SOCK_STREAM, 0);
    int res = bind(listenfd, (sockaddr *)&servaddr, sizeof(sockaddr_in));
    if (0 == res)
        printf("server bind success, port:%d\n", port);
    else {
        printf("server bind fail!\n");
        exit(-1);
    }
    res = listen(listenfd, 100);
    if (0 == res)
        printf("server listen success!\n");
    else {
        printf("server listen fail!\n");
        exit(-1);
    }

    parentid = getpid();
    //創(chuàng)建10個子進(jìn)程
    for (int i=0; i<forknum; ++i) {
        if (getpid() == parentid) {
            childid = fork();
            if (0 == childid)
                printf("the parentid is %d, chlidid is %d\n", getppid(), getpid());
        }
    }

    //10個子進(jìn)程都在accept锻梳,但是如果一個連接來了
    //10個子進(jìn)程都會一但有客戶端連接箭券,所有進(jìn)程的accept()都會返回,
    //但是只有一個進(jìn)程會accept成功疑枯,就是驚群辩块。
    //but linux 2.6 內(nèi)核 解決了這個問題
    for (; ;) {
        int connfd = accept(listenfd, NULL, NULL);
        if (connfd != -1)
            printf("the pid is %d, connfd is %d\n", getpid(), connfd);
    }
}

輸出結(jié)果: (沒有出現(xiàn)驚群效應(yīng))


linux 是如何解決的:
1.Linux2.6在內(nèi)核級別讓accept成為原子操作,如果多個進(jìn)程同時阻塞在accept上神汹,每次僅喚醒等待隊列的第一個進(jìn)程從accept返回并拿到用戶連接庆捺。

2.問題是,在實際生產(chǎn)環(huán)境中屁魏,通常是先用select/epoll來監(jiān)聽listen_fd是否有連接過來滔以,再調(diào)用accept,也就是說驚群點從accept提前到epoll上了氓拼。

3.Nginx的解決方案是你画,設(shè)置一把全局accpet鎖,每個進(jìn)程先去競爭這把鎖桃漾,拿到鎖的進(jìn)程才向epoll中注冊listen_fd事件坏匪。

參考:
https://blog.csdn.net/tuantuanls/article/details/41205739
https://www.zhihu.com/question/22756773

2. 從匯編的角度理解引用
int x = 1;  
int y = 2;  
int &b = x;  

也就是說,b里面存放的是x的地址撬统。C++中引用是編譯器通過指針實現(xiàn)的适滓,但這個實現(xiàn)在語言層面對程序員做了透明化處理。

參考:
https://blog.csdn.net/wanwenweifly4/article/details/6739687

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恋追,一起剝皮案震驚了整個濱河市凭迹,隨后出現(xiàn)的幾起案子罚屋,更是在濱河造成了極大的恐慌,老刑警劉巖嗅绸,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脾猛,死亡現(xiàn)場離奇詭異,居然都是意外死亡鱼鸠,警方通過查閱死者的電腦和手機猛拴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚀狰,“玉大人愉昆,你說我怎么就攤上這事≡旃” “怎么了撼唾?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵廉邑,是天一觀的道長哥蔚。 經(jīng)常有香客問我,道長蛛蒙,這世上最難降的妖魔是什么糙箍? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮牵祟,結(jié)果婚禮上深夯,老公的妹妹穿的比我還像新娘。我一直安慰自己诺苹,他們只是感情好咕晋,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著收奔,像睡著了一般掌呜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坪哄,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天质蕉,我揣著相機與錄音,去河邊找鬼翩肌。 笑死模暗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的念祭。 我是一名探鬼主播兑宇,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粱坤!你這毒婦竟也來了隶糕?” 一聲冷哼從身側(cè)響起祝钢,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎若厚,沒想到半個月后拦英,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡测秸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年疤估,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎冯。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡铃拇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沈撞,到底是詐尸還是另有隱情慷荔,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布缠俺,位于F島的核電站显晶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏壹士。R本人自食惡果不足惜磷雇,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躏救。 院中可真熱鬧唯笙,春花似錦、人聲如沸盒使。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽少办。三九已至苞慢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凡泣,已是汗流浹背枉疼。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鞋拟,地道東北人骂维。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像贺纲,于是被迫代替她去往敵國和親航闺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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