精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

特级西西www444人体聚色| 亚洲欧美日韩国产综合| 欧美性xxxx18| 亚洲成年人影院| 欧美大香线蕉线伊人久久国产精品| 亚洲欧美日韩第一页| 国产精品国精产品一二| 中文日韩欧美| 日韩欧美激情四射| 草b视频在线观看| 水莓100在线视频| 久久国产精品美女| 欧美国产视频在线| 国产主播欧美精品| 欧美牲交a欧美牲交| 男人av在线| 国产真实乱对白精彩久久| 久久精品在线视频| 亚洲自拍偷拍精品| 黄色视屏在线免费观看| 国产精品国产自产拍高清av王其| 99超碰麻豆| 国产做受高潮漫动| 国产亚洲久一区二区| 一区在线影院| 91麻豆国产在线观看| 亚洲**2019国产| 瑟瑟视频在线观看| 日韩成人久久| 色欧美片视频在线观看在线视频| 一区二区冒白浆视频| 少妇被躁爽到高潮无码文| 99国产精品久久一区二区三区| 欧美日韩一区二区在线播放| 二级片在线观看| 亚欧在线观看视频| 老司机精品视频一区二区三区| 97国产在线观看| 手机看片福利视频| 婷婷久久免费视频| 在线亚洲欧美专区二区| 男女高潮又爽又黄又无遮挡| 丝袜美腿美女被狂躁在线观看| 精品制服美女丁香| 国产精品亚洲激情| 日韩精品国产一区二区| 欧美一二三区视频| 亚洲人成网站在线在线观看| 樱花影视一区二区| 国产精品久久久久91| www日韩在线| 国产成人免费9x9x人网站视频| 一区二区三区色| 精品国产乱码久久久久久蜜柚| 91午夜交换视频| 91午夜精品| 在线观看欧美日本| 欧美高清中文字幕| 国产原创在线观看| 久久精品男人天堂av| 国产麻豆日韩| 国产又粗又猛又爽又黄的视频一 | 一本一本久久a久久精品综合妖精| 人妻少妇一区二区三区| 国产成人一区二区精品非洲| 91网在线免费观看| 91中文字幕在线视频| 日韩av二区在线播放| 久久九九久精品国产免费直播| 欧美日韩国产精品一区二区不卡中文| 欧美影视一区二区| 国产强伦人妻毛片| 毛片不卡一区二区| 日韩美女主播视频| 日韩精品一区二区三区国语自制| 欧美激情亚洲| 在线观看成人黄色| 国产无遮挡在线观看| 久久91麻豆精品一区| 亚洲欧美在线看| 黄色国产在线视频| 欧美日韩一本| 日韩成人在线播放| 91中文字幕永久在线| 午夜a一级毛片亚洲欧洲| 精品88久久久久88久久久| 特黄特色免费视频| 五月综合久久| 中文字幕一区日韩电影| 日韩一级片在线免费观看| 久久免费大视频| 美女黄色丝袜一区| 欧美激情一区二区视频| 国产日韩欧美一区| 国产精品va在线| wwwwww在线观看| 国内成人精品2018免费看| 久久久精品国产99久久精品芒果| 538国产精品一区二区免费视频| 国产情侣自拍av| 久久综合伊人| 国产在线日韩在线| 99热这里只有精品99| 国产精品77777| 999在线免费观看视频| 国产三级按摩推拿按摩| 91丨porny丨在线| 欧美18视频| 蜜桃av噜噜一区二区三区麻豆| 美腿丝袜一区二区三区| 成人精品视频久久久久| 国产熟妇一区二区三区四区| 国产一区二区精品久久91| 国产精品久久久对白| 偷拍自拍在线视频| 国产精品免费视频网站| 91黄色国产视频| 亚洲AV无码精品色毛片浪潮| 久久精品一区二区三区不卡牛牛| 亚洲国产激情一区二区三区| 国产黄网站在线观看| 黄色一区二区在线| 九九热在线免费| 国产精品丝袜在线播放| 亚洲国产日产av| 俺去亚洲欧洲欧美日韩| 亚洲国产av一区| 欧美午夜精品一区二区三区电影| 精品粉嫩超白一线天av| 老司机av网站| 成人免费直播| 日韩美女视频一区二区 | 国产亚洲一区二区三区四区| 免费看啪啪网站| 97超碰免费在线| 精品美女久久久久久免费| 欧美一级视频免费看| 日韩一级特黄| 亚洲大胆人体在线| 欧美美女性视频| 亚洲经典视频| 精品国产一区av| 最近中文字幕在线观看视频| 高清av一区二区| 99久re热视频精品98| 日韩欧美少妇| 亚洲精品少妇网址| 亚洲国产精品午夜在线观看| 少妇人妻偷人精品一区二区| 好吊日精品视频| 91精品久久久久久久久青青| 国产玉足榨精视频在线观看| 亚洲狼人国产精品| 国产精品视频一二三四区| 亚洲欧美电影| 欧美三级日韩三级| 在线一区二区不卡| 日本一区二区高清不卡| 国模视频一区二区| 久久久91视频| 精品影院一区二区久久久| 国产精品久久久久久久久久久久久久| 激情五月婷婷网| 国产精品123| 国产精品一区在线免费观看| 二区三区精品| 国产亚洲精品一区二区| 中文字幕手机在线观看| 国产一区 二区 三区一级| 欧美精品一区二区三区在线看午夜 | 国产精品国产三级国产| 成人毛片一区二区| 欧美美女福利视频| 精品剧情v国产在线观看在线| 欧美精品一区二区免费| 国产毛片一区二区三区va在线| 日产国产高清一区二区三区| 午夜视频久久久| 国产精品久久亚洲不卡| 亚洲精品美女在线观看| 久久久久久天堂| 噜噜噜久久亚洲精品国产品小说| 国产精品男人爽免费视频1| 婷婷视频在线观看| 欧美三级xxx| 精品亚洲aⅴ无码一区二区三区| 日韩va欧美va亚洲va久久| 久久久久久国产精品免费免费| 婷婷在线视频| 精品三级av在线| 久久一级黄色片| 久久伊99综合婷婷久久伊| 国产精品沙发午睡系列| 精品影片在线观看的网站| 日韩男女性生活视频| 免费日本一区二区三区视频| 久久最新网址| 一区二区亚洲欧洲国产日韩| 一区二区三区午夜| 亚洲国产精品精华液ab| 国产裸体免费无遮挡| 禁断一区二区三区在线| 成人黄色午夜影院| 麻豆网站在线| 亚洲国产另类久久精品| 波多野结衣在线观看一区| 久久久午夜精品| 成人免费网站入口| 五月天国产在线| 精品国产一区二区三区四区在线观看| frxxee中国xxx麻豆hd| 91欧美一区二区| 国产aaaaa毛片| 亚洲精品乱码| 国产乱码一区| 四虎影视在线播放| 欧美精品乱人伦久久久久久| 日韩免费不卡视频| 亚洲欧洲另类国产综合| 野花视频免费在线观看| 在线亚洲精品| 992tv快乐视频| 精品一区二区三区在线| 国产精品亚洲不卡a| 大尺度在线观看| 亚洲丁香日韩| 国产精品日韩欧美大师| www欧美xxxx| 日韩视频在线免费观看| 超碰在线观看99| 一二三区精品福利视频| 精品国产av色一区二区深夜久久 | 欧美一区二区在线视频| 亚洲天堂五月天| 中文天堂在线一区| 性欧美大战久久久久久久| 九色porny自拍视频在线观看| 色视频www在线播放国产成人| 亚洲精品国产片| 亚洲午夜精品久久久久久久久| 中文字幕日韩久久| 日本aⅴ亚洲精品中文乱码| av中文字幕av| 成人看的羞羞网站| 国产自产精品| 国产精区一区二区| 欧美日本高清一区| www久久日com| 中文字幕亚洲一区在线观看| 人妻与黑人一区二区三区| 欧美videos中文字幕| 久久涩涩网站| 国产伦理精品| 在线成人激情视频| 视频污在线观看| 日韩精品一区二区三区在线播放| 性欧美成人播放77777| 精品亚洲国内自在自线福利| 一区二区不卡在线视频 午夜欧美不卡'| 欧美一级在线| 国产精品偷伦免费视频观看的| 国产精品毛片一区二区在线看舒淇 | 日韩黄色免费观看| 日本不卡中文字幕| 欧美日韩一区二区在线免费观看| 西西裸体人体做爰大胆久久久| 亚洲巨乳在线观看| 我不卡伦不卡影院| 喜爱夜蒲2在线| 一区视频在线看| 青青草视频在线免费播放| 中文一区在线| 国产网站免费在线观看| 老**午夜毛片一区二区三区| 欧美一区二区中文字幕| 一本久道久久久| 成年人免费在线播放| 丝袜美腿一区二区三区| 自拍偷拍21p| 欧美日韩伦理片| 亚洲午夜在线观看视频在线| 91久久国产综合| 国产欧美一区二区精品性色| 国产精品久久久久久久无码| 日韩在线观看一区二区| 九九热免费在线观看| 99精品国产在热久久婷婷| 一本大道熟女人妻中文字幕在线| 天堂一区二区在线| 99热成人精品热久久66| 国产一区久久| 免费看又黄又无码的网站| 一个色综合网| 国产精品视频网站在线观看| 欧美一级专区| 国产精品视频一二三四区| 国产精品三上| 爱福利视频一区二区| 中文一区在线| 欧美激情第3页| 成人国产精品免费观看动漫| 少妇一级淫免费播放| 国产精品123区| 亚洲综合网在线观看| 欧美高清一级片在线观看| 无码人妻精品中文字幕 | 久久久久亚洲av片无码下载蜜桃| 亚洲激情男女视频| 五月婷婷综合激情网| 亚洲欧美国产三级| 熟妇熟女乱妇乱女网站| 在线中文字幕-区二区三区四区| 日韩在线中文字| 国产精品vvv| 欧美多人爱爱视频网站| 高端美女服务在线视频播放| 欧美日本精品在线| 日韩高清在线| 国产成人精品免费视频大全最热| 中文有码一区| 五月天久久狠狠| 精品国产一区二区三区久久久蜜臀 | 免费在线看黄色片| 蜜桃久久av一区| 久久这里只精品| 日韩黄色免费电影| 美女一区二区三区视频| 久久精品男女| 97精品人人妻人人| 综合久久一区二区三区| 久久这里只有精品免费| 欧美综合天天夜夜久久| 激情五月婷婷小说| 久久久www成人免费无遮挡大片| 国产suv一区二区三区| 日本高清不卡视频| 国产一区二区三区在线观看| 亚洲欧美另类在线观看| rebdb初裸写真在线观看| 97人人模人人爽视频一区二区| 色999日韩| ww国产内射精品后入国产| 精品在线免费观看| 91社区视频在线观看| 九九色在线视频| 久久久久久91香蕉国产| 欧美videosex性欧美黑吊| 国产99视频在线观看| 136福利精品导航| 国产欧美日韩视频一区二区三区| 日韩av有码| 中文字幕网av| 国产乱码字幕精品高清av| 天堂久久精品忘忧草| 亚洲精品国产成人久久av盗摄| 欧美爱爱小视频| 欧美日韩综合在线| 国产人成在线视频| 精品毛片乱码1区2区3区| 性欧美videoshd高清| 欧美日本国产在线| jizz久久精品永久免费| 欧美18视频| 午夜精品一区二区三区国产| 国产性生交xxxxx免费| 欧美激情一区二区在线| 天天干天天插天天射| www.国产一区| 精品三级在线| 日韩尤物视频| 久久久久中文| 精品人妻中文无码av在线| 欧美色区777第一页| 不卡在线视频| 国产精品igao视频| 国产日韩欧美一区二区三区| 热久久精品国产| 国产亚洲一本大道中文在线| 国产91aaa| 中文字幕亚洲精品乱码| 免费看a级黄色片| 国产精品第五页| 91禁在线观看| 一区国产精品视频| 国产一区二区三区免费观看在线| 一区二区三区四区不卡| 精品一区二区三区欧美| 欧美色图亚洲视频| 欧美猛男gaygay网站| 视频福利在线| 国产91对白在线播放| 日韩av网址大全| 今天免费高清在线观看国语| 99久久er热在这里只有精品15| 精品国产午夜福利| 亚洲欧洲在线看| 成人高清一区| 欧美这里只有精品| 国产精品私房写真福利视频| 一本色道久久综合亚洲|