IO和socket編程

 五一假期結束了,忽然想到3周前去上班的路上看到槐花開的正好。放假也沒能採些作槐花糕,到下週確定就老了。一年就開一次的東西,好比牡丹,花期也就一週。而花開之時,玫瑰和月季沒法與之相比。明日黃花蝶也愁。想起去年開車在美國最美的加州一號公路上,哼着美國鄉村音樂,以最正確的方式打開着最美的風景,內心卻爲如今已經想不起來的一個什麼理由不開心,好惋惜。歷來沒把青春當作資本,卻也不肯看看時光流走時本身的碌碌無爲。html

  終於肯定了今年要作的事情。然而就是這個也並不容易。年初籤績效的時候,老大問我一些想法,說我能力比較強,總是作項目對個人成長很差。我說不要緊,成長這種事終究要靠本身的。我之因此這樣說是由於本身也沒想到解決辦法。那麼這時候說什麼也只是給別人出難題而已。爲難別人的事情是絕對不能作的。java

  第一次聽到中間件這個名詞是在人人的時候,那時候的中間件是基於ICE的,用C++寫的。推薦幾度人脈,新鮮事(feed流),antispam這些當時以爲最有技術含量的工做都包含在中間件裏。可是這些東西都已經很成熟了,由於是C++寫的,須要專人維護,可是維護的人平時又很閒,很是雞肋。因此在C++的哥哥都離職以後,就用java改寫了。改寫以後用的是hessian協議了,就開始說RPC了,不講ICE了。有些東西,錯過了就是一生。由於當時是菜鳥一枚,因此到如今也沒了解什麼是ICE(下次同事聚會的時候能夠嘮一嘮,mark一下)可是那時候尚未zookeeper(說的本身好像是考古文物~~),咱們本身寫了一個用於配置管理的,用socket做爲廣播站發送UDP報文給全部業務應用服務,用心跳監控數據庫的健康情況給業務端發消息的。這種作法,估計也和ICE思想的移植有關。想起五四新文化運動時,胡適說:"咱們這一代的白話,如同裹小了的腳放很差同樣寫很差白話。" 我從山中來,帶着蘭花草……   額……又跑題了,拉回來。 web

  轉載請註明原文地址   http://www.cnblogs.com/xiexj/p/6793016.html   謝謝哦~~數據庫

  今天的主題是IO。由於ES和Solr相比,最吸引人的一個優勢是它使用了Netty框架。而Solr使用了jetty,固然用tomcat,resin這樣的web容器都能跑Solr.而網絡編程框架的選用直接決定了其高併發的能力。像咱們目前項目中數據量限制在GB級別上,ES的PB級數據支持咱們用不上,甚至在特定場景下,都無需分詞,不多的索引,只作存儲,以時間換空間,其實Solr若是解決了IO讀寫性能瓶頸的問題,更能發揮其優點。話說咱也是作過socket編程的,除了上面說的直接用socket發UDP廣播來作配置管理健康檢查,在離線服務裏我還用http請求直接用瀏覽器做爲客戶端,指定一個端口綁定一個socketServer,用ScheduledExecutorService以固定時延用accept方法接收有沒有搜索那邊兄弟發過來的補發消息請求。若是有,就將socket的inputstream解析處理後寫的返回結果到outputstream。雖然寫代碼是超級簡單了,並且是阻塞請求,要不是由於是手動補發數據用的確定有併發問題。可是足以說明咱也是知道socket編程原理的,只是…… 這個水平就暫時不考慮作本身的網絡編程框架了。編程

  IO其實和socket編程是兩個概念。IO是socket編輯必需要考慮的問題之一,IO不只在網絡中有,文件系統中也要考慮。因此他們的關係是這樣:數組

 固然,其實維度要多的多,維度上的節點也多的多。我老是試圖將腦子裏的東西表現出來,其實提及來挺簡單的。各類不一樣的維度都是網絡編程框架要考慮的問題。netty和mina都是網絡編程框架,jetty和tomcat更多被稱爲web容器。可是他們都主要解決和客戶端通訊的問題。由於socket編程更接近於底層,須要本身去解決IO的問題,本身去決定用阻塞仍是非阻塞,因此常將他們連在一塊兒說。瀏覽器

  阻塞的IO,在我作過的socket編程裏都表現的很清楚了。打開一個鏈接一直阻塞在那裏到accept到數據處理後關閉。accept就是"我住長江頭,君住長江尾"裏日日思君不見君的那個苦苦期盼的人。IO是面向流的,NIO是面向緩存區的,緩衝區本質是個數組,存的是整塊的數據,因此又叫面向塊的。NIO的基本原理挺好理解的。它包括三個基本要素:選擇器Selector,通道channel,緩衝區buffer。看過人家包山楂餅的。山楂被生產線壓成山楂片以後,會到一個大盒子裏面。一個生產線就是一個通道。一個盒子就是一個緩衝區。搬運工會把這些裝滿的盒子放到特定的負責將山楂片包成一條一條的工人那裏。搬運工是選擇器。包山楂片是線程來完成的。選擇器接觸的工序是向Selector註冊通道,SelectionKey (包含屬性:interest集合,ready集合,Channel,Selector,可選的附加的對象),經過Selector選擇通道,喚醒,關閉。框架就是領班。搬運工對領班說我是負責搬運盒子的(向Selector註冊通道), 領班就去看這個搬運工,瞭解他的特長(interest集合)是搬運,已經搬完上個盒子正在等着搬運下一個盒子(ready集合),要處理的是沒包裝的山楂片盒子(Channel),知道他的所需SelectionKey屬性後,就決定讓他搬一個盒子(經過Selector選擇通道),因而叫他去搬運(喚醒),看到他送去給到了包山楂片的工人就放心了(關閉)。通道的數據不只能夠取出,還能夠放入。放入也是搬運工一盒子一盒子放的。因此選擇器也有不少選項:創建鏈接,就緒,讀出,寫入。讀出和寫入一個是服務器端,一個是客戶端。都是經過通道來通訊。告訴大家一個祕密,小姨家的山楂樹都無肥無農藥,直接對外出口,可是山楂的壓碎過程都是脫了鞋襪用腳踩的。知道以後再也沒吃過山楂片。
緩存

 看,山楂的工做流和NIO是同樣的。情商高的郭靖最終能打過智商高的楊康。對別人的用心和關心最終會轉化爲本身的智慧。而愛一我的要比被愛更幸福。看着一個背景會以爲很像內心的那我的,而「真的是你」多少次依然驚喜。明明是算好了人家幾點通過,而見到的時候「好巧啊」依然是那麼真心。漸漸的,內心的那我的會變成本身的一部分。發現本身和那我的同樣聰明,同樣善良。由於愛居然是那麼神奇的東西,它能夠打開一個通道,能夠知道本身喜歡的人在想什麼,會在她須要的時候出現。心靈感應居然是真的。tomcat

今天堵車,估計還要兩小時纔到公司,因此原諒今天的文章不只跑題太遠,並且基本沒在正題上=.=服務器

相關文章
相關標籤/搜索