1、伺服器說的「路、通道、線程」是什麼意思?
首先你要明白一點:路、核、線程三者的區別。
路:獨立的CPU的個數。
核:單個CPU的物理核心(也叫真實核心)數量。
線程:程序中順序控制流程的數量。
舉個例子,雙路四核八線程伺服器指的就是該伺服器有2個獨立的CPU,每個CPU有2個物理核心(2x2=4核),每個核心擁有2條線程(4x2=8線程)。個人PC平台上很少出現「路」這個術語,以前奔騰時代英特爾公司面向桌面級用戶倒是做過一些高端的雙CPU平台,就是說一塊主板上裝了兩個獨立的CPU,和現在的雙核CPU不是一個概念。多核CPU是由於後期技術發展後,晶元集成度越來越高,可以把多個物理核心集成在一個CPU上。打個比喻(雖然不恰當),如果把雙路看做一對健康的雙胞胎的話,那麼雙核就是一對連體雙胞胎。
而所謂的四核八線程(注意:這里沒有「路」定義)就是說,一顆獨立的CPU上的真實核心數量為4,但是通過超線程技術又模擬出4個核心,看上去像8個核心了,但有4個是模擬出來的,不是真實的,以此類推。這就是所謂的超線程,目前是英特爾公司獨有的技術。
至於「幾通道」,它指的是伺服器進行資源共享操作時的信道數量,它表現的是伺服器的網路共享通信那一塊的性能,和上面的三個術語面向的對象不同,他們仨表現的是伺服器的數據處理那一塊的性能,數量越高,伺服器多任務處理能力越強。當然,這四個傢伙一起展現了一台伺服器的綜合性能。
2、伺服器一般支持多少線程
這個是根據伺服器配置(處理器)來的,主流的都是核心數* 2。你可以去伺服器廠商(正睿)的網上找找伺服器產品,查看一下參數和配置,幾分鍾就清楚了!
3、伺服器CPU是不是線程數越多越好?另外並發訪問量最多1000的伺服器用什麼CPU比較好?
你好.我來解答下你的問題
線程數只是衡量CPU性能的參數之一.並不完全由線程數量來決定CPU的性能.當然.在同等平台和同一級別的處理器.線程數越多性能越強.一般情況下.一台普通配置的伺服器最大並發數可以達到幾千.一台至強高配置的伺服器的最大並發數可以達到上萬.你所要求的並發數達到一千.基本上隨便一個普通配置就可以滿足了.除了配置以外.也要帶寬夠用才可以保障訪問速度.
海騰數據楊闖為你解答.若有伺服器問題需要幫忙的可以來找我
4、關於多線程伺服器
你說你綁定和監聽都好了吧
那麼服務就可以這樣寫
while(bWorking)
{
SOCKET sAccept = accept(sListen, NULL, NULL);
if(sAccept != SOCKET_ERROR)
CreateThread(NULL, 0, ThreadProc, (LPVOID)&sAccept, 0, NULL);
}
相應的線程函數可以這樣:
DWORD WINAPI ThreadProc(LPVOID lpPara)
{
SOCKET sComm = *((SOCKET*)lpPara);
//從這里開始讀寫這個socket就可以了
}
這樣就實現了accept一個連接就創建一個線程。
5、Java的伺服器一般運行幾個線程比較合適
首先確認你是cpu密集型的還是io密集型的,
如果是cpu密集型的線程數可以設置到和cpu個數一致,
如果是io密集型的,首先需要確認你io wait的時間,線程數和io wait時間成正比, 具體需要根據測試得出。
6、伺服器,使用多進程 與 多線程 請問有什麼區別
關於多進程和多線程,教科書上最經典的一句話是「進程是資源分配的最小單位,線程是CPU調度的最小單位」,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這么簡單了,選的不好,會讓你深受其害。
經常在網路上看到有的XDJM問「多進程好還是多線程好?」、「Linux下用多進程還是多線程?」等等期望一勞永逸的問題,我只能說:沒有最好,只有更好。根據實際情況來判斷,哪個更加合適就是哪個好。
我們按照多個不同的維度,來看看多線程和多進程的對比(註:因為是感性的比較,因此都是相對的,不是說一個好得不得了,另外一個差的無法忍受)。
適應於多核、多機分布式;如果一台機器不夠,擴展到多台機器比較簡單
適應於多核分布式
進程占優
1)需要頻繁創建銷毀的優先用線程
原因請看上面的對比。
這種原則最常見的應用就是Web伺服器了,來一個連接建立一個線程,斷了就銷毀線程,要是用進程,創建和銷毀的代價是很難承受的
2)需要進行大量計算的優先使用線程
所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下線程是最合適的。
這種原則最常見的是圖像處理、演算法處理。
3)強相關的處理用線程,弱相關的處理用進程
什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。
一般的Server需要完成如下任務:消息收發、消息處理。「消息收發」和「消息處理」就是弱相關的任務,而「消息處理」裡面可能又分為「消息解碼」、「業務處理」,這兩個任務相對來說相關性就要強多了。因此「消息收發」和「消息處理」可以分進程設計,「消息解碼」、「業務處理」可以分線程設計。
當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。
4)可能要擴展到多機分布的用進程,多核分布的用線程
原因請看上面對比。
5)都滿足需求的情況下,用你最熟悉、最拿手的方式
至於「數據共享、同步」、「編程、調試」、「可靠性」這幾個維度的所謂的「復雜、簡單」應該怎麼取捨,我只能說:沒有明確的選擇方法。但我可以告訴你一個選擇原則:如果多進程和多線程都能夠滿足要求,那麼選擇你最熟悉、最拿手的那個。
需要提醒的是:雖然我給了這么多的選擇原則,但實際應用中基本上都是「進程+線程」的結合方式,千萬不要真的陷入一種非此即彼的誤區。
消耗資源:
從內核的觀點看,進程的目的就是擔當分配系統資源(CPU時間、內存等)的基本單位。線程是進程的一個執行流,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。
線程,它們彼此之間使用相同的地址空間,共享大部分數據,啟動一個線程所花費的空間遠遠小於啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小於進程間切換所需要的時間。據統計,總的說來,一個進程的開銷大約是一個線程開銷的30倍左右,當然,在具體的系統上,這個數據可能會有較大的區別。
通訊方式:
進程之間傳遞數據只能是通過通訊的方式,即費時又不方便。線程時間數據大部分共享(線程函數內部不共享),快捷方便。但是數據同步需要鎖對於static變數尤其注意
線程自身優勢:
提高應用程序響應;使多CPU系統更加有效。操作系統會保證當線程數不大於CPU數目時,不同的線程運行於不同的CPU上;
改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利於理解和修改。
7、什麼是多線程並發伺服器
有多個 CPU 可用。單核機器上多線程的優勢不明顯。
線程間有共享數據。如果沒有共享數據,用模型 3b 就行。雖然我們應該把線程間的共享數據降到最低,但不代表沒有;
共享的數據是可以修改的,而不是靜態的常量表。如果數據不能修改,那麼可以在進程間用 shared memory,模式 3 就能勝任;
提供非均質的服務。即,事件的響應有優先順序差異,我們可以用專門的線程來處理優先順序高的事件。防止優先順序反轉;
latency 和 throughput 同樣重要,不是邏輯簡單的 IO bound 或 CPU bound 程序;
利用非同步操作。比如 logging。無論往磁碟寫 log file,還是往 log server 發送消息都不應該阻塞 critical path;
能 scale up。一個好的多線程程序應該能享受增加 CPU 數目帶來的好處,目前主流是 8 核,很快就會用到 16 核的機器了。
具有可預測的性能。隨著負載增加,性能緩慢下降,超過某個臨界點之後急速下降。線程數目一般不隨負載變化。
多線程能有效地劃分責任與功能,讓每個線程的邏輯比較簡單,任務單一,便於編碼。而不是把所有邏輯都塞到一個 event loop 里,就像 Win32 SDK 程序那樣。