在udpp开发测试过程中发现udpp线程同步依然存在瑕疵,经过大量测试和日志分析,终于给发现的问题修复了,由此做个总结记录。udpp库内部是由大量线程分工实现各个功能的,问题出现在线程资源同步的上,自从1年前因为调整同步机制去除了各种sleep,暴露出了线程同步问题导致的各种不可预测的崩溃,直至今年11月经过大量排查才找到是线程同步原因,至此udpp才又步入稳定期,今天在开发中又发现了其它位置的线程同步问题,经过这次优化调整后udpp应该更稳健可靠。
在多线程编程中线程并发同步真的是一个极具挑战的问题,很多时候单线程跑是没有问题的,当并发执行的时候就会出现各种问题,之前版本没触发崩溃或者很少触发崩溃和各处sleep有很大的关系,但sleep并不是100%可靠的,不同步依然会有崩溃的可能性,而且很多时候在多核cpu上每个核因为繁忙度不一样又会出现随机性的崩溃,使得崩溃问题并不是100%触发,写完之后导致定位查找头发掉光光。
目前应该已经从根源上完全解决了类似的问题了。虽然上次的版本截止今天已经连续20天稳定在线运行,相信此次优化后将更稳健可靠。