精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

剛剛,阿里開源 iOS 協程開發框架 coobjc!

開發 開發工具
剛剛,阿里巴巴正式對外開源了基于 Apache 2.0 協議的協程開發框架 coobjc,開發者們可以在 Github 上自主下載。

[[258500]]

剛剛,阿里巴巴正式對外開源了基于 Apache 2.0 協議的協程開發框架 coobjc,開發者們可以在 Github 上自主下載。

coobjc是為iOS平臺打造的開源協程開發框架,支持Objective-C和Swift,同時提供了cokit庫為Foundation和UIKit中的部分API提供了協程化支持,本文將為大家詳細介紹coobjc的設計理念及核心優勢。

開源地址

https://github.com/alibaba/coobjc

iOS異步編程問題

從2008年***個iOS版本發布至今的11年時間里,iOS的異步編程方式發展緩慢。

 

基于 Block 的異步編程回調是目前 iOS 使用最廣泛的異步編程方式,iOS 系統提供的 GCD 庫讓異步開發變得很簡單方便,但是基于這種編程方式的缺點也有很多,主要有以下幾點:

  • 容易進入"嵌套地獄"
  • 錯誤處理復雜和冗長
  • 容易忘記調用 completion handler
  • 條件執行變得很困難
  • 從互相獨立的調用中組合返回結果變得極其困難
  • 在錯誤的線程中繼續執行(如子線程操作UI)
  • 難以定位原因的多線程崩潰(手淘中多線程crash已占比60%以上)
  • 鎖和信號量濫用帶來的卡頓、卡死

針對多線程以及尤其引發的各種崩潰和性能問題,我們制定了很多編程規范、進行了各種新人培訓,嘗試降低問題發生的概率,但是問題依然很嚴峻,多線程引發的問題占比并沒有明顯的下降,異步編程本來就是很復雜的事情,單靠規范和培訓是難以從根本上解決問題的,需要有更加好的編程方式來解決。

解決方案

上述問題在很多系統和語言開發中都可能會碰到,解決問題的標準方式就是使用協程,C#、Kotlin、Python、Javascript 等熱門語言均支持協程極其相關語法,使用這些語言的開發者可以很方便的使用協程及相關功能進行異步編程。

2017 年的 C++ 標準開始支持協程,Swift5 中也包含了協程相關的標準,從現在的發展趨勢看基于協程的全新的異步編程方式,是我們解決現有異步編程問題的有效的方式,但是蘋果基本已經不會升級 Objective-C 了,因此使用Objective-C的開發者是無法使用官方的協程能力的,而*** Swift 的發布和推廣也還需要時日,為了讓廣大iOS開發者能快速享受到協程帶來的編程方式上的改變,手機淘寶架構團隊基于長期對系統底層庫和匯編的研究,通過匯編和C語言實現了支持 Objective-C 和 Swift 協程的***解決方案 —— coobjc。

核心能力

  • 提供了類似C#和Javascript語言中的Async/Await編程方式支持,在協程中通過調用await方法即可同步得到異步方法的執行結果,非常適合IO、網絡等異步耗時調用的同步順序執行改造。
  • 提供了類似Kotlin中的Generator功能,用于懶計算生成序列化數據,非常適合多線程可中斷的序列化數據生成和訪問。
  • 提供了Actor Model的實現,基于Actor Model,開發者可以開發出更加線程安全的模塊,避免由于直接函數調用引發的各種多線程崩潰問題。
  • 提供了元組的支持,通過元組Objective-C開發者可以享受到類似Python語言中多值返回的好處。

內置系統擴展庫

  • 提供了對NSArray、NSDictionary等容器庫的協程化擴展,用于解決序列化和反序列化過程中的異步調用問題。
  • 提供了對NSData、NSString、UIImage等數據對象的協程化擴展,用于解決讀寫IO過程中的異步調用問題。
  • 提供了對NSURLConnection和NSURLSession的協程化擴展,用于解決網絡異步請求過程中的異步調用問題。
  • 提供了對NSKeyedArchieve、NSJSONSerialization等解析庫的擴展,用于解決解析過程中的異步調用問題。

coobjc設計

 

  • ***層是協程內核,包含了棧切換的管理、協程調度器的實現、協程間通信channel的實現等。
  • 中間層是基于協程的操作符的包裝,目前支持async/await、Generator、Actor等編程模型。
  • 最上層是對系統庫的協程化擴展,目前基本上覆蓋了Foundation和UIKit的所有IO和耗時方法。

核心實現原理

協程的核心思想是控制調用棧的主動讓出和恢復。一般的協程實現都會提供兩個重要的操作:

  • Yield:是讓出cpu的意思,它會中斷當前的執行,回到上一次Resume的地方。
  • Resume:繼續協程的運行。執行Resume后,回到上一次協程Yield的地方。

我們基于線程的代碼執行時候,是沒法做出暫停操作的,我們現在要做的事情就是要代碼執行能夠暫停,還能夠再恢復。 基本上代碼執行都是一種基于調用棧的模型,所以如果我們能把當前調用棧上的狀態都保存下來,然后再能從緩存中恢復,那我們就能夠實現yield和 resume。

實現這樣操作有幾種方法呢?

  • ***種:利用glibc 的 ucontext組件(云風的庫)。
  • 第二種:使用匯編代碼來切換上下文(實現c協程),原理同ucontext。
  • 第三種:利用C語言語法switch-case的奇淫技巧來實現(Protothreads)。
  • 第四種:利用了 C 語言的 setjmp 和 longjmp。
  • 第五種:利用編譯器支持語法糖。

上述第三種和第四種只是能過做到跳轉,但是沒法保存調用棧上的狀態,看起來基本上不能算是實現了協程,只能算做做demo,第五種除非官方支持,否則自行改寫編譯器通用性很差。而***種方案的 ucontext 在iOS上是廢棄了的,不能使用。那么我們使用的是第二種方案,自己用匯編模擬一下 ucontext。

模擬ucontext的核心是通過getContext和setContext實現保存和恢復調用棧。需要熟悉不同CPU架構下的調用約定(Calling Convention). 匯編實現就是要針對不同cpu實現一套,我們目前實現了 armv7、arm64、i386、x86_64,支持iPhone真機和模擬器。

Show me the code

說了這么多,還是看看代碼吧,我們從一個簡單的網絡請求加載圖片功能來看看coobjc到底是如何使用的。

下面是最普通的網絡請求的寫法:

 

下面是使用coobjc庫協程化改造后的代碼:

 

原本需要20行的代碼,通過coobjc協程化改造后,減少了一半,整個代碼邏輯和可讀性都更加好,這就是coobjc強大的能力,能把原本很復雜的異步代碼,通過協程化改造,轉變成邏輯簡潔的順序調用。

coobjc還有很多其他強大的能力,本文對于coobjc的實際使用就不過多介紹了,感興趣的朋友可以去官方github倉庫自行下載查看。

性能提升

我們在iPhone7 iOS11.4.1的設備上使用協程和傳統多線程方式分別模擬高并發讀取數據的場景,下面是兩種方式得到的壓測數據。

  • 測試機器:iPhone7 iOS11.4.1
  • 數據文件大小:20M
  • 協程最多使用線程數:4
  • 數據測試結果(統計的是所有并發訪問結束的總耗時):

 

從上面的表格我們可以看到使用在并發量很小的場景,由于多線程可以完全使用設備的計算核心,因此coobjc總耗時要比傳統多線程略高,但是由于整體耗時都很小,因此差異并不明顯,但是隨著并發量的增大,coobjc的優勢開始逐漸體現出來,當并發量超過1000以后,傳統多線程開始出現線程分配異常,而導致很多并發任務并沒有執行,因此在上表中顯示的是大于20秒,實際是任務已經無法正常執行了,但是coobjc仍然可以正常運行。

我們在手機淘寶這種超級App中嘗試了協程化改造,針對部分性能差的頁面,我們發現在滑動過程中存在很多主線程IO調用、數據解析,導致幀率下降嚴重,通過引入coobjc,在不改變原有業務代碼的基礎上,通過全局hook部分IO、數據解析方法,即可讓原來在主線程中同步執行的IO方法異步執行,并且不影響原有的業務邏輯,通過測試驗證,這樣的改造在低端機(iPhone6及以下的機器)上的幀率有20%左右的提升。

優勢

簡明

  • 概念少:只有很少的幾個操作符,相比響應式幾十個操作符,簡直不能再簡單了。
  • 原理簡單:協程的實現原理很簡單,整個協程庫只有幾千行代碼。

易用

  • 使用簡單:它的使用方式比GCD還要簡單,接口很少。
  • 改造方便:現有代碼只需要進行很少的改動就可以協程化,同時我們針對系統庫提供了大量協程化接口。

清晰

  • 同步寫異步邏輯:同步順序方式寫代碼是人類最容易接受的方式,這可以極大的減少出錯的概率。
  • 可讀性高:使用協程方式編寫的代碼比block嵌套寫出來的代碼可讀性要高很多。

性能

  • 調度性能更快:協程本身不需要進行內核級線程的切換,調度性能快,即使創建上萬個協程也毫無壓力。
  • 減少卡頓卡死: 協程的使用以幫助開發減少鎖、信號量的濫用,通過封裝會引起阻塞的IO等協程接口,可以從根源上減少卡頓、卡死,提升應用整體的性能。

總結

程序是寫來給人讀的,只會偶爾讓機器執行一下。——Abelson and Sussman

基于協程實現的編程范式能夠幫助開發者編寫出更加優美、健壯、可讀性更強的代碼。

協程可以幫助我們在編寫并發代碼的過程中減少線程和鎖的使用,提升應用的性能和穩定性。

【本文為51CTO專欄作者“阿里巴巴官方技術”原創稿件,轉載請聯系原作者】

 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 阿里技術
相關推薦

2013-07-24 18:22:02

iOS開發學習iOS開源框架和類

2021-09-16 09:59:13

PythonJavaScript代碼

2011-08-18 11:10:49

Core Plot框架IOS開發

2024-09-25 08:28:45

2025-03-26 01:22:00

NtyCo協程框架

2023-11-17 11:36:59

協程纖程操作系統

2025-01-26 00:00:15

PHP協程控制權

2025-06-26 04:10:00

2020-04-08 09:06:34

Android 協程開發

2020-07-07 09:19:28

Android 協程開發

2023-10-24 19:37:34

協程Java

2025-02-08 09:13:40

2021-12-09 06:41:56

Python協程多并發

2020-04-23 09:33:32

Android 協程開發

2024-10-18 10:27:50

PHP框架webma

2022-09-06 20:30:48

協程Context主線程

2020-11-29 17:03:08

進程線程協程

2016-10-28 17:39:47

phpgolangcoroutine

2017-05-02 11:38:00

PHP協程實現過程

2023-08-08 07:18:17

協程管道函數
點贊
收藏

51CTO技術棧公眾號

亚洲天堂av线| 成人av影视在线| 夫妇露脸对白88av| 成人短视频软件网站大全app| 国产精品美日韩| 92国产精品视频| 国产精品黄色大片| 成人女性视频| 日韩一区二区视频| 黄在线观看网站| 亚洲视频tv| 国产精品18久久久久久vr| 7m第一福利500精品视频| 成人黄色免费网址| 亚洲电影一区| 欧美吞精做爰啪啪高潮| 欧美国产视频一区| 国产日韩精品在线看| 国产成人av影院| 国产91精品在线播放| 久久久久久久九九九九| 欧美一级淫片| 亚洲国产成人久久| www.成人黄色| 超碰国产一区| 亚洲图片欧美综合| 亚洲午夜精品一区二区| 四虎在线免费观看| 国产成人免费av在线| 国产精品福利无圣光在线一区| 五月婷婷一区二区| 日韩成人影院| 亚洲欧洲自拍偷拍| 在线xxxxx| 国产精品视频一区二区三区综合 | 国产乱码精品一区二区三区五月婷| 97成人在线视频| 欧美精品99久久久| 亚洲成av人片乱码色午夜| 亚洲人成电影网| 国产不卡一二三| 精品亚洲二区| 欧美日韩国产另类不卡| 北条麻妃在线视频| 涩涩在线视频| 亚洲成人av一区| 成年在线观看视频| 黄色在线视频网站| 国产精品乱人伦| 色噜噜狠狠色综合网| 深夜福利在线观看直播| k8久久久一区二区三区| 91成人伦理在线电影| 97国产成人无码精品久久久| 日本不卡中文字幕| 国产精品678| 337p粉嫩色噜噜噜大肥臀| 亚洲一区二区动漫| 国内久久久精品| 特级片在线观看| 国产精品v日韩精品v欧美精品网站| 理论片在线不卡免费观看| 战狼4完整免费观看在线播放版| 欧美自拍偷拍| 色哟哟亚洲精品一区二区| 女人十八毛片嫩草av| 国产一区日韩| 色综合影院在线| 老司机精品免费视频| 久久中文亚洲字幕| 日韩视频免费中文字幕| 99热在线观看精品| 偷偷www综合久久久久久久| 久久精彩免费视频| 91久久久久久久一区二区| 女人18毛片毛片毛片毛片区二| 日韩精品一区二区久久| 久久精品福利视频| 日本黄色小说视频| 亚洲午夜精品久久久久久app| 欧美激情2020午夜免费观看| 国产成人精品a视频一区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 今天的高清视频免费播放成人| 欧美精品www| 韩国av免费观看| 三级精品在线观看| 成人性生交xxxxx网站| 亚洲精品18p| 2014亚洲片线观看视频免费| 亚洲国产精品一区二区第一页 | 欧美激情在线看| av动漫免费观看| 丁香花视频在线观看| 精品国产999| 国产小视频精品| 麻豆国产一区| 亚洲精品视频网上网址在线观看| 一级特黄曰皮片视频| 自产国语精品视频| 日本中文字幕成人| av一级黄色片| 国产亚洲精品中文字幕| 99视频精品全部免费看| 涩涩视频在线| 日韩精品一区二区三区视频在线观看| 朝桐光av一区二区三区| 日韩欧美1区| 8050国产精品久久久久久| 在线观看亚洲国产| 不卡在线视频中文字幕| 一区二区冒白浆视频| 韩国成人免费视频| 欧美丝袜自拍制服另类| 中国xxxx性xxxx产国| 日韩大片在线| 日本精品久久久久久久| 精品免费久久久| 国产网站一区二区| 女人被男人躁得好爽免费视频| 二区三区不卡| 亚洲国产精品va在线观看黑人| 99自拍偷拍视频| 媚黑女一区二区| 国产传媒欧美日韩| 黄色网址在线免费观看| 欧美视频一区二区三区…| 中文字幕在线播放一区二区| 日韩美女一区二区三区在线观看| 97国产在线观看| 国产成人三级在线播放| 国产精品视频你懂的| 1024av视频| 999在线精品| 久久亚洲私人国产精品va| 波多野结衣一二区| 99国产欧美久久久精品| 大伊香蕉精品视频在线| 精品一区二区三区中文字幕视频| 中文字幕成人精品久久不卡| 在线观看 亚洲| 97久久超碰精品国产| 成人免费视频91| www.豆豆成人网.com| 久久精品久久久久久| 中文字幕在线观看你懂的| 久久久久久久久久久电影| 成人免费视频91| 亚洲综合影院| 欧美丰满老妇厨房牲生活| 国产青青草视频| 亚洲视频小说图片| 99九九精品视频| 香蕉综合视频| 91午夜理伦私人影院| 欧美a免费在线| 欧美精品欧美精品系列| 欧洲美一区二区三区亚洲| 午夜亚洲性色视频| 欧美国产二区| 写真福利精品福利在线观看| 亚洲欧美资源在线| 樱花视频在线免费观看| 国产欧美一区二区精品性色| 日本 片 成人 在线| 色乱码一区二区三区网站| 国产欧美日韩综合精品| 麻豆网站在线免费观看| 欧美一级日韩免费不卡| 欧美日韩在线观看免费| 成人免费看黄yyy456| 欧美成人精品免费| 日本一道高清一区二区三区| 日本高清+成人网在线观看| 天堂av电影在线观看| 在线看国产日韩| 欧美特黄一级片| 国产成人av电影免费在线观看| 东北少妇不带套对白| 亚洲欧洲色图| 国产欧美一区二区三区在线| h片在线播放| 亚洲第一福利网站| 精品成人无码久久久久久| 国产精品理论片在线观看| 黄色一级片免费播放| 在线视频观看日韩| 亚洲高清精品中出| 久久久国产精品入口麻豆| 国内自拍欧美激情| 韩国精品视频| 日韩精品一区二区三区在线播放| 成人免费看片98欧美| 国产精品麻豆一区二区| 日本黄色大片在线观看| 性欧美精品高清| 中文字幕人成一区| 精品久久对白| 国产精品美女www| 国产第一页在线视频| 亚洲片av在线| 亚洲福利在线观看视频| 91成人在线精品| 青青草原在线免费观看视频| 久久久天堂av| 免费看三级黄色片| 日韩精品一级二级 | 99porn视频在线| 六月婷婷综合| 色综合久久88| av电影在线观看网址| 亚洲电影免费观看高清| 在线观看色网站| 日韩欧美在线视频观看| 欧美极品视频在线观看| 国产欧美一区二区精品秋霞影院| 最新版天堂资源在线| 麻豆一区二区三| av网站在线观看不卡| 91成人看片| 日产国产精品精品a∨| 北条麻妃一区二区三区在线观看| 国产欧美va欧美va香蕉在线| 在线成人av观看| 欧美精品福利在线| 91网址在线观看| 中文字幕在线亚洲| 久草福利在线视频| 亚洲福利视频二区| 刘亦菲久久免费一区二区| 欧美精品久久一区| 中文字幕永久免费视频| 欧美色视频日本版| 可以免费看的av毛片| 亚洲一级在线观看| 国产大片免费看| 亚洲欧美中日韩| 女人裸体性做爰全过| 国产欧美日产一区| 亚洲精品成人无码| 久久免费国产精品| 右手影院亚洲欧美| av一区二区三区| 丰满岳乱妇一区二区| 成人av免费在线播放| 亚洲一级Av无码毛片久久精品| 国产成人精品一区二区三区四区 | 欧美一级特黄a| 日韩在线a电影| 国内自拍视频一区| 天堂一区二区在线| 国产精品亚洲二区在线观看| 久久性色av| 国内自拍视频网| 人禽交欧美网站| 香蕉视频999| 韩国一区二区三区| 三级网站免费看| 成人污视频在线观看| 超碰男人的天堂| 久久综合国产精品| 极品人妻videosss人妻| 国产精品久久久久久久裸模| 国产午夜精品理论片在线| 一区二区三区中文字幕| 日本三级免费看| 日韩欧美精品在线观看| 久久影视中文字幕| 欧美高清精品3d| 国产wwwwwww| 亚洲国模精品私拍| 国产在线观看免费网站| 色黄久久久久久| 污片视频在线免费观看| 97在线观看视频国产| 一个人www视频在线免费观看| 日本高清视频精品| 波多一区二区| 国内精久久久久久久久久人| 欧美大片高清| 国产精品久久久久久网站| 国产午夜精品一区在线观看 | 嫩草影院中文字幕| 国产一区日韩一区| 国产男女激情视频| 男男视频亚洲欧美| 污视频网址在线观看| 成人h版在线观看| 最近中文字幕免费视频| 欧美国产精品专区| 久久人人爽人人爽人人| 黑人巨大精品欧美一区二区三区 | 午夜在线播放| 久久久伊人日本| 新片速递亚洲合集欧美合集| 国产美女搞久久| 欧美人体视频| 在线观看福利一区| 亚洲二区视频| 伊人成人开心激情综合网| 国产精品毛片久久久久久久av| 精品卡一卡二卡三卡四在线| 欧美69xxxxx| 精品国内自产拍在线观看| 性xxxxfreexxxxx欧美丶| 国产精品嫩草视频| 一区二区三区国产好| 五月婷婷综合色| 韩国一区二区三区在线观看| 日韩av一二三四| 岛国精品在线观看| 日本欧美一区二区三区不卡视频| 亚洲欧美一区二区三区孕妇| 潘金莲一级淫片aaaaaa播放| 91精品国产综合久久精品| 色婷婷av一区二区三| 中文字幕视频一区二区在线有码| 色婷婷av在线| 91网站免费观看| 欧美日韩激情| www成人免费| 紧缚奴在线一区二区三区| www.久久av| 天天操天天色综合| 国产麻豆免费视频| 国产一区二区三区视频免费| 日韩伦理在线| 99久久精品免费看国产四区| 波多野结衣在线播放一区| 国产成人黄色片| 国产成a人亚洲精品| 四虎精品免费视频| 91福利资源站| 亚洲av成人无码久久精品老人| 久久久久久久久久久免费 | 风韵丰满熟妇啪啪区老熟熟女| 久久精品男人的天堂| 午夜影院在线看| 欧美日韩国产在线播放网站| 嫩草研究院在线观看| 欧美精品xxx| 一区中文字幕电影| 在线播放 亚洲| 精品一区二区三区香蕉蜜桃 | 97视频在线观看网址| 日本一区二区乱| 欧美日韩视频免费在线观看| 理论片日本一区| 最新中文字幕视频| 亚洲成人自拍网| 韩国av在线免费观看| 欧美日韩福利在线观看| 亚洲男人在线| 一区在线电影| 久久精品国产一区二区三| 国产三级aaa| 欧美疯狂性受xxxxx喷水图片| 97视频在线观看网站| 国产精品黄页免费高清在线观看| 日本欧美韩国国产| 久久精品网站视频| 久久精品人人做人人爽97| 国产在线视频第一页| 亚洲国产精品系列| 在线视频超级| 亚洲精品8mav| 男女性色大片免费观看一区二区| 亚洲精品乱码久久久久久久久久久久| 欧美午夜激情小视频| 日本五码在线| 国产精品夜间视频香蕉| 日本在线电影一区二区三区| www.欧美激情.com| 亚洲美女屁股眼交| 性欧美8khd高清极品| 91chinesevideo永久地址| 亚洲桃色综合影院| 第一区免费在线观看| 亚洲人一二三区| 亚洲精品一区二区三区区别 | 99在线免费观看视频| 亚洲激情婷婷| 精品少妇一区二区三区免费观| 欧美日韩视频在线一区二区| wwwav在线| 蜜桃麻豆91| 麻豆国产一区二区| 男人晚上看的视频| 亚洲精品美女网站| 先锋欧美三级| 欧美狂野激情性xxxx在线观| 99久久精品久久久久久清纯| 亚洲一级在线播放| 欧美国产日本高清在线| 久久久久观看| 天天色天天干天天色| 精品二区三区线观看| 精品视频在线一区二区| 91成人免费观看| 日本特黄久久久高潮|