MEMCACHED(2) 網路執行緒模式

來源:互聯網
上載者:User

1  MEMCACHED的網路執行緒模式結構和之前公司的網遊伺服器底層很相似。

首先,主線程採用非阻塞ACCEPT,它也只幹這一件事情,將新串連按照RR輪轉,投遞給一個背景工作執行緒;

投遞的方法稍有蹊蹺,將新串連PUSH到選定的背景工作執行緒的CQ隊列中,該隊列是安全執行緒的。

之後主線程往該背景工作執行緒所建立的PIPE中寫入一個位元組,藉此喚醒背景工作執行緒,以處理新串連;

因為背景工作執行緒在啟動之初,就建立了PIPE,並用EPOLL監視它的可讀條件。

PS:該PIPE可以考慮用eventfd來替代,表現一樣。

另外該CQ隊列可以考慮作成LOCK_FREE的;不過也沒太大必要,因為這裡遠遠不是效能熱點。

 

2 工作者線程將邏輯和IO揉和在一起了。

它監視網路事件,有資料到達,則進行解析並響應。

整個運作過程在drive_machine中實現。

注意conn_new_cmd分支,為了防止餓死,在一條串連上,最多處理50個請求,必須讓出CPU。

假如還有請求沒有處理完,但是資料已經被應用程式recv到了應用緩衝區;同時用戶端在等待結果,並

不再發資料,那麼,該串連將進入epoll_wait死等。

為了防止這樣的情況,MEMCACHED採用了一個小伎倆:

臨時為該串連註冊OUT事件,那麼epoll_wait將返回,重新進入conn_new_cmd分支,處理餘下的請求。

直到所有請求都被處理後,才會取消OUT事件的監視。(在conn_waiting分支中取消的)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.