前言
- io是java知識(shí)的核心點(diǎn),只有通過(guò)通信連接起來(lái)的io才叫互聯(lián)網(wǎng)。
- 分析io,nio, aio的優(yōu)點(diǎn)和缺點(diǎn),使用場(chǎng)景。
典型場(chǎng)景
- 構(gòu)建一個(gè)應(yīng)用服務(wù)器,能夠支持多個(gè)客戶端連接
- 這樣一個(gè)場(chǎng)景,我們首先想到的就是使用ServerSocket構(gòu)建同步阻塞服務(wù),特征是為每一個(gè)連接創(chuàng)建一個(gè)線程,并且阻塞等待連接和連接完畢,劣勢(shì):消耗大量的線程,這些線程是需要分配存儲(chǔ)空間的,當(dāng)連接數(shù)量不斷增大,對(duì)服務(wù)資源的消耗是非常大的。
- 假設(shè)現(xiàn)在在服務(wù)端使用線程池,根據(jù)連接的不斷變化訂臺(tái)改變線程數(shù)量,這樣呢,但是即使是線程池也有線程切換的開(kāi)銷,大量線程之間的切換對(duì)于高并發(fā)的服務(wù)器來(lái)說(shuō)也會(huì)帶來(lái)巨大的資源消耗。
- 第三種,也就是nio,我們前面介紹的都是同步阻塞模式,而nio是同步非阻塞模式,比較重要的概念是Selector, channel等概念,只有Selector會(huì)阻塞,服務(wù)端真正處理的線程只有一個(gè)。這樣完美的避免了多線程內(nèi)存分配和線程間切換帶來(lái)的開(kāi)銷問(wèn)題。
- 第四種,aio,異步非阻塞,異步就是不需要等待上一步操作返回,而是采用事件,異步的方式,來(lái)構(gòu)建操作順序,而不是通過(guò)時(shí)間順序