為進一步提高io的效率,使用了多執行緒來解決這個問題,但是執行緒的數量總是會因為cpu的切換到達負荷值。
選擇器是用來監控通道的i/o的狀態,等client的資料準備就緒,就通知server來處理,這期間server中的執行緒可以做其他的事情。
1)連線channel
2)緩衝區buffer
3)選擇器select:用於監控selectblechannel的io狀態。
阻塞式網路通訊實現
@test
public void server() throws ioexception
string str = new string("傳輸完成");
buf.put(str.getbytes());
buf.flip();
schannel.write(buf);
schannel.shutdownoutput();
sschannel.close();
fon.close();
schannel.close();
}@test
public void client() throws ioexception
int length = 0
; while ((length = schannel.read(buf)) != -1)
schannel.shutdownoutput();
schannel.close();
fin.close();
}
非阻塞式實現
@test
public
void
client() throws ioexception
@test
public
void
server() throws ioexception else
if (selectionkey.isreadable())
}// 取消選擇鍵
iterator.remove();}}
}
JAVA NIO系列(三) Buffer 解讀
nio中的buffer用於和通道互動,資料是從通道讀入緩衝區,從緩衝區中寫入通道的。buffer就像乙個陣列,可以儲存多個型別相同的資料。每種基本資料型別都有對應的buffer類 1 capacity 容量 buffer本質是乙個陣列,在初始化時有固定的大小,這個值就是容量。容量不可改變,一旦緩衝區...
CUDA學習系列教程(四)
gpu程式一般步驟 過程中,一般要盡量降低資料通訊的消耗,所以如果程式需要複製大量的資料到gpu,顯然不是很合適使用gpu運算,最理想的情況是,每次複製的資料很小,然後運算量很大,輸出的結果還是很小,複製回cpu。核函式是gpu每個thread上執行的程式。必須通過 gobal 函式型別限定符定義。...
python 學習系列教程四注釋
在這一節主要說一下注釋這項功能吧,在大多數程式語言中基本都會寫注釋,我在程式設計過程中都會寫,只有使用易語言的時候不寫,那個東西能看明白,很多人感覺不用寫,都能記得住,時間一長就完全忘記了,再看 就麻煩了。行了,python 注釋總結一句話就是 用 號,號後面寫注釋的內容。井號後面的內容都會被pyt...