成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

深入分析JavaI/O的工作機制(網絡I/O優(yōu)化)-創(chuàng)新互聯(lián)

網絡 I/O 優(yōu)化深入分析JavaI/O的工作機制
(網絡I/O優(yōu)化)

網絡 I/O 優(yōu)化通常有一些基本處理原則:

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、網絡空間、營銷軟件、網站建設、柳南網站維護、網站推廣。

1、一個是減少網絡交互的次數:要減少網絡交互的次數通常我們在需要網絡交互的兩端會設置緩存,比如 Oracle 的 JDBC 驅動程序,就提供了對查詢的 SQL 結果的緩存,在客戶端和數據庫端 都有,可以有效的減少對數據庫的訪問。關于 Oracle JDBC 的內存管理可以參考《 Oracle JDBC 內存管理》。除了設置緩存還有一個辦法是,合并訪問請求:如在查詢數據庫時,我們要查 10 個 id,我可以每次查一個 id,也可以一次查 10 個 id。再比如在訪問一個頁面時通過會有多個 js 或 css 的文件,我們可以將多個 js 文件合并在一個 HTTP 鏈接中,每個文件用逗號隔開,然后發(fā)送到后端 Web 服務器根據這個 URL 鏈接,再拆分出各個文件,然后打包再一并發(fā)回給前端瀏覽器。這些都是常用的減少網絡 I/O 的辦法。

2、減少網絡傳輸數據量的大?。?減少網絡數據量的辦法通常是將數據壓縮后再傳輸,如 HTTP 請求中,通常 Web 服務器將請求的 Web 頁面 gzip 壓縮后在傳輸給瀏覽器。還有就是通過設計簡單的協(xié)議,盡量通過讀取協(xié)議頭來獲取有用的價值信息。比如在代理程序設計時,有 4 層代理和 7 層代理都是來盡量避免要讀取整個通信數據來取得需要的信息。

3、盡量減少編碼:通常在網絡 I/O 中數據傳輸都是以字節(jié)形式的,也就是通常要序列化。但是我們發(fā)送要傳輸的數據都是字符形式的,從字符到字節(jié)必須編碼。但是這個編碼過程是比較耗時的,所以 在要經過網絡 I/O 傳輸時,盡量直接以字節(jié)形式發(fā)送。也就是盡量提前將字符轉化為字節(jié),或者減少字符到字節(jié)的轉化過程。

4、根據應用場景設計合適的交互方式:所謂的交互場景主要包括同步與異步阻塞與非阻塞方式,下面將詳細介紹。

同步與異步

所謂同步就是一個任務的完成需要依賴另外一個任務時,只有等待被依賴的任務完成后,依賴的任務才能算完成,這是一種可靠的任務序列。要么成功都成功,失敗都失敗,兩個任務的狀態(tài)可以保持一致。而異步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什么工作,依賴的任務也立即執(zhí)行,只要自己完成了整個任務就算完成了。至于被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列。我們可以用打電話和發(fā)短信來很好的比喻同步與異步操作。

 在設計到 IO 處理時通常都會遇到一個是同步還是異步的處理方式的選擇問題。因為同步與異步的 I/O 處理方式對調用者的影響很大,在數據庫產品中都會遇到這個問題。因為 I/O 操作通常是一個非常耗時的操作,在一個任務序列中 I/O 通常都是性能瓶頸。但是同步與異步的處理方式對程序的可靠性影響非常大,同步能夠保證程序的可靠性,而異步可以提升程序的性能,必須在可靠性和性能之間做 個平衡,沒有完美的解決辦法。

阻塞與非阻塞

阻塞與非阻塞主要是從 CPU 的消耗上來說的,阻塞就是 CPU 停下來等待一個慢的操作完成 CPU 才接著完成其它的事。非阻塞就是在這個慢的操作在執(zhí)行時 CPU 去干其它別的事,等這個慢的操作完成時,CPU 再接著完成后續(xù)的操作。雖然表面上看非阻塞的方式可以明顯的提高 CPU 的利用率,但是也帶了另外一種后果就是系統(tǒng)的線程切換增加。增加的 CPU 使用時間能不能補償系統(tǒng)的切換成本需要好好評估。

兩種的方式的組合

組合的方式可以由四種,分別是:同步阻塞、同步非阻塞、異步阻塞、異步非阻塞,這四種方式都對 I/O 性能有影響。下面給出分析,并有一些常用的設計用例參考。

表 3. 四種組合方式

組合方式

性能分析

同步阻塞

最常用的一種用法,使用也是最簡單的,但是 I/O 性能一般很差,CPU 大部分在空閑狀態(tài)。

同步非阻塞

提升 I/O 性能的常用手段,就是將 I/O 的阻塞改成非阻塞方式,尤其在網絡 I/O 是長連接,同時傳輸數據也不是很多的情況下,提升性能非常有效。
這種方式通常能提升 I/O 性能,但是會增加 CPU 消耗,要考慮增加的 I/O 性能能不能補償 CPU 的消耗,也就是系統(tǒng)的瓶頸是在 I/O 還是在 CPU 上。

異步阻塞

這種方式在分布式數據庫中經常用到,例如在網一個分布式數據庫中寫一條記錄,通常會有一份是同步阻塞的記錄,而還有兩至三份是備份記錄會寫到其它機器上,這些備份記錄通常都是采用異步阻塞的方式寫 I/O。
異步阻塞對網絡 I/O 能夠提升效率,尤其像上面這種同時寫多份相同數據的情況。

異步非阻塞

這種組合方式用起來比較復雜,只有在一些非常復雜的分布式情況下使用,像集群之間的消息同步機制一般用這種 I/O 組合方式。如 Cassandra 的Gossip 通信機制就是采用異步非阻塞的方式。
它適合同時要傳多份相同的數據到集群中不同的機器,同時數據的傳輸量雖然不大,但是卻非常頻繁。這種網絡 I/O 用這個方式性能能達到高。

  雖然異步和非阻塞能夠提升 I/O 的性能,但是也會帶來一些額外的性能成本,例如會增加線程數量從而增加 CPU 的消耗,同時也會導致程序設計的復雜度上升。如果設計的不合理的話反而會導致性能下降。在實際設計時要根據應用場景綜合評估一下。

本文標題:深入分析JavaI/O的工作機制(網絡I/O優(yōu)化)-創(chuàng)新互聯(lián)
文章位置:http://jinyejixie.com/article14/ddeide.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站設計網站設計公司、響應式網站App開發(fā)、商城網站網頁設計公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站建設
黔西| 蓝田县| 浦县| 无为县| 宜丰县| 崇礼县| 寿宁县| 漳州市| 雷波县| 香格里拉县| 扶余县| 原平市| 银川市| 八宿县| 会昌县| 寿光市| 额济纳旗| 寿光市| 桓台县| 河津市| 大洼县| 思茅市| 寿宁县| 瓮安县| 青州市| 湖州市| 万宁市| 清原| 巴彦县| 城固县| 阜城县| 武鸣县| 皋兰县| 永济市| 北宁市| 大新县| 曲水县| 陕西省| 白玉县| 余庆县| 个旧市|