之前對這部分的內容很感興趣,沒想到讀起來有點晦澀,還是因為對伺服器的知識不是很了解。
說道伺服器一般人都會想到tomcat或者jboss或者weblogic,現在流行起來的node總讓人不太放心,js**也能做伺服器?其實不然,首先乙個誤區就是node的伺服器是js寫出來的....其實它只有表面暴露給使用者使用的模組是用js寫的,底層的很多東西還是由c/c++完成的。如果執行在不同的作業系統上,node還會基於作業系統切換底層的實現方式。
再說說nodejs的特性——最讓人印象深刻的就是單執行緒事件驅動....
首先單程序單執行緒,就會出現cpu利用不足的問題。畢竟現在的電腦基本都不是單核的,那麼你只有乙個程序跑,肯定有個核是在那休息的,這樣效率上會讓人覺得不夠高。因此,nodejs提供了乙個模組——child_process,它可以建立子程序,這樣就可以利用餘下的cpu資源了。其實如果不是很龐大的應用,單程序就足夠了,何必引入多執行緒增加複雜性呢。
另外,單程序也會有安全性的問題。比如一旦程式出現bug,就會導致整個應用的崩潰。如果是線上的應用,那肯定會讓人很頭疼....這就證明你服務不可靠啊!因此就出現了一種方案,啟動乙個沒有業務含義的主程序,通過這個主程序建立子程序進行業務的響應。這樣既避免了單程序的安全問題,也方便進行負載均衡。只不過這個主程序一旦死掉了,整個應用一樣會掛掉。但是子程序死掉了,完全可以捕獲到異常資訊,重新建立繼承,恢復集群。
如何做乙個高擴充套件、高可用的集群,這就涉及到集群的知識了,由於知識網不夠紮實,就不能擴充套件了....平時也不會用node當做生產環境的伺服器,因此就不做過多的研究啦....先總結到這吧!
Linux下什麼是程序等待?為什麼程序需要等待?
當乙個程序建立了新的程序時,父程序 原程序 往往需要讀取子程序 新程序 的執行結果。如果子程序先於父程序退出,而父程序不能及時讀取子程序的退出狀態的話,子程序便會一直存在,此時子程序便會變成殭屍狀態。久而久之,便會造成記憶體洩漏!那麼為了避免記憶體洩漏,我們可以通過kill指令銷毀掉父程序,那麼殭屍...
Hashmap的長度為什麼必須是2的n次方
從原始碼中我們可以看到獲取 key 所對應 node 陣列下標的方法是 length 1 hash,它與我們要求的hash length在length 是 2 的 n 次方的條件下是等價的,而用這種 的位運算的方法相比直接用取餘符號進行運算,效能更好。但是要明確一點,初始化時設定的長度不符合 2 的...
hashMap中容量為什麼是2的n次方(最簡單)
我們都知道hashmap進行hash雜湊的演算法是hash length 1 而hash的容量建議都是取2的n次方 首先我們先說說這個演算法,演算法的目的是為了得到小於length的更加均勻的數,如果不均勻容易產生hash碰撞,換句話說只有全是1,進行按位與才是最均勻的,因為1與上任何數都等於任何數...