阿里妹导读:刚刚,阿里巴巴正式对外开源了基于 Apache 20 协议的协程开发框架 coobjc,开发者们可以在 Github 上自主下载。
coobjc是为iOS平台打造的开源协程开发框架,支持Objective-C和Swift,同时提供了cokit库为Foundation和UIKit中的部分API提供了 协程 化支持,本文将为大家详细介绍coobjc的设计理念及核心优势。
从2008年第一个iOS版本发布至今的11年时间里,iOS的异步编程方式发展缓慢。
基于 Block 的异步编程回调是目前 iOS 使用最广泛的异步编程方式,iOS 系统提供的 GCD 库让异步开发变得很简单方便,但是基于这种编程方式的缺点也有很多,主要有以下几点:
针对多线程以及尤其引发的各种崩溃和性能问题,我们制定了很多编程规范、进行了各种新人培训,尝试降低问题发生的概率,但是问题依然很严峻,多线程引发的问题占比并没有明显的下降,异步编程本来就是很复杂的事情,单靠规范和培训是难以从根本上解决问题的,需要有更加好的编程方式来解决。
上述问题在很多系统和语言开发中都可能会碰到,解决问题的标准方式就是使用协程,C#、Kotlin、Python、Javascript 等热门语言均支持协程极其相关语法,使用这些语言的开发者可以很方便的使用协程及相关功能进行异步编程。
2017 年的 C++ 标准开始支持协程,Swift5 中也包含了协程相关的标准,从现在的发展趋势看基于协程的全新的异步编程方式,是我们解决现有异步编程问题的有效的方式,但是苹果基本已经不会升级 Objective-C 了,因此使用Objective-C的开发者是无法使用官方的协程能力的,而最新 Swift 的发布和推广也还需要时日,为了让广大iOS开发者能快速享受到协程带来的编程方式上的改变,手机淘宝架构团队基于长期对系统底层库和汇编的研究,通过汇编和C语言实现了支持 Objective-C 和 Swift 协程的完美解决方案 —— coobjc。
核心能力
内置系统扩展库
coobjc设计
最底层是协程内核,包含了栈切换的管理、协程调度器的实现、协程间通信channel的实现等。
中间层是基于协程的 *** 作符的包装,目前支持async/await、Generator、Actor等编程模型。
最上层是对系统库的协程化扩展,目前基本上覆盖了Foundation和UIKit的所有IO和耗时方法。
核心实现原理
协程的核心思想是控制调用栈的主动让出和恢复。一般的协程实现都会提供两个重要的 *** 作:
我们基于线程的代码执行时候,是没法做出暂停 *** 作的,我们现在要做的事情就是要代码执行能够暂停,还能够再恢复。 基本上代码执行都是一种基于调用栈的模型,所以如果我们能把当前调用栈上的状态都保存下来,然后再能从缓存中恢复,那我们就能够实现yield和 resume。
实现这样 *** 作有几种方法呢?
上述第三种和第四种只是能过做到跳转,但是没法保存调用栈上的状态,看起来基本上不能算是实现了协程,只能算做做demo,第五种除非官方支持,否则自行改写编译器通用性很差。而第一种方案的 ucontext 在iOS上是废弃了的,不能使用。那么我们使用的是第二种方案,自己用汇编模拟一下 ucontext。
模拟ucontext的核心是通过getContext和setContext实现保存和恢复调用栈。需要熟悉不同CPU架构下的调用约定(Calling Convention) 汇编实现就是要针对不同cpu实现一套,我们目前实现了 armv7、arm64、i386、x86_64,支持iPhone真机和模拟器。
说了这么多,还是看看代码吧,我们从一个简单的网络请求加载功能来看看coobjc到底是如何使用的。
下面是最普通的网络请求的写法:
下面是使用coobjc库协程化改造后的代码:
原本需要20行的代码,通过coobjc协程化改造后,减少了一半,整个代码逻辑和可读性都更加好,这就是coobjc强大的能力,能把原本很复杂的异步代码,通过协程化改造,转变成逻辑简洁的顺序调用。
coobjc还有很多其他强大的能力,本文对于coobjc的实际使用就不过多介绍了,感兴趣的朋友可以去官方github仓库自行下载查看。
我们在iPhone7 iOS1141的设备上使用协程和传统多线程方式分别模拟高并发读取数据的场景,下面是两种方式得到的压测数据。
从上面的表格我们可以看到使用在并发量很小的场景,由于多线程可以完全使用设备的计算核心,因此coobjc总耗时要比传统多线程略高,但是由于整体耗时都很小,因此差异并不明显,但是随着并发量的增大,coobjc的优势开始逐渐体现出来,当并发量超过1000以后,传统多线程开始出现线程分配异常,而导致很多并发任务并没有执行,因此在上表中显示的是大于20秒,实际是任务已经无法正常执行了,但是coobjc仍然可以正常运行。
我们在手机淘宝这种超级App中尝试了协程化改造,针对部分性能差的页面,我们发现在滑动过程中存在很多主线程IO调用、数据解析,导致帧率下降严重,通过引入coobjc,在不改变原有业务代码的基础上,通过全局hook部分IO、数据解析方法,即可让原来在主线程中同步执行的IO方法异步执行,并且不影响原有的业务逻辑,通过测试验证,这样的改造在低端机(iPhone6及以下的机器)上的帧率有20%左右的提升。
简明
易用
清晰
性能
程序是写来给人读的,只会偶尔让机器执行一下。——Abelson and Sussman
基于协程实现的编程范式能够帮助开发者编写出更加优美、健壮、可读性更强的代码。
协程可以帮助我们在编写并发代码的过程中减少线程和锁的使用,提升应用的性能和稳定性。
本文作者:淘宝技术
中国青年网北京8月29日电(记者 白玉清)8月28日,阿里影业与全民狂欢影业、西虹市影业共同签署了一份有关剧集和合作的框架协议。在未来两年内,三家影企将充分结合各自的优势资源,就影视作品的投资、制作、宣发层面展开合作,为市场输出更多优秀影视作品。协议生效后,阿里影业将拥有全民狂欢影业、西虹市影业旗下项目的优先投资权,并以主宣发方的身份,为合作伙伴最大程度挖掘、剧集的商业化价值。
三方合作后即将开拍的新《全民狂欢》,将由阿里影业担任投资方,《全民狂欢》也将作为又一个重点影片项目,加入到阿里影业的“锦橙合制计划”片单中。据悉,这部由闫非、彭大魔执导的新片延用了《西虹市首富》原班人马,由沈腾担任主演,该片计划于2021年上映。
目前,“锦橙合制计划”推出两年来,已经产出了多部优秀作品,覆盖了多种类型题材。其中,在刚刚过去的七夕档,《我在时间尽头等你》单日票房达到27亿,成为七夕档影史票房冠军;此外,电商脱贫公益主题《一点就到家》、由刘德华监制的《拆d专家2》、由许鞍华执导的《第一炉香》,以及与追光动画打造的《哪吒重生》等影片也将于今年陆续和观众见面。
西虹市影业的主要发起人为导演闫非、彭大魔,公司拥有一支由优秀编剧、导演、制片人组成的专业创作团队,善于优质影视内容的开发工作,代表作品有《西虹市首富》、网络剧《不能犯规的游戏》等,其中《西虹市首富》曾取得2019年暑期档票房亚军的好成绩;全民狂欢影业的艺术总监,正是之前与西虹市影业、阿里影业合作并出任《西虹市首富》主演的著名演员沈腾,因此三方的此次合作有着较好的基础。
在《全民狂欢》之外,阿里影业还将继续负责《全民狂欢》同名电视剧作品的投资开发等工作。在此之前,阿里影业曾成功对《长安十二时辰》、《鹤唳华亭》等知名IP进行了电视剧改编。其中《长安十二时辰》不仅获得了7项国内外奖项,更成为了2019年爆款热播电视剧;而《鹤唳华亭》也凭借着精良的制作,获得了26届上海电视节白玉兰奖的多项提名。
此次与西虹市影业、全民狂欢影业在内容层面的深化合作过程中,阿里影业也将进一步利用其在影视作品剧本改编方面的丰富经验,结合西虹市影业、全民狂欢影业的内容创作优势,打造影视作品全链路开发模式。
近年来,阿里影业持续深耕内容领域,相继与亭东影业、华谊兄弟、博纳影业等影视公司达成战略合作,在投资制作、宣发、衍生品、艺人经纪等方面开展长期合作。在“锦橙合制计划”中,阿里影业以主投、主控或主宣发的身份,和一流制作团队陆续推出多部优质合制。
曾经从属,后独立。
蚂蚁集团数字支付业务的经营主体支付宝最早于2004年12月由阿里巴巴集团设立,起步于电商场景,历史上曾主要为阿里巴巴集团电商平台提供支付处理和担保交易服务。
2011年7月,蚂蚁、支付宝、阿里巴巴集团、马云及蔡崇信先生与其他相关方签署了《2011年框架协议》等共同明确了蚂蚁、支付宝及阿里巴巴集团的财务及商业关系。2014年8月,公司、阿里巴巴集团、杭州君瀚、杭州君澳、马云及蔡崇信与其他相关方签署了《2014年股权和资产购买协议》等,蚂蚁、支付宝调整了与阿里巴巴集团的关系,《2011年框架协议》终止。
2018年2月,基于《2014年股权和资产购买协议》项下阿里巴巴集团取得蚂蚁33%股份的安排。2019年9月,根据约定,阿里巴巴集团通过其境内间接全资子公司杭州阿里巴巴取得了蚂蚁集团33%股份;阿里巴巴集团的全资子公司Taobao Holding Limited取得了蚂蚁国际向其发行的1172亿股不具有表决权的C类股份。
差不多同一时间,阿里巴巴集团与蚂蚁集团签署了多项与知识产权转让相关的协议,终止有关软件技术服务费及许可使用费。2020年,蚂蚁集团上市前夕,该知识产权分润计划终止,阿里巴巴获得蚂蚁集团33%股权。
蚂蚁在回复中称,除了与阿里巴巴体系(包括但不限于淘宝、天猫、物流(菜鸟)、阿里云、视频(优酷)浏览器(UC)、地图(高德)、企业通讯(钉钉)等各业务板块)交易平台提供服务外,蚂蚁的数字支付和数字金融科技服务已拓展至中国消费者和小微企业日常商业交易的大部分场景,交易规模及收入的大部分均来源于阿里巴巴集团以外的场景。
合并了。根据查询相关资料显示:2016年12月7日中国移动与阿里巴巴在北京签署战略合作框架协议。签约双方为积极践行网络强国战略和互联网+行动计划,顺应产业发展趋势,将在新兴领域、基础通信服务、信息基础设施、营销合作等四大领域开展深入合作,聚焦新市场、创造新价值。中国移动董事长尚冰、总裁李跃、副总裁沙跃家、李慧镝,阿里巴巴集团董事局主席马云、CEO张勇、蚂蚁金服集团CEO井贤栋、阿里巴巴集团首席技术官张建锋、资深副总裁兼阿里云总裁胡晓明、菜鸟网络CEO童文红出席签约仪式。中国移动总裁李跃和阿里巴巴集团CEO张勇代表双方签署战略合作框架协议。2022年4月。宁波阿里中心,位于海曙区甬水桥,是阿里巴巴集团在宁波设立的独立法人机构。根据宁波阿里中心官网显示,再022年4月开放展览,2020年5月19日,宁波与阿里巴巴集团签署全面合作框架协议,淘宝直播产业基地及淘宝大学落地,并举办了“市长来了”“智能制造”等系列活动。围绕石化、汽车制造、家电、纺织服装等优势产业,加强工业互联网领域合作,打造全国领先的“工业互联网之城”;共建数字化供应链中心、国家级跨境电商枢纽中心,打造具有全球竞争力和枢纽型的新型国际贸易中心。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)