plain framework 1 網絡流 緩存數據詳解

網絡流是什麼?爲何網絡流中須要存在緩存數據?爲何PF中要採用緩存網絡數據的機制?帶着這幾個疑問,讓咱們好好詳細的瞭解一下在網絡數據交互中咱們容易忽視以及薄弱的一塊。該部分爲PF現有的網絡流模型,可是在這裏只講解最本質的概念,而沒有詳細說明代碼,若是有興趣的不妨先看了這部分再去看下代碼,一切或許會豁然開朗。html

網絡流

  若是你不知道計算機中流數據模型的定義,那麼你就能夠試想一下河流,有着固定起點和終點的河流。將流水從某一個地方送向另外一個地方的通道,咱們現實中通常叫作渠道,這種渠道在計算機之間就是網絡,而其中的流水便稱之爲網絡流,其實同其餘的數據流並無什麼本質上的區別。與現實中的河流不同的,就是通常河流只有一個方向,可是網絡中流向能夠是從起點到終點,也能夠從終點向起點,是一個雙方向的流。經過下圖,咱們看下網絡流簡單的模式:c++

網絡數據緩存

  緩存的概念是相對於網絡流的,若是是單純的網絡流,是不須要任何的緩存數據。在咱們創建一個鏈接,打開了雙方之間的雙通道的時候,咱們就能夠向對方傳輸/接收數據。那麼咱們爲何會依賴它,若是沒有這步不是更簡潔麼?的確增長這個機制會使咱們的代碼看起來複雜,可是複雜和簡單是想依賴的,有些時候爲了簡單咱們須要複雜。那這又是爲何呢?下面一步步慢慢講解。git

  一、概念

    這並非一個新的事物,如今已經普遍的被運用在各類應用中,這就是爲何有些人常常說net buffer。c/c++的朋友們應該很瞭解,這裏的buffer讓咱們容易聯想到內存,而這裏的緩存當前也就是內存,在其餘腳本中咱們每每用到temp的機制,這些一樣的也是內存的機制。網絡流緩存就是基於內存的一段反覆可被利用的數據,也能夠說是一段專爲處理網絡流服務的內存。github

  二、兩個重要位置

    1) 頭位置(head)

      頭位置用來記錄當前發送/讀取到的數據位置,當數據發送/讀取的時候該位置向後移動(如同算術右移)。緩存

    2)數據位置(tail)

       數據位置用來記錄當前接收/寫入的數據位置,當數據的接收/寫入的時候該位置向後移動(如同算術右移)。網絡

  三、兩個重要數據

    1)空閒數據

      空閒數據段,指的是這段數據出於空閒的狀態,在有網絡數據的接收和寫入的時候能夠利用的內存段。併發

    2)有效數據

      有效數據段,指的是當前這段數據已被佔用,與空閒數據相對。咱們發送和讀取的數據,必須是有效的數據。性能

  四、內存的常見狀態

    1)向緩存中寫入一段數據

    2)內存中發送一段數據

    3)內存寫入併發送數據

  五、動態展現緩存內存的狀態

    下圖中橙色的部分爲有效數據,白色爲空閒數據,在這裏咱們展現的是輸出流的內存緩存狀態。對應輸出流的狀態基本一致,只不過將這裏的寫入換成接收,將發送換成讀取。加密

    1)最初始的時候,整個內存爲空白的狀態,此時頭位置和內容位置重疊,當寫入數據後內容位置向後移動spa

    2)內存中有了有效數據後,咱們就能夠將有效數據經過套接字發送出去,這個時候頭位置向後移動(第一個框爲頭位置,第二個爲內容位置)

    3)接着第2步,咱們這個時候若是再向內存中寫入一段數據,則內容位置繼續向後移動(第一個框爲頭位置,第二個爲內容位置)

    4)接着第3步,咱們這個時候若是向內存中讀取一段數據併發送,則頭位置繼續向後移動(第一個框爲頭位置,第二個爲內容位置)

    5)在第4步後,沒有寫入新的數據,咱們接着發送內存中的有效數據,直到頭位置和內容位置重疊,這個時候整個緩存都爲空閒狀態(第一個框爲頭位置,第二個爲內容位置)

    6)通過屢次寫的操做後,可能咱們的內容位置已經超出了整個空閒內存的大小,這個時候咱們就須要重複使用前面的內存了(第一個框爲內容位置,第二個爲頭位置)

  六、爲何須要選擇網絡流緩存?

    一是爲了不頻繁的操做套接字接口形成性能上的問題;二是爲了方便控制處理網絡數據,如數據加密壓縮,咱們每每都放在緩存中,當咱們從裏面讀取和寫入的時候不須要特殊的去處理它。

PF商業版核心人員招募

開篇語
  咱們沒有大神,只有解決問題的人。
  咱們沒有強悍的技術,只有一顆嚮往簡單的心。
  咱們沒有驚人的理論,只有一堆難以想象的妄想。
  咱們不須要複雜,只須要夠簡潔。
  咱們不須要固定的思惟,只須要你能想獲得。

核心成員資格需求
  一、精通或熟練掌握一門語言
  二、可以接受和聽從谷歌C++代碼風格
  三、靈活而大膽的思考問題
  四、可以在規定時間段內完成本身分配的模塊(能夠靈活調度)
  五、有堅持不懈的動力(很重要)

核心成員項目優點
  一、無限制的使用商業版到本身的項目中,若是是別的項目則須要和全部成員商量
  二、在過程當中,你能夠獲得飛通常的技術提升
  三、商業版若是有盈利核心成員的利益將會最大

  名額有限,若是你們想加入的話,請發送一段本身熟悉的語言利用plain framework(簡稱PF)風格的代碼到郵箱viticm.ti@gmail.com,咱們將盡快的在15年前肯定人選,由於商業版的計劃從15年1月份開始。

PF託管地址

  https://github.com/viticm/plainframework1

PF安裝教程

  http://www.cnblogs.com/lianyue/p/3974342.html

PF交流QQ羣

  348477824

相關文章
相關標籤/搜索