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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在操作系統環境中,可以使用NETCONN API或者Socket API進行網絡應用程序的開發。NETCONN API是基于操作系統的IPC機制(即信號量和郵箱機制)實現的,它的設計將LwIP內核代碼和網絡應用程序分離成了獨立的線程。如此一來,LwIP內核線程就只負責數據包的TCP/IP封裝和拆封,而不用進行數據的應用層處理,大大提高了系統對網絡數據包的處理效率。 前面提到,使用RAW/Callback API會造成內核程序和網絡應用程序、不同網絡應用程序之間的相互制約,如果使用NETCONN API或者Socket API,這種制約將不復存在。 在操作系統環境中,LwIP內核會被實現為一個獨立的線程,名為tcpip\_thread,使用NETCONN API或者Socket API的應用程序處在不同的線程中,我們可以根據任務的重要性,分配不同的優先級給這些線程,從而保證重要任務的時效性。分配優先級的原則是: | 線程 | 優先級 | | --- | --- | |LwIP內核線程tcpip_thread|很高| | 重要的網絡應用程序 |高 | |不太重要而且處理數據比較耗時的網絡應用程序|低| NETCONN API使用了操作系統的IPC機制,對網絡連接進行了抽象,用戶可以像操作文件一樣操作網絡連接(打開/關閉、讀/寫數據)。但是NETCONN API并不如操作文件的API那樣簡單易用。舉個例子,調用f\_read函數讀文件時,讀到的數據會被放在一個用戶指定的數組中,用戶操作起來很方便,而NETCONN API的讀數據API,就沒有那么人性化了。用戶獲得的不是一個數組,而是一個特殊的數據結構netbuf,用戶如果想使用好它,就需要對內核的pbuf和netbuf結構體有所了解,我們會在后續的章節中對它們進行講解。NETCONN API之所以采取這種不人性的設計,是為了避免數據包在內核程序和應用程序之間發生拷貝,從而降低程序運行效率。當然,用戶如果不在意數據遞交時的效率問題,也可以把netbuf中的數據取出來拷貝到一個數組中,然后去處理這個數組。 簡單來說,NETCONN API的優缺點是: 1. 相較于RAW/Callback API,NETCONN API簡化了編程工作,使用戶可以按照操作文件的方式來操作網絡連接。但是,內核程序和網絡應用程序之間的數據包傳遞,需要依靠操作系統的信號量和郵箱機制完成,這需要耗費更多的時間和內存,另外還要加上任務切換的時間開銷,效率較低。 2. 相較于Socket API,NETCONN API避免了內核程序和網絡應用程序之間的數據拷貝,提高了數據遞交的效率。但是,NETCONN API的易用性不如Socket API好,它需要用戶對LwIP內核所使用數據結構有一定的了解。
                  <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>

                              哎呀哎呀视频在线观看