從2004年使用iocp開(kāi)始,嘗試過(guò)很多種client生存期管理,最初使用
一個(gè)鎖userlock,在sendcomp和recvcomp以及senddata等都用一個(gè)鎖,而且是
進(jìn)去的地方就開(kāi)始鎖,這種方式最簡(jiǎn)單,也產(chǎn)生了最初的版本,之后為
追求更高效率,慢慢演變?yōu)槭褂脙蓚€(gè)鎖,readlock和writelock,再之后
演變?yōu)閟end使用一個(gè)鎖,recv使用interlockedxxx,再之后演變?yōu)?br>send使用一個(gè)cs鎖和一個(gè)sending,recv使用一個(gè)ref,經(jīng)歷了如此多種演變。
1、一個(gè)鎖userlock, sendcomp recvcomp senddata都用這個(gè)鎖。
2、兩個(gè)鎖,userlock, sendlock
3、一個(gè)鎖userlock+socket查找,鎖范圍比1小,多一次全局查找操作。
4、一個(gè)鎖sendlock,一個(gè)ref(InterlockedXXX)
wsasend wsarecv 對(duì)象生存期等都用ref計(jì)數(shù)
5、一個(gè)鎖sendlock和一個(gè)sending(InterlockedXXX),一個(gè)ref(InterlockedXXX)
wsasend用sending計(jì)數(shù),wsarecv等用ref計(jì)數(shù)
歷經(jīng)如此幾個(gè)版本的修改,鎖的范圍越來(lái)越小,interlocked次數(shù)越來(lái)越少,反應(yīng)自然
越來(lái)越快。
今天為了寫(xiě)總結(jié)文章,拿1 4 5進(jìn)行了一次比較,1除了大量連接的時(shí)候比4 5 反應(yīng)
慢了很多之外在cpu mem等占用方面幾乎和4 5 相當(dāng),也就是說(shuō)除了實(shí)時(shí)性方面差一些
其他方面沒(méi)有太大差別。
但4 5都是用到了線程級(jí)別的內(nèi)存池,1的測(cè)試?yán)踢€是用老的內(nèi)存池,這個(gè)差別也
很大,所以綜合地看,雖然做了很多優(yōu)化卻是花費(fèi)80%的時(shí)間,做了20%的鳥(niǎo)事。