美文网首页
程序是怎么越来越复杂的?

程序是怎么越来越复杂的?

作者: Jiafu | 来源:发表于2018-10-30 19:40 被阅读0次

    写代码的时候,有时候有这种感觉,就是一个程序,说白了功能很简单,管理管理配置、发发消息、维护一下内存数据结构,好像没啥特别了不起的功能,但是code看起来特别多,特别复杂,这是为什么?

    程序越写越复杂的原因,个人认为有以下这些:

    异常处理。分配内存失败了怎么办?网络连接闪断了怎么办?硬盘坏了怎么办?网卡坏了怎么办?这些异常,都需要考虑。分配内存失败?已经分配的,是不是要free掉?网络闪断,那是不是要重发?重发对方是不是可以处理?是不是要带一个唯一的ID(这样对方可以去重)?失败了,已经做了一些操作,要不要rollback?处理这些异常,是不是想想都心累 。处理这些异常就要占掉大量的代码,虽然没有统计过,但是觉得起码20%的code是在处理这些异常的。
    并发:程序有没有尽可能的并发?有没有可以并发但没有并发并且可能严重影响性能的?并发的时候同步控制怎么搞?这又引起下一个问题。
    锁:用什么锁?spinlock?rwlock?mutex?信号量?异步锁?锁的顺序是什么样的(以防死锁)?
    对象生命周期的控制:对象什么时候被销毁?在对某个对象进行操作的时候,怎么确保它不会被销毁?引用计数 o r锁?
    异步:线程数明显是有限的,为了不阻塞宝贵的线程,只能把同步流程异步化了。到处充斥着callback function,简直酸爽。
    高可靠:程序挂掉怎么办?可以再被拉起吗?或者其它相同进程可以接管吗?接管的速度够快吗?接收到的消息,对方再发一遍怎么办,能处理不?能去重不?或者能支持可重入不?重要的业务,挂掉后会不会导致不一致的问题?如果会,怎么保证事务性。
    性能:性能够不够?肯定是不够的,来,malloc自己封装一下,搞个cache出来。spinklock?太重了,搞成atomic变量。不该加的锁通通去掉。什么?锁里面分配了内存?会被吐槽死的。不用锁?内存屏障加了吗?
    写一个正确的程序,的确是有点难度。

    相关文章

      网友评论

          本文标题:程序是怎么越来越复杂的?

          本文链接:https://www.haomeiwen.com/subject/nylntqtx.html