Creative Commons License
本Blog采用 知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议 进行许可。 —— Fox <游戏人生>

游戏人生

游戏人生 != ( 人生 == 游戏 )
站点迁移至:http://www.yulefox.com。请订阅本博的朋友将RSS修改为http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

周记:找回激情

Posted on 2008-05-11 02:25 Fox 阅读(1703) 评论(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     forint 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。

近期考虑的关键词:无缝世界 网游安全 算法导论 兄弟激情

Feedback

# re: 周记:找回激情  回复  更多评论   

2008-05-11 08:24 by Kevin Lynx
还是给个评论:

其实关于程序结构,其实就是我眼中的软件架构,这种东西的经验主要还是通过自己写大程序总结获得,配合设计模式软件工程之类的理论,上升得会比较快,尤其是写个库出来,更会挑战自己这方面的能力。简单的功能封装并不是一个库该干的(这话熟悉吧?)当然看其他开源库也会获取相关经验。对于boost我不敢说啥,很大很惶恐,只能单个小库地仰慕一下。

自我感觉现在有模板编程的思想,不过这东西,仅能用于基础模块的搭建。(我很满意我的日志类,用Andrei书中的术语就是policy :D和我的multi_list :D---Bugs眼中的过度设计--确实有点过度)

算法相关问题,我至今觉得那些书上的算法很少能带给我们直接的实践机会。可能你至今没在工作中用到DP吧?不过我从不忽视算法的作用,在我眼中算法是让人拥有坚实编程基础的东西。所以有时候解决一个问题的时候,总有点捉襟见肘的感觉。不过想想,没办法啊,环境所致。哥们你就忍了吧。

# re: 周记:找回激情[未登录]  回复  更多评论   

2008-05-11 11:06 by snow
虽然不能理解你的困难,愿意一直支持:)

# re: 周记:找回激情[未登录]  回复  更多评论   

2008-05-12 00:19 by Alex
#- - fox,请继续……

# re: 周记:找回激情  回复  更多评论   

2008-05-13 03:10 by 陈梓瀚(vczh)
算法导论中文版没有翻译完,得看原版。

喜欢用STL可能有两个原因
1:在你学会数据结构之前就已经学会了STL
2:你的程序的数据结构不够复杂

过早地系统学习C++库会丧失很多写程序的机会。过早地写应用层的程序也会丧失很多写程序的机会。但是如果不过早学的话,就需要有强大的毅力来让你忍耐枯燥和挫折,除非你对程序本身有很浓厚的爱。

# re: 周记:找回激情  回复  更多评论   

2008-05-13 08:27 by cppexplore
能得出上面的结论,可能有下面几个原因:
1、在学会了数据结构之后,至今还没学会STL,至少对STL没有全面的认识
2、在复杂程序的数据结构面前,不能灵活应用学过的数据结构的精髓:思想
3、尚未系统的学习c++库
4、尚未写过大型的应用层程序
5、对哲学没有深入的思考。看问题片面,主观性强。

吾生也有涯,尔知也无涯。共勉!

# re: 周记:找回激情  回复  更多评论   

2008-05-15 10:59 by 陈梓瀚(vczh)
nono,真正的原因是,在学数据结构的时候我构造了一个能够满足我开发那些编译器和虚拟机需要的,代替STL的东西了- -b

# re: 周记:找回激情  回复  更多评论   

2008-05-15 17:31 by 买书网
理论算法和编程实践都不可或缺。

# re: 周记:找回激情  回复  更多评论   

2008-06-05 12:25 by foxtail
@陈梓瀚(vczh)
你比较特别饿

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理