c 網路程式設計中的兩種資料報的處理方式,哪種更好呢?

時間 2021-06-06 21:28:08

1樓:Nov 23

1.這種相當於單執行緒非同步事件處理,accept,recv,send都在主線程了,有乙個資料報的處理很耗時就會耽誤其它的事件處理了。

2.把資料報的處理放到執行緒池中去處理,確實把耗時的業務踢出去了,但是主線程和執行緒池中間需要乙個資料緩衝,主線程做生產者,執行緒池做消費者,那麼這個資料緩衝需要加鎖。

3.我們可以把第一種方法優化一下,類似Nginx,多程序的玩法,在"子程序池"中非同步事件處理,可以通過提高子程序數量提高這種業務有耗時的總體的資料處理量,同時資料接受和資料處理都在一起,不需要經過資料緩衝有加鎖限制。當然可以進一步優化,用多程序多協程模型,避免非同步事件到處跳思維容易斷。

2樓:裴浩

基本上不會是第1種,因為你無法判斷是否耗時。

這個過程基本上都會抽象成生產者消費者模式,訊息佇列起到中介的作用。消費者不一定是不斷地來檢視,你說的這種是所謂的pull模式,消費者也可以是push模式,當然,push模式對消費速度慢的消費者不友好,可能造成網路阻塞。

至於具體怎麼生產/消費的細節,涉及到可用性/容災等等,又是另乙個話題了。

OSI七層模型中,每一層的資料報都是誰生成和解包的?

那麼請問在這過程中每層資料報都是由誰生成的?你寫了一封情書給班花,我問你,情書是誰寫的?封裝過程 OSI第7層 你那信紙寫了情書 OSI第4層 你用UDP傳輸 對方不給你回覆確定 OSI第3層 你讓同學傳給班花 OSI第2層 你用中文寫的情書 OSI第1層 你用的是信紙 所以你的問題,每層資料報就是...

C 中類的資料成員(data member)能出現未初始化(uninitialized)的狀態嗎?

1.如果在乙個函式類定義,那麼在這兩個類裡的資料成員都未初始化,都是不確定的值。如果是在全域性空間定義,那built in type就是預設值,類就是預設構造的。你可以自己列印出來看看 2.是不是 class type 在進行預設初始化的時候遞迴呼叫父類的建構函式,而且類中的資料成員也按照規則進行初...

現實的網路交易糾紛中涉及的電子資料證據中應如何保全?

真相小秘書 電子證據保全是證據保全的一種,也應當遵循證據保全的基本原則,但是由於電子證據的特殊屬性,其保全又具有獨特之處。法律上要求的證據必須具備真實性,而鑑於電子證據的脆弱性,極易被破壞,其作為證據是否具有真實性和完整性,可以通過證據保全的途徑來解決。電子證據的保全應當遵循以下幾個原則 一 合法性...