長(zhǎng)風(fēng)破浪會(huì)有時(shí) 直掛云帆濟(jì)滄海 加油
很佩服作者的耐性和毅力 也很喜歡作者的話:耐得住寂寞, 守得了空房,夢(mèng)想就在不遠(yuǎn)的地方!
看了代碼實(shí)現(xiàn),使用引用計(jì)數(shù)和unordered_set,這會(huì)造成每個(gè)桶內(nèi)都可能存在對(duì)某相同連接的entry對(duì)象,以致空間占用較大,但換來(lái)了時(shí)間上的效率,如果保存臨時(shí)tail,則是常數(shù)時(shí)間。如果不用這種方法,而采用連接從所在桶內(nèi)移到tail桶內(nèi),則至少是對(duì)數(shù)級(jí)的時(shí)間。
強(qiáng)烈支持陳兄,你已經(jīng)在為祖國(guó)作貢獻(xiàn)了,可惜我專科畢業(yè),沒(méi)學(xué)過(guò)編譯原理,但在修煉計(jì)劃中,倒是網(wǎng)絡(luò)方面學(xué)得較深,啊哈哈。
讀書不在數(shù)量 而在質(zhì)量 重在真正吸收消化了多少
工程師和科學(xué)家根本就不是一個(gè)檔次,定義也是不一樣的。
1) CAutoReleasePtr的一些成員函數(shù)的參數(shù)少了ReleasePolicy,例如下:
template<typename TSrc>
CAutoReleasePtr(CAutoReleasePtr<TSrc,ReleasePolicy>& p)throw()
{
m_p = p.Detach(); // Transfer ownership
}
CAutoReleasePtr( CAutoReleasePtr<T,ReleasePolicy>& p ) throw()
{
m_p = p.Detach(); // Transfer ownership
}
2) 可以定義一個(gè)公共方法的宏來(lái)減少代碼重復(fù),但缺點(diǎn)是不利于調(diào)試。例如下:
template<T>
class CSimplePtr
{
COMMON_MEMBER_METHOD(T)
void Free() { delete m_p; }
private:
T* m_p;
}
template<T>
class CArrayPtr
{
COMMON_MEMBER_METHOD(T)
void Free() { delete []m_p; }
private:
T* m_p;
}
template<T>
class CStatckPtr
{
COMMON_MEMBER_METHOD(T)
void Free() { _freea m_p; }
private:
T* m_p;
}
3)模板和宏的共同點(diǎn)是都能避免重復(fù)代碼,但模板更優(yōu)越,這也是C++相對(duì)C進(jìn)步的表現(xiàn)。
4)c++11新標(biāo)準(zhǔn)支持帶模板參數(shù)的typedef,又是一個(gè)進(jìn)步。
re: 理解程序內(nèi)存 春秋十二月 2012-09-20 17:08
windows高級(jí)調(diào)試一書,應(yīng)該有講解吧
有點(diǎn)意思,你好像有較多時(shí)間來(lái)發(fā)明一些輪子,精神可嘉
re: 論epoll的使用[未登錄](méi) 春秋十二月 2012-08-31 01:04
唐工的方法,和我實(shí)踐中基本是一樣的,但沒(méi)有加標(biāo)記,而是直接發(fā),如果碰到EAGAIN,則入隊(duì);如果發(fā)了一部分,則剩下的部分入隊(duì),留在下次寫事件中發(fā)。
簡(jiǎn)言之,ET模式的讀寫,需要不斷讀或?qū)懼钡接龅紼AGAIN或出錯(cuò),也就是達(dá)到邊緣狀態(tài)(空間空或滿),如果后來(lái)空間非空或非滿(原因是網(wǎng)絡(luò)收到數(shù)據(jù)或?qū)懗鰯?shù)據(jù)),則讀或?qū)懯录捅挥|發(fā)一次了。
re: 論epoll的使用[未登錄](méi) 春秋十二月 2012-08-27 16:36
@peakflys
fd寫事件被觸發(fā),是因?yàn)閟ock底層緩沖區(qū)有大于某個(gè)閾值的空閑空間,和應(yīng)用層有無(wú)數(shù)據(jù)待寫沒(méi)有關(guān)系吧
re: 論epoll的使用[未登錄](méi) 春秋十二月 2012-08-27 10:33
LT模式下,只要空間可寫,則寫事件不斷被觸發(fā),CPU占用較高,如果不轉(zhuǎn)為ET模式,怎么解決這一問(wèn)題?
樓主,是個(gè)有心人。
1)發(fā)原始包,用戶模式做不到嗎,raw socket可行,當(dāng)然這個(gè)局限在IP層
2)網(wǎng)絡(luò)開發(fā)的內(nèi)容也很多的,如防火墻,流量控制,行為管理等等
3)深入的話,可以看看網(wǎng)絡(luò)內(nèi)核
4)分層是設(shè)計(jì)的考慮,每層的功能和職責(zé)各不相同,下層為上層提供服務(wù)
內(nèi)聯(lián)函數(shù)是指那些定義在類體內(nèi)的成員函數(shù),局限了吧,自由函數(shù)也可以是內(nèi)聯(lián)的。
不錯(cuò),但從整型到枚舉的轉(zhuǎn)換,需注意是否越界
你的網(wǎng)絡(luò)庫(kù)和博文值得做服務(wù)器開發(fā)的同仁們學(xué)習(xí)和借鑒,好樣的
ace,boost,linux kernel都有實(shí)現(xiàn)源碼,可以研究下。
乍一看標(biāo)題還以為是講定里器的原理、設(shè)計(jì)及實(shí)現(xiàn),以前寫過(guò)應(yīng)用層的定里器,底層的數(shù)據(jù)結(jié)構(gòu)可以是數(shù)組、堆、哈希、鏈表,性能各不一樣,可據(jù)需求選擇。
基礎(chǔ)很重要,萬(wàn)變不離其宗,不可過(guò)分追求新興的技術(shù)
re: 關(guān)于編程的胡扯 春秋十二月 2012-06-23 09:29
做研究當(dāng)科學(xué)家曾是我兒時(shí)的夢(mèng)想,雖然年少曾經(jīng)輝煌而后又曲折坎坷,盡管國(guó)內(nèi)大環(huán)境不好,但我從沒(méi)有放棄努力,而是愈戰(zhàn)愈勇,因?yàn)槟悴粌H是我的榜樣,也應(yīng)該是所有有理想有志向做技術(shù)的一批人的榜樣。如果大多做技術(shù)的人都能像你這樣,中國(guó)軟件何愁沒(méi)核心,何愁不強(qiáng)大?!
boost中也有tls的實(shí)現(xiàn),早期的時(shí)候,我一直也想自己弄個(gè)tls,但至今沒(méi)動(dòng)手,引用計(jì)數(shù)一是生命周期,二是共享資源。
因?yàn)樽非笞吭剑昝辣憩F(xiàn),所以我佩服你,啊哈哈
好的技術(shù),好的文章,好的排版,相得益彰嘛
很不錯(cuò),支持原創(chuàng)!提個(gè)小建議,博文字體盡量大點(diǎn)吧
re: 難以割舍的二段構(gòu)造 春秋十二月 2012-06-14 18:35
你說(shuō)的對(duì),糾正一下,查看了反匯編,不是重新定義,子類調(diào)用的還是基類的函數(shù)
其實(shí)這不叫改變了基類的訪問(wèn)權(quán)限,而是在子類中又重新定義并覆蓋了基類中的同名函數(shù)
內(nèi)存分配存儲(chǔ)方式可作為一種策略,作為字符串的模板參數(shù),形如std::allocator。不必弄子類定制。
定性分析,這個(gè)主要優(yōu)勢(shì)在于查找快和占用內(nèi)存小,我以前考慮過(guò)這個(gè)實(shí)現(xiàn),但覺(jué)得通用性不強(qiáng),優(yōu)勢(shì)不占居大的地位,放棄了。
交互式程序如telnet和rlogin是關(guān)閉nagle算法的典型應(yīng)用
template<typename F , typename A>
struct Apply
{
typedef typename F::Apply<typename A::Type>::Type Type;
};
Apply是個(gè)嵌套的類模板 F后面怎么沒(méi)有template呢?即F::template Apply<...>
不用某個(gè)方法,不等于不存在這個(gè)需求和必要性。隨著時(shí)間推移,當(dāng)改進(jìn)完善你的類時(shí),就會(huì)作出變化的。
呵呵,你的類接口是句柄就行,在win32中一樣可用,反正我覺(jué)得你的選擇類創(chuàng)建GDI對(duì)象,那是不明智的做法。
GDI對(duì)象有對(duì)應(yīng)的MFC類,選擇器選擇新的對(duì)象,增加一個(gè)方法reset,功能是選回老對(duì)象,以在任何時(shí)機(jī)可以調(diào)用,而在析構(gòu)函數(shù)實(shí)現(xiàn)中調(diào)用reset即可。