Java網絡編程 淺談BIO
Java BIO(同步阻塞 I/O)
一個客戶端請求,必選要使用一個線程來執行。如果是單線程執行,就會造成其請求進行等待。
BIO是如何工作的:
一個連接一個線程處理
代碼演示
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
Socket socket = serverSocket.accept();
try {
new Thread() {
@Override
public void run() {
// 開始執行 業務處理
}
}.start();
} catch (Exception e) {
e.printStackTrace();
if (socket != null) {
socket.close();
}
}
}
這種BIO模式會有一個很大的缺點,服務器每次收到一個請求,就創建一個線程,JVM就會分配一個內存,如果并發過多,會頻繁創建線程,對服務器造成很大的開銷,GC回收不及時,就會造成內存泄漏或內存溢出
BIO 線程池的實現
代碼演示
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(100, 160,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(128));
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
Socket socket = serverSocket.accept();
try {
poolExecutor.execute(new Runnable() {
@Override
public void run() {
// 執行業務請求
}
});
} catch (Exception e) {
e.printStackTrace();
if (socket != null) {
socket.close();
}
}
}
線程池實現可以避免頻繁創建線程而導致內存泄漏或內存溢出的問題。但也有缺點:因為線程池設定的最大線程數,并發過多時,線程池的線程如果沒有空閑的,就會進行等待,直到有空閑線程才會執行。很明顯不能滿足高并發。
智能推薦
JAVA原生JDK網絡編程 BIO/NIO
1 原生 JDK 網絡編程 BIO 傳統的同步阻塞模型開發中,ServerSocket 負責綁定 IP 地址,啟動監聽端口;Socket 負責發起連接操作。連接成功后,雙方通過輸入和輸出流進行同步阻塞式通信。傳統 BIO 通信模型:采用 BIO 通信模型的服務端,通常由一個獨立的 Acceptor 線程負責監聽客戶端的連接,它接收到客戶端連接請求之后為每個客戶端創建一個新的線程進行鏈路處理,處理完...
BIO網絡編程
BIO網絡編程 服務端 客戶端 處理多連接 HTTP協議 請求數據包解析 響應數據包解析 響應狀態碼 協議開發---http協議 阻塞IO的含義 服務端 客戶端 處理多連接 使用線程池,多線程技術 HTTP協議 瀏覽器和服務端交互的時候,使用的http協議。 請求數據包解析 響應數據包解析 響應狀態碼 協議開發—http協議 添加以下代碼,可以與瀏覽器進行交互。 想在Socket之上,...
BIO網絡編程
前言 之前我們已經了解了網絡編程它是有操作系統統一的API的,每種語言又有不同的實現,所以本文主要講述java最開始的一個Socket版本,使用java怎么去做一個BIO的網絡編程,一步步開發根據現有問題升級改造,直到服務端能處理多個請求且能夠支持HTTP網絡協議 服務端-單線程處理 服務端代碼 客戶端代碼 執行步驟和運行結果 1.先執行服務端成功后再執行客戶端 2.服務端打印收到客戶端的連接 3...
Java網絡模型BIO
BIO:同步阻塞式IO,服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善。 主線程負責監聽當有新的連接的時候創建一個新的子線程處理任務,如下圖: 缺點: 阻塞式IO、彈性伸縮能力強、多線程消耗資源。 代碼部分: 服務端代碼 客戶端代碼 多線程處理類 其實BIO代碼就是TCP協議最簡單...
Java BIO 編程
聲明:內容來自尚硅谷教程,個人做學習記錄使用。 I/O 模型基本說明 I/O 模型簡單的理解:就是用什么樣的通道進行數據的發送和接收,很大程度上決定了程序通信的性能 Java共支持3種網絡編程模型/IO模式:BIO、NIO、AIO Java BIO : 同步并阻塞(傳統阻塞型),服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成...
猜你喜歡
Java BIO編程
1. I/O 模型 1.1. I/O 模型基本說明 I/O 模型簡單的理解:就是用什么樣的通道進行數據的發送和接收,很大程度上決定了程序通信的性能 Java 共支持 3 種網絡編程模型/IO 模式:BIO、NIO、AIO Java BIO : 同步并阻塞(傳統阻塞型),服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器 端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...