《2019年基于协程的编程方式在移动端研发的思考及最佳实践.pdf》由会员分享,可在线阅读,更多相关《2019年基于协程的编程方式在移动端研发的思考及最佳实践.pdf(70页珍藏版)》请在三个皮匠报告上搜索。
1、基于协程的编程方式在移动端研发的思考及最佳实践阿里巴巴 无线开发专家目录超级App的性能和代码痛点 iOS异步编程现状 其他语言的异步编程方式 协程简介及实现原理 协程开发框架介绍 使用案例以及工程落地简介 后续的发展 总结 参考超级App的性能和代码痛点线程使用特别方便,但是多线程使用不当引发的崩溃问题很多多线程访问引发野指针问题 多线程访问引发容器类崩溃问题 多线程访问引发过渡释放问题.超级App的性能和代码痛点为了解决多线程崩溃问题或者为了让代码可读性更强可能会严重牺牲应用性能iOS系统API设计很不友好,绝大部分IO、跨进程调用等耗时接口提供的都是同步方法,主线程调用会产生严重性能问题
2、 为了解决多线程崩溃加的锁、信号量等,由于设计不合理,很容易引发卡顿甚至死锁 iOS系统API缺乏统一的异步编程模型,Delegate、Callback、同步等杂揉在一起,要写出高性能代码需要付出极大的努力超级App的性能痛点手机淘宝稳定性和性能问题主线程多线程启动线程50+常驻线程30+最大线程100+崩溃问题分布整个生命周期大量使用线程,多线程使用不当引发的崩溃问题占比达到了60%以上超级App的性能痛点手机淘宝稳定性和性能问题卡顿问题分布8%解析6%计算8%锁6%IO16%系统API56%系统API使用不当,容易造成主线程卡顿 代码中的多线程锁对应用的性能和稳定性产生了极大影响 主线程I
3、O等问题不断出现,严重影响淘宝性能系统API、IO等接口在异步编程上支持并不友好,极易产生性能问题超级App的性能和代码痛点高性能代码不好写-(void)synchronize self handleDict:self.clientVersionDict;self.clientVersionDict writeToFile:self clientVersionFilePath atomically:YES;同步接口处理字典,同步IO操作超级App的性能痛点高性能代码不好写-(void)synchronize1 dispatch_async(dispatch_get_global_queue(0
4、,0),self handleDict:self.clientVersionDict;self.clientVersionDict writeToFile:self clientVersionFilePath atomically:YES;);发现卡顿,增加异步访问逻辑超级App的性能痛点高性能代码不好写-(void)synchronize2 dispatch_async(dispatch_get_global_queue(0,0),self.versionLock lock;self handleDict:self.clientVersionDict;self.clientVersionDi
5、ct writeToFile:self clientVersionFilePath atomically:YES;self.versionLock unlock;);内部字典访问引发多线程崩溃,增加锁逻辑超级App的性能痛点高性能代码不好写简单的逻辑越来越复杂,最终变成了灾难性的后果未来应该如何发展?Emas全面监控 流程式被动防御修复问题赋能业务 提升代码质量,升级体验崩溃监控卡顿监控内存监控编码规范实施落地CodeReview单元测试编程方式升级iOS异步编程现状iOS异步编程方式发展过程delegateblock响应式协程?逻辑割裂,可读性差共享delegate,线程不安全主要用在一些U
6、I扩展中回调地狱容易引发严重错误目前使用最广泛理念先进,概念复杂学习成本高调试困难历史悠久,现代语言标配概念简单,操作方便也许是未来iOS异步编程现状Block的缺点NSURLConnection sendAsynchronousRequest:rq queue:nil completionHandler:(NSURLResponse*_Nullable response,NSData*_Nullable data,NSError*_Nullable connectionError)if(connectionError)if(callback)callback(nil,nil,connecti