<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] >[success] # 進程和線程 1. 進程(process):計算機已經運行的程序,是操作系統管理程序的一種方式; 2. 線程(thread):操作系統能夠運行運算調度的最小單位,通常情況下它被包含在進程中,每一個進程中,都會啟動至少一個線程用來執行程序中的代碼,這個線程被稱之為主線程,也可以說進程是線程的容器 3. CPU的運算速度非常快,它可以快速的在多個進程之間迅速的切換 因此我們可以使用電腦一邊上網一遍聽歌 >[success] # 異步、同步、阻塞、非阻塞概念 ~~~ 1.在弄清這些問題前明白一個問題,像java,python 這類語言他是們支持多進程和多線程,這樣的好處就是 如果一下線程或者進程阻塞,可以通過啟用其他線程或者進程來執行程序防止程序卡死,但是同樣的問題 就是這些多線程會產生'線程競爭的情況',需要通過對其加鎖進行防止這類問題的產生,當然java 和 python 是支持異步 2.js是單線程,單線程的解釋'單線程在程序執行時,所走的程序路徑按照連續順序排下來,前面的必須' '處理好,后面的才會執行。'這樣就會出現一個問題,當頁面請求或者在做一件特別耗費時間的任務,整個 程序都會卡死等待這類任務結束才能接下來運行,js又不像java 和 python 這類語言可以開啟其他線程或者進程 來解決這類任務,因此我們可以提出一個設想,這類耗時的任務我們先將其跳過不影響接下來的代碼執行, 在未來的某一個時刻去拿他們最后執行結果 ~~~ >[danger] ##### js這種單線程語言的優缺點 * 優點 ~~~ 1.實現起來比較簡單,執行環境相對單純,我們只要順著正常邏輯思維去寫代碼執行順序 ~~~ * 缺點 ~~~ 1.如果一個任務耗時很長,后面的任務都必須排隊等著,會拖延整個程序的執行,例如: 瀏覽器無響應(假死),往往就是因為某一段Javascript代碼長時間運行(比如死循環), 導致整個頁面卡在這個地方,其他任務無法執行。 ~~~ >[info] ## 同步、異步、阻塞、非阻塞 [內容參考鏈接1](https://www.zhihu.com/question/19732473) [內容參考鏈接2](https://my.oschina.net/huangguangsheng/blog/2231195) ~~~ 1.在了解'同步、異步、阻塞、非阻塞'這四個概念之前,要先知道調用函數的過程分成兩部分'執行操作和返回結果' 2.'同步和異步關注的是消息通信機制' 2.1.同步,就是在發出一個'調用'時,在沒有得到結果之前,該'調用'就不返回。但是一旦調用返回 就得到返回值了,也就是說'調用者主動等待這個調用的結果' 2.2.異步,'調用'在發出之后,這個調用就直接返回了,所以沒有返回'結果',調用者不會立刻得到結果。 而是在'調用'發出后,'被調用者'通過狀態、通知來通知調用者,或通過回調函數處理這個調用 ,異步編程分 多種例如'多線程異步編程'/'單線程異步編程(JS是EventQueue+EventLoop機制完成單線程異步編程的)' 2.3.總結: 同步:'即使調用函數執行的任務比較耗時,也會一直等待直到得到預期結果' 異步:'發出調用之后,馬上返回,但是不會馬上返回預期結果。調用者不必主動等待', '當被調用者得到結果之后會通過回調函數主動通知調用者' 3.'阻塞和非阻塞關注的是程序在等待調用結果(消息,返回值)時的狀態' 3.1.阻塞調用是指調用結果返回之前,當前線程會被掛起。調用線程只有在得到結果之后才會返回。 3.2.非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞當前線程 3.3.總結:'也就是說阻塞與非阻塞主要是程序(線程)等待消息通知時的狀態角度來說' ~~~ >[danger] ##### 參考四種狀態比喻案例 [內容參考鏈接](https://blog.csdn.net/Pythoncxy/article/details/96998336) >[danger] ##### 同步和異步的例子 ~~~ 1.syncAdd 立刻得到結果,asyncAdd稍后才得到結果 ~~~ ~~~ function syncAdd(a, b) { return a + b; } syncAdd(1, 2) // 立即得到結果 3 function asyncAdd(a, b, cb) { setTimeout(function () { cb(a + b); }, 1000) } asyncAdd(1, 2, console.log) // 1s后打印結果 3 ~~~ >[danger] ##### 總結 ~~~ 1.代碼按順序一步一步執行,就是同步是錯的,異步也是按照順序執行的,只不過是執行到他的時候 不關心結果了,被彈出去等到未來在獲取結果,所謂的同步異步是針對結果,不是針對執行順序 ~~~ >[danger] ##### 推薦閱讀 [最官方MDN -- 異步](https://developer.mozilla.org/zh-CN/docs/learn/JavaScript/%E5%BC%82%E6%AD%A5)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看