色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

反編譯后代碼分析1

jf_78858299 ? 來源:北洋洋洋 ? 作者:北洋洋洋 ? 2023-02-14 15:25 ? 次閱讀

@

  • 反編譯后代碼分析

關于協程的一些理解

?協程掛起讓異步代碼可以像同步代碼一樣調用,但其本質還是同步,即協程體中的代碼其實是同步。

?

?因為協程也只是對線程池的封裝,所以需要了解些線程的一些知識。線程本身已經有的協程也會有,但是協程有的線程不一定有

?

?編譯器會為每一個掛起函數生成一個匿名內部類,其繼承SuspendLabmba類重寫其invokeSuspend方法,這個方法里面即為協程體的代碼【大致內容請先了解】

?

?編譯器會對協程體中的掛起函數和普通函數進行切割,切割時進行label的自增來保證之后代碼的執行順序,即協程保證運行順序的本質。【對比線程:進行PC程序計數器的控制來恢復執行】

?

?協程體中會添加一個label字段,標識接下來該運行協程體中的哪行代碼【即協程如何知道自己執行到哪步是用這個label完成的】(對比線程:線程存儲下一個代碼指令是用PC計數器來做的)

?

?協程體中的數據,看過之前那篇文章的人應該大致了解掛起函數其實就是匿名內部類,數據是保存在棧幀中的,(對比線程:也是通過棧幀中的局部變量表和操作數棧來存儲數據)

?

?協程體中碰到掛起函數會直接返回,等待掛起函數通知

?

?當我們調用掛起函數時都會傳入一個Continuation,掛起函數執行完正常退出或者拋異常退出這個時候外面的協程需要知道這個信息,怎么通知呢?通過Continuation的resumewith方法,這個方法會再次調用invokeSuspend取出label來保證之后執行代碼的順序,即協程自動恢復運行的本質

?

?(對比線程:方法正常執行完成之后有兩種情況1、正常結束,2.異常退出。其里面的PC計數器保證之后執行的代碼順序,也就是說協程在原本線程之上又加了一層控制)

?

?協程體中可以在開啟一個協程,也就是協程具有父子關系的本質。在協程伊始的時候會默認給一些默認數據(包括協程體運行在哪個線程即調度器其通過攔截器實現,執行狀態檢測用到的Job,攔截器等等)這些數據保存在協程的上下文中,

?

?當在協程體中又開啟了一個協程時,其會獲取父協程的上下文進行和自己的合并作為自己的上下文。

【簡而言之,和協程本身有關的數據保存在上下文中,和業務有關的代碼會放在匿名內部類中。】

?

基礎框架層源碼分析

val createCoroutine = suspend {
                //掛起函數代碼

            }.createCoroutine(object : Continuation<Unit> {
                override val context: CoroutineContext
                    get() = TODO("Not yet implemented")

                override fun resumeWith(result: Result<Unit>) {
     //可從result中獲取返回值或異常
                }
            })

   createCoroutine.resume(Unit)

?1.編譯器會對掛起函數做處理,讓他繼承SuspendCorunting,重寫其invokeSuspend方法,方法體為掛起函數中的代碼 2.當手動調用createCoroutine返回值的resume方法的時候,會調用到resumeWith函數,其里面會調用invokeSuspend也就是掛起函數體里面的代碼,之后兩種情況:3.碰到普通函數直接執行;碰到掛起函數傳入Continuation并直接返回一個標識代表其為掛起函數,這個時候協程直接退出,之后掛起函數執行完調用Continuation的resumeWith繼續執行方法體代碼【通過label確定順序】 4.在invokeSuepend中可以通過result獲取掛起函數執行的結果:異常或者返回值。進行對應處理。

?

實戰分析

class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        GlobalScope.launch {
            println("掛起點1開始")
            delay(1000)         //掛起點1
            println("掛起點1結束")
            hello()             //掛起點2
            println("掛起點2結束")
            delay(1000)         //掛起點3
            println("掛起點3結束")
            word()              //掛起點4
        }
    }
    //掛起函數,編譯器默認傳入Continuation
    suspend fun hello(){
        //再次掛起
        withContext(Dispatchers.IO){
            delay(1000)
            println("hello")
        }
    }
    
    suspend fun word(){
        withContext(Dispatchers.IO){
            delay(1000)
            println("word")
        }
    }
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 封裝
    +關注

    關注

    127

    文章

    7990

    瀏覽量

    143278
  • 代碼
    +關注

    關注

    30

    文章

    4823

    瀏覽量

    68904
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19726
收藏 人收藏

    評論

    相關推薦

    一種用于反編譯代碼與源代碼的比較算法

    現有反編譯器產生的代碼與對應的源代碼之間存在差異,找到并理解差異有助于改進并完善反編譯器的設計。該文給出一種適用于C 語言反編譯
    發表于 03-21 15:08 ?10次下載

    8051系列單片機反編譯軟件(工具)

    8051系列單片機反編譯軟件(工具):最好的8051系列單片機反編譯軟件(window版)
    發表于 10-12 10:58 ?275次下載
    8051系列單片機<b class='flag-5'>反編譯</b>軟件(工具)

    8051系列單片機反編譯軟件(dos版)

    8051系列單片機反編譯軟件(dos版):
    發表于 10-12 11:01 ?0次下載
    8051系列單片機<b class='flag-5'>反編譯</b>軟件(dos版)

    反編譯代碼與源代碼的比較算法

    反編譯代碼與源代碼
    發表于 02-09 15:19 ?10次下載

    C32asm國產靜態反編譯工具源代碼

    C32asm國產靜態反編譯工具源代碼 [GLOBENOTE]LanguageChange=必須重新打開應用程序才能生效Done=完成OpenFileErr=打開 %s 文件遭遇錯誤 [GENERAL]ButtonOk=確定
    發表于 02-24 14:12 ?49次下載

    FoxPro編程愛好者的反編譯工具源代碼

    FoxPro編程愛好者的反編譯工具源代碼 UNFOXALL 2.1獻給廣大FoxPro編程愛好者的反編譯工具          &nb
    發表于 02-26 16:13 ?94次下載

    8051系列單片機反編譯軟件.rar

    8051系列單片機反編譯軟件
    發表于 04-13 15:24 ?66次下載

    Android反編譯工具

    Android反編譯工具
    發表于 12-17 15:59 ?21次下載

    8051 MCU反編譯開發方法記錄[

    8051 MCU反編譯開發方法記錄1、項目背景2、開發環境3、開發步驟3.1 反編譯3.2 找出EEPROM的寫入地址3.3 找出EEPROM讀寫操作的代碼段3.4 找出EEPROM讀
    發表于 11-29 17:51 ?11次下載
    8051 MCU<b class='flag-5'>反編譯</b>開發方法記錄[

    java反編譯常用的保護技術

    由于Java字節碼的抽象級別較高,因此它們較容易被反編譯。本節介紹了幾種常用的方法,用于保護Java字節碼不被反編譯。通常,這些方法不能夠絕對防止程序被反編譯,而是加大反編譯的難度而已
    發表于 07-29 16:00 ?719次閱讀

    反編譯后代碼分析2

    編譯器會為每一個掛起函數生成一個匿名內部類,其繼承SuspendLabmba類重寫其invokeSuspend方法,這個方法里面即為協程體的代碼【大致內容請先了解】
    的頭像 發表于 02-14 15:27 ?510次閱讀

    SpringBoot項目Jar包加密防止反編譯方案

    最近項目要求部署到其他公司的服務器上,但是又不想將源碼泄露出去。要求對正式環境的啟動包進行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來。
    的頭像 發表于 12-12 14:04 ?1360次閱讀
    SpringBoot項目Jar包加密防止<b class='flag-5'>反編譯</b>方案

    ida反編譯出來代碼能直接用嗎

    IDA反編譯出來的代碼通常 不能直接使用 ,這主要基于以下幾個方面的原因: 一、代碼的不完整性 IDA反編譯生成的代碼可能缺少原始源
    的頭像 發表于 09-02 10:55 ?794次閱讀

    java反編譯代碼可以修改么

    的影響。 1. Java反編譯工具 在Java反編譯領域,有一些知名的工具可以幫助開發者將字節碼轉換回源代碼。這些工具包括: JD-GUI :一個圖形界面的
    的頭像 發表于 09-02 11:00 ?798次閱讀

    java反編譯能拿到源碼嗎

    在語法和風格上有所不同的代碼,因為它們主要關注于恢復代碼的邏輯結構,而不是精確復制原始代碼的每個細節。 1. 反編譯的基本原理 Java程序
    的頭像 發表于 09-02 11:03 ?1150次閱讀
    主站蜘蛛池模板: 中文字幕精品在线观看 | 好吊射视频988gaocom | 公主纯肉高H文 | 久久机热视频免费 | 第七色男人天堂 | 一本道高清码 | 国产人妻人伦精品59HHH | 狠狠久久免费视频在线 | 中文字幕乱码一区久久麻豆樱花 | 日本不卡免免费观看 | 午夜福利网国产A | 国产精品第一综合首页 | 久久综合色一综合色88 | 无限资源好看片2019免费观看 | 欧美极限变态扩张video | 久久久久99精品成人片三人毛片 | s8sp视频高清在线播放 | 色色色久久久免费视频 | 色婷婷国产麻豆AV | 亚洲精品乱码久久久久久v 亚洲精品乱码电影在线观看 | 91视频夜色| 国产午夜精品久久理论片小说 | 午夜男女爽爽羞羞影院在线观看 | 成年性生交大片免费看 | 国产免费久久爱久久啪 | 扒开腿狂躁女人GIF动态图 | 99热精品在线av播放 | 亚洲精品国产A久久久久久 亚洲精品国产AV成人毛片 | 欧美男男网站免费观看videos | 在线日本高清日本免费 | 玖玖热视频一区二区人妻 | 玉林天天论坛 | 最新国自产拍天天更新 | 在线va无卡无码高清 | 两个客户一起吃我的奶 | 2023极品少妇XXXO露脸 | 两个奶被男人揉了一个晚上 | 久久精品AV麻豆 | 久久伊人草 | 久久中文字幕免费高清 | 热の中文 AV天堂 |