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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                RAW/Callback API是指內核回調型的API,這在許多通信協議的C語言實現中都有所應用。對于從來沒有接觸過回調式編程的人來說,可能理解起來會比較困難,我們在后面的章節中會詳細介紹它。 RAW/Callback API是LwIP的一大特色,在沒有操作系統支持的裸奔環境中,只能使用這種API進行開發,同時這種API也可以用在操作系統環境中。這里先簡要說明一下“回調”的概念。你新建了一個TCP或者UDP的連接,你想等它接收到數據以后去處理它們,這時你需要把處理該數據的操作封裝成一個函數,然后將這個函數的指針注冊到LwIP內核中。LwIP內核會在需要的時候去檢測該連接是否收到數據,如果收到了數據,內核會在第一時間調用注冊的函數,這個過程被稱為“回調”,這個注冊函數被稱為“回調函數”。這個回調函數中裝著你想要的業務邏輯,在這個函數中,你可以自由地處理接收到的數據,也可以發送任何數據,也就是說,這個回調函數就是你的應用程序。到這里,我們可以發現,在回調編程中,LwIP內核把數據交給應用程序的過程就只是一次簡單的函數調用,這是非常節省時間和空間資源的。每一個回調函數實際上只是一個普通的C函數,這個函數在TCP/IP內核中被調用。每一個回調函數都作為一個參數傳遞給當前TCP或UDP連接。而且,為了能夠保存程序的特定狀態,可以向回調函數傳遞一個指定的狀態,并且這個指定的狀態是獨立于TCP/IP協議棧的。。 在有操作系統的環境中,如果使用RAW/Callback API,用戶的應用程序就以回調函數的形式成為了內核代碼的一部分,用戶應用程序和內核程序會處于同一個線程之中,這就省去了任務間通信和切換任務的開銷了。 簡單來說,RAW/Callback API的優點有兩個: 1. 可以在沒有操作系統的環境中使用。 2. 在有操作系統的環境中使用它,對比另外兩種API,可以提高應用程序的效率、節省內存開銷。 RAW/Callback API的優點是顯著的,但缺點也是顯著的: 1. 基于回調函數開發應用程序時的思維過程比較復雜。在后面與RAW/Callback API相關的章節中可以看到,利用回調函數去實現復雜的業務邏輯時,會很麻煩,而且代碼的可讀性較差。 2. 應用程序代碼與內核代碼處于同一個線程,雖然能夠節省任務間通信和切換任務的開銷,但是相應地,應用程序的執行會制約內核程序的執行,不同的應用程序之間也會互相制約。在應用程序執行的過程中,內核程序將不可能得到運行,這會影響網絡數據包的處理效率。如果應用程序占用的時間過長,而且碰巧這時又有大量的數據包到達,由于內核代碼長期得不到執行,網卡接收緩存里的數據包就持續積累,到最后很可能因為滿載而丟棄一些數據包,從而造成丟包的現象。
                  <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>

                              哎呀哎呀视频在线观看