这几天忙着找房子,搬家,很麻烦,房租比原来有贵了五百多。
我打算写个网络通信组件,大概会用到共享内存,Epoll事件驱动机制,多线程,连接池,无锁循环任务队列等一系列知识点。
以前写过一些简单的网络程序和多线程程序,主要出发点是掌握基本的API和一些编程原理,工作后就没有从事相关的东西,工作中主要是C/C++写业务逻辑。自从去年八九月开始晚上回来都花一个小时看些网络方面的知识,大都集中在TCP方面,看些写的比较好的没有错误的博客和一些外文资料,再加上Github上的开源代码,主要还是redis。
工作中用到的C++方面高级的知识点不是很多,看些Effective C++,More Effective C++,深度探索C++对象模型和Effective STL这基本经典的书籍就够了,那些STL容器的一些实现原理,一些坑也得知道;也得掌握编写可读性较好的编码规范。至于性能方面的,可以看看深入理解计算机系统的第三章,主要是汇编,也可以看看cache,内存方面的知识点,网络IO也需要知道。再也没写过多线程多进程的程序,看过一些书籍如mudo那本书,很多业务没必要搞多么复杂,一个线程一个EventLoop,把要关注的事件注册上去【redis也是单进程单线程的】,有消息过来回调或以任务的形式分发处理,不能阻塞饿死。
做游戏的用到高级的算法不是特别多,业务逻辑也不是特别复杂【视野算法有点难】,但是架构很重要。工作中需要考虑的问题很多,比如怎么以较高的效率随机选择不同的数,或根据权重;弱网络怎么处理;协议怎么约定,怎么可扩展,每个进程承载什么功能等等。
想系统的学习下Python和Shell,但想想从头开始学得花好些时间不大实际,还是以工作需要去驱动吧,去培养自己发现问题,解决问题的能力,在这个过程中强化学习能力。