為什麼要用NIO

2021-08-31 11:21:18 字數 429 閱讀 8067

程序中所有的執行緒共享相同的位址空間

static的變數可以被程序中所有執行緒共享 

乙個執行緒擁有自己的執行緒棧(stack),每個stack占用一定的記憶體空間,windows預設為1m,linux要小一些

這樣乙個伺服器最多同時能開多少個執行緒 = 總記憶體/執行緒棧大小  ,比如1g  那麼最多開 1g/1m = 1024個執行緒

所以不推薦用乙個執行緒服務乙個連線的方式,大多採用乙個執行緒服務多個連線的方式,也就是非阻塞io

非阻塞io分為 水平觸發和邊緣觸發,jdk的nio 採用select  屬於水平觸發,就是哪個檔案控制代碼有事件,就觸發哪個檔案讀寫,但是不一定流準備完畢。

邊緣觸發比如epoll,是黨檔案控制代碼有事件,並且資料準備完畢,才發起事件,這種效率比水平觸發要快,目前jdk7可能會實現。 

用nio的好處:減少記憶體開銷,減少cpu阻塞開銷

為什麼要用 enable shared from

樓主 hma if you think you can,you can.panrainbow 憂鬱淡藍 於 tue nov 9 11 48 38 2010 提到 引入enable shared from this的原因是可以實現返回值為指向該類本身的 shared ptr,為什麼以this為拷貝構造...

為什麼要用補碼

在探求為何機器要使用補碼之前,讓我們先了解原碼,反碼和補碼的概念.對於乙個數,計算機要使用一定的編碼方式進行儲存.原碼,反碼,補碼是機器儲存乙個具體數字的編碼方式.原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 原 1000 ...

為什麼要用AndroidStudio

原因一 android studio是基於intellij idea開發的,所以android studio繼承了intellij idea的所有功能.原因二 android studio是谷歌開發的,專門用於android開發的編輯器,換句話說是親兒子,谷歌會把所有好吃的好用的先給親兒子.原因三 ...