Server Iocp 的那些煩惱

2021-06-18 11:03:16 字數 1013 閱讀 5524

自g-socket0.88版開源以來,得到很多朋友的支援。從1.0版本至2.0之前,核心幾乎沒有改變,經過多處的應用其穩定性和效率表現是相當不錯的。這幾年的經驗總結成一句話:伺服器程式不是有了乙個好的iocp通訊元件就能玩轉的。

很多情況下,我們都會遇到下面的問題:

1 致命的鎖

又死鎖了,怎樣高效而又不死鎖?是不是使用無鎖演算法就能解決?

2 無序的資料

為什麼伺服器接收的資料報會丟包?為什麼客戶端收到的資料亂序了?

3 野指標

別說多執行緒了,我都單執行緒了,為什麼還有野指標?

4 低效的io

為什麼cpu使用率這麼低,伺服器怎麼還這麼卡?

5 惡劣的網路環境

為什麼客戶端都已經斷線了,伺服器端的客戶鏈結數量不是0?

6 該死的客戶端

我伺服器都是iocp了,怎麼客戶端接收的效率還這麼低?

7 巨大資料積壓

為什麼通訊模組有這麼大的資料積壓耗費這麼多的記憶體?

8 莫名的異常

不能實時調式不能24小時監視,怎麼分析這些服務程式異常?

下面解決問題的提示點,有些只有「資深」才能發現了:

1不是使用無鎖演算法就能解決死鎖問題,而是良好的執行緒架構體系。

2 多線性並不是完全的多執行緒,它是針對多個連線而言,不是針對單個的連線物件,起碼在粘包處理和資料傳送這方面。

3 複雜的服務端程式有很多佇列,必須要保證所有網路和使用者請求等事件能被有序(按發生的事件先後順序)被處理!

4 你是不是在邏輯執行緒裡面直接io操作了?

5 要有應用層面的心跳包,不要完全信任socket底層的下的心跳機制。

6 你是不是在客戶端使用了window message mode的通訊元件了,而且在訊息事件裡面解密處理資料了?

7 但凡是非同步通訊的都會有copy和list,要麼是接收快處理慢,要麼是傳送快客戶端接收慢,或者客戶連線的網路環境惡劣,導致資料佇列積壓,也就是生產和消費不平衡。

8 除了日誌,還是日誌,乙個再牛x的程式設計師,也要寫完善的日誌體系。

redhat的那些煩惱事情

1.在一般使用者下執行sudo命令提示llhtiger is not in the sudoers file.this incident will be reported.原因 redhat並沒有把任何root使用者之外的使用者預設的新增到sudoers之中,我們只要把自己的使用者新增到sudoer...

畢業的煩惱

一晃就要畢業了,四年的大學生活也就要結束了 都不知道自己在大學裡面幹了些什麼,只是和別人一樣這麼的過來了。夏天到了,天特別的熱,雖然是5月份,可是月底杭州的氣溫還是比較熬人的。不過最熬人的還是蚊子。好久不寫這裡的blog了,有好多的原因 懶惰了 在公司實習而沒能有太多餘的時間 對於把高深的技術和乙個...

人生的煩惱

人的一生一直有著不同的煩惱 5歲之前想上學,因為覺得上學很好玩,巴不得馬上就能上學 等上了學,發現考試很辛苦,上學時都沒有時間玩,還要早起,午睡時間不能太久,因為怕遲到,於是就盼著能早點畢業,找工作 等找到了工作,又發現有時工作很挺枯燥的,還有買房的巨大壓力,同時也到了要結婚的年齡,發現找妻子時,發...