再见2017

2017年过的格外的快,似乎2016年元旦刚过去没多久,2017年的元旦又来了。

大致回溯了一下2017,好像什么也想不起来了。只好重新扒了一下Blog,才慢慢回想起这一年到底干了些什么。

仿佛是为了印证“计划赶不上变化”这句话。2016年定下的目标,依然没有全部完成。这几乎是一个惯例,每年初定下的目标,到了第二年去看时,一定没有100%完成。而我也已经习惯了这个规律。

2016年目标进度如下:

luaVM的源码并没有读完,只是其中断断续续的读了一部分。到目前为止,已读代码包括:string的实现,table的实现(不包括metatable table的实现), gc的实现,寄存器的分配及部分语法解析和OPCODE生成。

设计一个虚拟机更是一点都没有启动。

计算机程序设计艺术,仅仅读到了卷1的2.2.3节。

blog系统也只做了基本的主题展示和数据存储,还缺一个庞大的后台系统。

spark和zookeeper分布式源码更是一个也没有看,只研究了一下paxos协议。


在看lua语法解析部分期间,而刚好有同学跟我讨论起C语言为什么没有import机制。当时脑子短路,竟然花了大半天时间,炮制了个预处理器就这样把import给支持了,虽然很简陋,但至少可以证明可行性。我个人觉得这个思路非常值得一提。

之后很长一段时间都在研究如何让服务器具备高可伸缩性。并最终实现了一套与韦蝠王在文中提到的“类型4”服务器架构相似的架构。

在实现场景服务器时,接触到了Arena Of Interest的概念,并自己试着实现了一份

这个可伸缩服务器架构是基于一个demo做的,毕竟有需求,才会知道如何去设计。不过最终在框架成形后,demo由于缺少资源等原因没能继续下去。

后来微信小程序开始预热,加上我缺一个移动端好用的rss阅读器。就在小程序的基础上做了一个RssReader,虽然可能没有想象中的那么好用,但是对我自己来讲基本上够用了。之所以做个,除了我缺一个rss阅读器以外,也是因为当时有种陷入瓶颈的感觉。我需要跳出舒适区,来换个领域换个思路。

去年就说过,我的短板是数据库。在实际项目中虽然也使用数据库,但是并没有大幅度使sql数据库。因此接下来花了近一个月的时间学习了一下mysql的使用和sql语句的优化。同样为了跳出舒适区,最初计划学习完mysql之后,把rssreader的后台数据库从redis换成mysql。但犹豫过于懒惰,未能成行。

学习完mysql的过程中,就接触到了,一些分布式存储和一致的概念,比如二段式提交,Paxos协议。其中二段式提交还比较好理解,Paxos虽然描述都很简单,但是我琢磨了将近一个月才大致理解,为什么他会保持一致性。后根据理解实现了一个不考虑效率的Paxos协议的demo

回过头来看,2017年其实并没有干太多事,主要精力都花在了分布式上。如果为2017年取一个总结词,那应该就是”分布式”了。


在做游戏demo时,我顺便学习了Unity和Shader。虽然也能写,但是总觉得有种“浮沙筑高台”的感觉。

因此2018年,我的主要精力应该在图形引擎上,目标如下:

1. 继续阅读lua源码,并实现虚拟机
2. 继续阅读《计算机程序设计艺术》
3. 实现一个软件光栅器(要支持实时光照/阴影大部分图形引擎的功能)



评论

  1. 对于MySQL,我有个看法,在silly中能不能做个像Java的mybatis框架那样,很好的去规范和组织sql,把sql语句写在统一一个地方。就像解析proto那样,写在[[ … ]]里面

  2. 欢迎PR

  3. 大神,我想问一下,silly_socket_poll()为什么像skynet那样,用select来提高命令的执行顺序。

  4. @lindx
    关于优先处理命令可以见这篇:https://blog.gotocoding.com/archives/459
    不过我现在不用select了,减少系统调用次数

  5. 我看了,您在cmd_process()函数处理了所有的命令了,谢谢,对了,我对比了您的silly和skynet中的sp_wait模块,有一个问题想问
    https://github.com/cloudwu/skynet/issues/790
    不知道,你对这个问题怎么看?

  6. @lindx 这点性能不会成为瓶颈,不过我还是用了另外的方式。

  7. 大神,能加一下QQ:2049635860吗,有些c或者lua的学习地方不是很懂,

发表评论