欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

網(wǎng)絡(luò) I/O 優(yōu)化深入分析JavaI/O的工作機(jī)制
(網(wǎng)絡(luò)I/O優(yōu)化)

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

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

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

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

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

4、根據(jù)應(yīng)用場景設(shè)計(jì)合適的交互方式:所謂的交互場景主要包括同步與異步阻塞與非阻塞方式,下面將詳細(xì)介紹。

同步與異步

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

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

阻塞與非阻塞

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

兩種的方式的組合

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

表 3. 四種組合方式

組合方式

性能分析

同步阻塞

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

同步非阻塞

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

異步阻塞

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

異步非阻塞

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

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

本文標(biāo)題:深入分析JavaI/O的工作機(jī)制(網(wǎng)絡(luò)I/O優(yōu)化)-創(chuàng)新互聯(lián)
文章位置:http://chinadenli.net/article14/ddeide.html

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

廣告

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

成都定制網(wǎng)站建設(shè)