Posted on 2008-05-11 02:25
Fox 閱讀(1773)
評(píng)論(8) 編輯 收藏 引用 所屬分類:
T技術(shù)碎語(yǔ)
寫(xiě)的太雜,實(shí)在沒(méi)法寫(xiě)題目,就用這一周的簽名吧,很合現(xiàn)在的心境。
Kevin眼中的我,大概是個(gè)重視理論算法勝過(guò)編程實(shí)踐的人,而我的算法和理論基礎(chǔ)尚差的出奇(可能這就是知恥而后勇吧:D),可見(jiàn)我的編程實(shí)踐又會(huì)多么的差了。Bugs更是對(duì)我整日沉浸于這些不著邊際的“空中樓閣”頗有微詞,甚至嗤之以鼻。今日若不是要把自己前段時(shí)間的豆腐渣粉飾一番,我依然不愿去考慮多線程的具體實(shí)現(xiàn),或者說(shuō)不是不愿,是不敢,總有一種臨深履薄之感。
縱然如此,為了更好的完成工作,我還是拉來(lái)Kevin,勞他為我講解一下多線程,可能是因?yàn)槲覐奈醋屑?xì)看過(guò)boost等C++開(kāi)源庫(kù)的原因吧,我對(duì)于結(jié)構(gòu)封裝本身并沒(méi)有多少概念。說(shuō)句實(shí)話,看到那些模板我就頭大,心里想:本來(lái)一個(gè)簡(jiǎn)單的東西,為什么要搞的那么復(fù)雜呢?當(dāng)然,我知道,這是因?yàn)槲覍?duì)其缺乏了解,在對(duì)一樣?xùn)|西沒(méi)有完全理解就妄測(cè)其好壞是自卑的表現(xiàn):D,所以也請(qǐng)Kevin原諒我的無(wú)知,順便致謝;-)。
還是稍微提一下多線程的東西吧,因?yàn)檫@一次改動(dòng)并不很大,因此只言片語(yǔ)難以面面俱到,也請(qǐng)各位TX不必較真兒。這兒只是說(shuō)一下我是怎么偷懶把之前沒(méi)有使用多線程的I/O部分修改成多線程I/O的,I/O的細(xì)節(jié)不再詳述,而且這臺(tái)機(jī)器上面因?yàn)闆](méi)有VS,僅憑記憶,如果有什么差錯(cuò),請(qǐng)幫我指出來(lái)了:-)。
在項(xiàng)目啟動(dòng)后的初始化中初始化I/O線程:
1 void SomeApp::Init(void)
2 {
3
// do some other things
4
5 CIOOperator::Init(); // InitializeCriticalSection for I/O queue(s)
6
7 for( int i=0; i<nIOThreadsNum; ++i )
8 {
9 CIOOperator *pOpObj = new CIOOperator;
10 pOpObj->Create();
11 m_vecIOThreads.push_back(pOpObj);
12 }
13
14
// do some other things
15 }
在項(xiàng)目退出前結(jié)束I/O線程:
1 void SomeApp::Release(void)
2 {
3
// do some other things
4
5 vector<CIOOperator *>::iterator it = m_vecIOThreads.begin();
6 for( ; i!=m_vecIOThreads.end(); ++it )
7 {
8 it->End();
9 delete (*it);
10 }
11 m_vecIOThreads.clear();
12
13 CIOOperator::Release(); // DeleteCriticalSectionfor I/O queue(s)
14
15
// do some other things
16 }
I/O線程函數(shù):
1 void ThreadFunc( void *pArgument )
2 {
3
// do some other things, like exception handling
4
5 (CIOOperator *)pArgument->Run(); // operating I/O queue(s) until exit
6
7
// do some other things
8
9 _endthreadex();
10 }
說(shuō)多線程復(fù)雜,無(wú)外乎線程的退出策略、同步機(jī)制、調(diào)試、異常處理等等。多少還是需要一些知識(shí)(尤其是同步)和經(jīng)驗(yàn)(尤其是調(diào)試)。
再回來(lái)說(shuō)一下最近比較關(guān)注的算法吧,雖然為某些人所不齒,甚至公然批評(píng)我最近比較松懈,實(shí)在令我難堪的緊。我又沒(méi)有消極怠工,難道編寫(xiě)代碼是積極,學(xué)習(xí)算法就是消極嗎?鄉(xiāng)下來(lái)的,且不必理他。當(dāng)然,多少還是需要注意一下分寸吧。
在受到上次解決烙餅排序問(wèn)題的打擊之后,我開(kāi)始反思:自己思考和解決問(wèn)題的角度怎么就那么簡(jiǎn)單和狹隘?細(xì)細(xì)想來(lái),從本科畢業(yè)之后,幾乎再?zèng)]翻過(guò)算法的書(shū),幾乎再?zèng)]做過(guò)算法的題,寫(xiě)代碼只是為了糊口,只能糊口的代碼自然只能以垃圾形容。意識(shí)粗糙,操作離譜,整個(gè)一下里巴人。
在一番深深的自責(zé)之后,痛定思痛,痛何如哉,才感覺(jué)自己關(guān)于算法的思維空間已經(jīng)局限于if-else、do-while,連窮舉、分治、貪心、回溯這些以前念書(shū)時(shí)天天掛在嘴邊侃侃而談的常用算法都沒(méi)有概念了,遑論動(dòng)態(tài)規(guī)劃、最小二乘法、線性回歸等復(fù)雜一些的(非)數(shù)值算法,關(guān)于數(shù)據(jù)結(jié)構(gòu)的思維空間也已經(jīng)局限于vector、list、map了,再也沒(méi)有回憶過(guò)stack、tree、graph這些讀死書(shū)、死讀書(shū)得來(lái)的所謂知識(shí)。
可悲啊,為什么拿到一個(gè)困難一點(diǎn)的問(wèn)題,就只知道畫(huà)圖、編碼,而不知道組織算法呢?甚至連這個(gè)問(wèn)題到底有無(wú)多項(xiàng)式時(shí)間解都不去考慮。然而,一提誰(shuí)都知道:算法復(fù)雜性——數(shù)據(jù)結(jié)構(gòu)第0章就會(huì)提到的基礎(chǔ),真正分析起來(lái),卻是力不從心。
所以,接著掃掃盲吧,實(shí)在沒(méi)有必要去搞很多艱深的東西,本來(lái)想接下來(lái)就寫(xiě)NP難題,可是近來(lái)工作上的事情確實(shí)有些多,之前一篇已經(jīng)是被Alex(這家伙卻至今未開(kāi)張……)“催出來(lái)”的了。
手頭只有MIT英文版的《Introduction to Algorithms》ed.2,于是就從網(wǎng)上找了中文電子版,居然是上個(gè)世紀(jì)94年南京大學(xué)譯的第一版。看算法的話,多半是以這本書(shū)和Wikipedia為主了。
PS: 另外做的一點(diǎn)事情,似乎和詞法分析、異常處理等多少有些關(guān)聯(lián),內(nèi)容相當(dāng)瑣碎,此刻不再贅述。
對(duì)了,和工作、學(xué)習(xí)并不那么相干的事情就是,今天和幾個(gè)同事出去釣了幾個(gè)小時(shí)魚(yú),收獲嘛,保密:D。
近期考慮的關(guān)鍵詞:無(wú)縫世界 網(wǎng)游安全 算法導(dǎo)論 兄弟激情