Posted on 2008-05-11 02:25
Fox 阅读(1753)
评论(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。
近期考虑的关键词:无缝世界 网游安全 算法导论 兄弟激情