**至:
一、 執行緒池的原理:
執行緒池,究竟是怎麼一回事?其實執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下:
先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡眠狀態。
可能你也許會問:為什麼要搞得這麼麻煩,如果每當客戶端有新的請求時,我就建立乙個新的執行緒不就完了?這也許是個不錯的方法,因為它能使得你編寫**相對容易一些,但你卻忽略了乙個重要的問題——效能
就拿我所在的單位來說,我的單位是乙個省級資料大集中的銀行網路中心,高峰期每秒的客戶端請求併發數超過100,如果為每個客戶端請求建立乙個新執行緒的話,那耗費的cpu時間和記憶體將是驚人的,如果採用乙個擁有200個執行緒的執行緒池,那將會節約大量的的系統資源,使得更多的cpu時間和記憶體用來處理實際的商業應用,而不是頻繁的執行緒建立與銷毀。
二、 資料庫連線池
資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。
乙個資料庫連線物件均對應乙個物理資料庫連線,每次操作都開啟乙個物理連線,使用完都關閉連線,這樣造成系統的效能低下。 資料庫連線池的解決方案是在應用程式啟動時建立足夠的資料庫連線,並將這些連線組成乙個連線池(簡單說:在乙個「池」裡放了好多半成品的資料庫聯接物件),由應用程式動態地對池中的連線進行申請、使用和釋放。對於多於連線池中連線數的併發請求,應該在請求佇列中排隊等待。並且應用程式可以根據池中連線的使用率,動態增加或減少池中的連線數。
連線池技術盡可能多地重用了消耗記憶體地資源,大大節省了記憶體,提高了伺服器地服務效率,能夠支援更多的客戶服務。通過使用連線池,將大大提高程式執行效率,同時,我們可以通過其自身的管理機制來監視資料庫連線的數量、使用情況等。
1) 最小連線數是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費;
2) 最大連線數是連線池能申請的最大連線數,如果資料庫連線請求超過此數,後面的資料庫連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。
shikai12:
這個說的有問題,執行緒池包括核心執行緒數,阻塞佇列,最大執行緒數三個核心要素。請求過來之後,先判斷核心池的執行緒數有沒有超過所設定的數目,如果有,則放入阻塞佇列,如果阻塞佇列也放滿了,那麼直接開啟新的執行緒,直到最大執行緒數目,到達最大執行緒數目之後,執行緒池就會拒絕
執行緒池和連線池的區別
一 執行緒池的原理 執行緒池,究竟是怎麼一回事?其實執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下 先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡眠...
執行緒池和連線池的區別
一 執行緒池的原理 執行緒池,究竟是怎麼一回事?其實執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下 先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡眠...
mysql連線池和執行緒池區別 執行緒池和連線池的區別
一 執行緒池的原理 執行緒池,究竟是怎麼一回事?其實執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下 先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡眠...