1. 程式人生 > 其它 >2021.08.04筆記

2021.08.04筆記

epoll水平觸發邊緣觸發

水平觸發LT:可以理解為一直就緒,跟鍵盤一直按著一樣,一直按著一個鍵就會一直輸出該鍵的鍵值,LT模式只要是緩衝區沒有滿就會一直寫,只要是緩衝區不為空就會一直讀

邊緣觸發ET:可理解為單次觸發,接收到資料只讀一次,緩衝區裡有資料,就寫一次。

LT的處理過程:
. accept一個連線,新增到epoll中監聽EPOLLIN事件
. 當EPOLLIN事件到達時,read fd中的資料並處理
. 當需要寫出資料時,把資料write到fd中;如果資料較大,無法一次性寫出,那麼在epoll中監聽EPOLLOUT事件
. 當EPOLLOUT事件到達時,繼續把資料write到fd中;如果資料寫出完畢,那麼在epoll中關閉EPOLLOUT事件

ET的處理過程:
. accept一個一個連線,新增到epoll中監聽EPOLLIN|EPOLLOUT事件
. 當EPOLLIN事件到達時,read fd中的資料並處理,read需要一直讀,直到返回EAGAIN為止
. 當需要寫出資料時,把資料write到fd中,直到資料全部寫完,或者write返回EAGAIN
. 當EPOLLOUT事件到達時,繼續把資料write到fd中,直到資料全部寫完,或者write返回EAGAIN

c++與c區別

首先面向物件和麵向過程的區別就挺大的,首先思路就不一樣,c語言支援的是 C89 標準,c++支援C99,c++11,14,15等。很多用法很不一樣,

1、c語言函式引數不行有預設值,但是c++就行,但是引數預設值要在引數列表中最右邊

int func(int a = 1,int b);//這樣不行
int func(int a,int b = 2,int c = 3);//可以

2、c語言變數的宣告必須在語句的前面,c++隨意在任何地方定義變數。

3、c語言中空結構體沒有佔用空間,但是c++有佔有一個位元組,來區別與別的結構體不同。

4、c語言不支援函式過載,c++支援

5、malloc、free和new、delete區別

6、C語言中作用域只有兩個:區域性,全域性。C++中則是有:區域性作用域,類作用域,名字空間作用域三種。

7、c++面向物件 封裝 繼承 多型