C 语言从零独立开发服务端软件。网络编程范畴,多进程和多线程共同配合完成功能(有进程间通信的数据),主要和核心逻辑都在多线程的进程里。程序实现了线程安全的 socket 文件描述符的引用计数(两种方式,类比 shared/weak ptr )等复杂的功能。实现了配置热更新、多线程日志模块的重复日志内容消除、非重要数据统计等功能。整个程序用到了多个红黑树实例,这些数据结构每秒有上万次更新,需要做到线程安全的增删改查。偶尔还有遍历这些数据结构的功能。
最要事情重复下:最核心的数据都在红黑树里和引用计数的资源池里保存着,红黑树每秒上万次查询和更新(按照 50 万次每秒查询的要求讲吧,目前线上运行的实际情况最低要求是 18 万无压力,所以大家如果给解决方案,比如说保存数据到 redis ,要考虑下性能要求),引用计数部分每秒会变更 N 多次。它们需要做到线程安全,因为不仅有多个线程会使用它们,还会有控制模块删除它们。
对于这样一个程序,如果合作方的领导不听你解释,一再要求程序实现程序任意时刻挂掉后能自主恢复继续运行,根据上文描述,你是否会实现这个功能?
强调这个功能的原因是因为之前他们的第三方合作经历,让他们觉得这个功能很有必要。我拒绝的原因是实现这个功能会极大地增加各个模块的实现难度和复杂度,最终会严重影响性能(我就不说怎么吐槽我说因为性能不做 XX 功能的给我评价的原话了)。或者说,即便能做,那么多数据的一致性问题不说,我认为很难做到原子性备份。而且做这个功能,会极大延长工期。
或者讲你遇到这个事情会怎么处理?目前结果是,程序上线后,没有挂过一次。但是指责了我不做 XX 功能的行为。
最要事情重复下:最核心的数据都在红黑树里和引用计数的资源池里保存着,红黑树每秒上万次查询和更新(按照 50 万次每秒查询的要求讲吧,目前线上运行的实际情况最低要求是 18 万无压力,所以大家如果给解决方案,比如说保存数据到 redis ,要考虑下性能要求),引用计数部分每秒会变更 N 多次。它们需要做到线程安全,因为不仅有多个线程会使用它们,还会有控制模块删除它们。
对于这样一个程序,如果合作方的领导不听你解释,一再要求程序实现程序任意时刻挂掉后能自主恢复继续运行,根据上文描述,你是否会实现这个功能?
强调这个功能的原因是因为之前他们的第三方合作经历,让他们觉得这个功能很有必要。我拒绝的原因是实现这个功能会极大地增加各个模块的实现难度和复杂度,最终会严重影响性能(我就不说怎么吐槽我说因为性能不做 XX 功能的给我评价的原话了)。或者说,即便能做,那么多数据的一致性问题不说,我认为很难做到原子性备份。而且做这个功能,会极大延长工期。
或者讲你遇到这个事情会怎么处理?目前结果是,程序上线后,没有挂过一次。但是指责了我不做 XX 功能的行为。