Socket linux高效能網路服務程式

2022-05-06 18:12:13 字數 2507 閱讀 8118

1.mystery引入

1)高效能的網路服務程式分為單執行緒重覆式網路服務、多程序網路服務 、多執行緒網路服務、執行緒池網路服務和io多路復用網路服務等

2)單執行緒重覆式是最基本的一種tcp服務模式,其實現簡單,但是使用者體驗差,由於我前面日誌中已經作過介紹,這裡就不再贅述了

3)多程序網路服務是利用linux系統中的父子程序關係為多使用者提供併發服務,基本理念是乙個使用者,啟動乙個服務程序。

優點是方法通用,但是啟動和關閉程序需要很大系統開銷,不利於大量使用者併發使用;

另外父子程序間的資料共享與同步等具體實現會有一定困難。

4)多執行緒網路服務類似於多進行網路服務模式,不同之處是前者是新啟動乙個執行緒,適用於商業環境中。

5)執行緒池網路服務基本理念是:先建立一批資源,當有使用者到來時,直接分配已建立好的資源

目的是減少系統在頻繁建立資源時的開銷,優點是效能高效。

6)io多路復用是一種非阻塞的方式,與前面幾種最大的不同是不會因為io的操作而進入阻塞狀態

其呼叫select的方式輪詢各個套接字

優點是系統開銷小,不用建立和維護執行緒或程序佇列,在linux應用中比較多,常結合其它模式共同使用,以達到更好的效果。

2.例項演示

1)前面我已經演示過單執行緒重覆式網路服務和io多路復用了,所以這次只演示多程序網路服務、多執行緒網路服務和執行緒池網路服務

2)採用c/s模式,設計乙個統一的客戶端,用3種不同的模式實現伺服器端

3.效果演示

1)多程序網路服務

2)多執行緒網路服務      

3)執行緒池網路服務

4.源**

1)因為源**是在linux下寫的,日誌是在win7下寫的,複製過來有些文字亂碼了,主要是因為編碼方式不同,不過不影響**的檢視

2)客戶端

#include #include #include #include #include #include #include #include #include #include #include #include #define port    5555

#define server_ip "127.0.0.1"

typedef struct mathopt

mopt;

void createopt(struct mathopt *pmp)

void help()

main()

serveraddr.sin_family=af_inet;

serveraddr.sin_port=htons(port);

serveraddr.sin_addr.s_addr=inet_addr(server_ip);

if(connect(clientsocket,( struct sockaddr * )&serveraddr,sizeof(serveraddr)) < 0)

printf("infor: connect with destination host........[ok]\n");

while(1)

else if(strcmp(command,"minus") == 0)

else if(strcmp(command,"multiply") == 0)

else if(strcmp(command,"divide") == 0)

else

}mp.oprate = 3;

}else if(strcmp(command,"help") == 0)

else if(strcmp(command,"quit") == 0)

else

send(clientsocket,(char *)&mp,sizeof(mp),0);

if(mp.oprate == 4)

recv(clientsocket,recvbuf,200,0);

printf("the result is: %s\n",recvbuf);

}close(clientsocket);

return 0;

}

3)多程序服務端見附件4)多執行緒網路服務端見附件6)執行緒池網路服務端

見附件本文出自 「成鵬致遠」 部落格,請務必保留此出處

高效能串列埠轉乙太網模組

wiznet高效能乙太網模組有以下幾個系列 w5500s2e 系列 w5500s2e s1,w5500s2e z1,w5500s2e r1 w7500s2e 系列 w7500s2e z1,w7500s2e r1,w7500s2e c1 高效能乙太網模組特點 w5500s2e系列 支援modbus r...

高效能mysql(一) 建立高效能索引

單列索引和多列索引 單列索引 多個單列索引的選擇問題 多個or條件 多個單列的效能往往效能很低,盡量建立高效的多列索引。多列索引 選擇合適的索引順序 避免範圍條件 在where子句中,in是有效的,範圍條件會導致後面的索引無效!在order by中,範圍條件和in都會導致無法按照索引排序!按照索引順...

高效能mysql 樹 高效能mysql精要

1 explain 中 extra using index 表示覆蓋索引,sql優化中最好能使用覆蓋索引,否則 二級索引 需要回表查詢。所謂覆蓋索引,是指要查詢的列正好是索引,而條件也是這個索引之一 2 where 語句中 條件等於主鍵的 在核心索引層完成,條件等於非索引的,在服務層完成 3 讀索引...