1. 程式人生 > >為什麼我覺得 nio 比 aio 更適合高併發

為什麼我覺得 nio 比 aio 更適合高併發

nio 是同步非阻塞的,aio 是非同步非阻塞的,初看,肯定是非同步的更好更高階啊,那為什麼我覺得 nio 比 aio 更適合高併發呢?嗯,一定是哪兒出了問題。

這個要涉及到它們兩個的具體實現和使用了。

首先,我們想象 bio 高併發的最主要限制條件是什麼?阻塞。對,阻塞是對資源極大的浪費,但 nio 和 aio 兩個都是非阻塞的,這個問題不是決定原因。

那麼,第二限制條件呢?執行緒。對,就是執行緒,想想如果同時有一萬個併發量,我們要建立一萬個執行緒,唉,估計要把作業系統累死了,執行緒切換排程消耗極大。

那怎麼解決呢?如果我們只用少量執行緒能不能實現呢?答案是可以的,我們利用 nio 同步非阻塞的特性,把各種請求當成一個個時間,然後用幾個固定的執行緒去依次執行這行事件,形成一個或多個事件迴圈,這樣我們可以同時處理高達上萬的併發,當然,事件迴圈一個不能有阻塞呼叫,否則,一旦阻塞了事件迴圈,這個事件迴圈裡的所有事件都執行不了了。netty 高併發的原理就是這樣的。

而 aio 呢?aio 的回撥是要開執行緒的,它只是解決了阻塞浪費資源的問題,並沒有解決高併發時執行緒排程的開銷。