<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>

                # 線程 線程與進程有很多類似的地方,但是也有部分不一樣。在講進程的時候我們給大家看過一張圖。 ![](https://img.kancloud.cn/df/36/df36b047c71539023e755e918eb06bbe_830x564.png) <center>圖:1.3-3</center> 從圖:1.3-3中可以看出來線程是在進程內創建的,也就說多個線程共享一個進程內的資源;包括內存、地址空間、文件描述符等等。使用多線程是無序執行的,線程的調度和進程一樣,由操作系統來調度,因此什么時候執行我們并不知道。有一句話可以概括線程:線程就是更輕量的進程。 ##### 線程 * 一個進程至少有一個線程 * 同一個進程內的多個線程共享同一份資源 * 文件描述符表 * 信號處理方式 * 當前工作目錄 * 內存地址空間 每個線程有自己的獨立棧,也就是線程內部的變量其他線程拿不到,除非是在進程內的全局變量。 既然有了多進程為什么我們還需要多線程?進程在遇到IO會阻塞,后面的代碼無法執行,這時候CPU處于空跑狀態,為了充分的利用CPU,操作系統會自動把遇到IO阻塞的進程掛起,切換到其他進程。 ### 進程上下文 ![](https://img.kancloud.cn/3e/ac/3eaca68fccdd72874762fddf04c70ec3_743x311.png) <center>圖:1.3-6</center> ### 線程上下文 ![](https://img.kancloud.cn/69/52/69524fbe7ecc69dd2ba74b0a0ac5d6c5_742x401.png) <center>圖:1.4-1</center> 操作系統會給每一個進程分配給可用的時間片,就是每個進程每次運行多久,例如:CPU給每個進程分配了10ms的時間,如果一個進程執行到3ms的時候發生了IO阻塞怎么辦呢?在單線程的情況下,會被切換到另一個進程,當前進程會被掛起。而多線程呢,是盡可能的利用完CPU給這個進程分配的時間片。 舉個“栗子”,微信我們大家都在用,微信很顯然就是一個多線程程序,為什么這樣說呢?我們在跟別人視頻的時候同時還可以跟其他人聊天,還可以使用輸入法輸入文字,選擇表情,如果只有一個線程,那么我們在跟別人視頻的時候這個線程就會阻塞,我們看到微信的界面就會卡死。 一個線程遇到阻塞的時候,會在同一個進程內的其他空閑線程切換,這樣的切換只要消耗線程棧開銷,因此很多時候我們都說線程是輕量級的進程。 因此需要把一個進程里面的任務再次分割成任務片,類似CPU分出來的時間片一樣,分成多少份就開多少個線程。
                  <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>

                              哎呀哎呀视频在线观看