Java網絡編程(讀書筆記)

部分片斷:web

  早期web服務器因爲Http連接短暫而有所掩蓋,因爲web頁面和嵌入式的圖片通常很小(至少與一般經過FTP獲取軟件包要小不少),因爲web瀏覽器在獲取各個文件後掛起鏈接,而不是一次保持數分鐘或者幾小時的連姐姐,因此web用戶不會像FTP用戶那樣對服務器施加太多的負擔,不過,隨着使用量的增加,web服務器性能降低,(解決這種問題至少有兩種解決方案)瀏覽器

第一種:重用進程,而不是建立新的進程,服務器啓動,就建立固定的數量的進程(好比300個)來處理請求,入棧請求放入一個隊列中,每一個進程從隊列中刪除一個請求,爲這個請求服務。這樣的好處避免創建和銷燬進程的全部的開銷。服務器

第二種:使用輕量級的線程來處理連接,雖然每一個單獨的進程都有本身的一塊的內存,可是在線程在資源的使用上更加的輕鬆,由於他們會共享內存。利用線程池加大請求處理;異步

(線程的替代方法)當咱們的一個應用同事須要數千個持續很長時間的連接,就要考慮異步I/O而不是線程,選擇權支持一個線程查詢一組socket,找出那些sockety已經準備就緒能夠讀寫數據,這種狀況基於通道和緩衝器來設計I/O而不是流。可是分解又會給相應的設計的問題,特備是在一致性方面。增長了程序的複雜性,不一樣的線程必須很是注意當時使用的資源。通常來說,每一個線程只有在確保資源不會改變或者他有獨佔訪問權纔可使用某個資源,不過兩個線程太多當心,每一個線程都等待對資源獨佔訪問權,卻永遠得不到,這會致使死鎖。socket

相關文章
相關標籤/搜索