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