1、java Socket編程實現的最簡單的多線程Web伺服器
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Test {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(888);
while(true) {
Socket s = server.accept();
Processer p = new Processer(s);
Thread t = new Thread(p);
t.start();
}
}
}
class Processer implements Runnable {
private Socket socket;
public Processer(Socket s) {
// TODO Auto-generated constructor stub
this.socket = s;
}
@Override
public void run() {
try {
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
out.println("HTTP/1.0 200 OK");
out.println("Content-Type:text/html;charset=utf-8");
out.println();
out.println("<h1> Web伺服器測試成功!</h1>");
out.close();
} catch(Exception ex) {
ex.printStackTrace();
} finally {
try {
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
2、多線程Web伺服器的實現(Java)
是的,我也已經哭了呢,我的心在流淚
3、伺服器,使用多進程 與 多線程 請問有什麼區別
關於多進程和多線程,教科書上最經典的一句話是「進程是資源分配的最小單位,線程是CPU調度的最小單位」,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這么簡單了,選的不好,會讓你深受其害。
經常在網路上看到有的XDJM問「多進程好還是多線程好?」、「Linux下用多進程還是多線程?」等等期望一勞永逸的問題,我只能說:沒有最好,只有更好。根據實際情況來判斷,哪個更加合適就是哪個好。
我們按照多個不同的維度,來看看多線程和多進程的對比(註:因為是感性的比較,因此都是相對的,不是說一個好得不得了,另外一個差的無法忍受)。
適應於多核、多機分布式;如果一台機器不夠,擴展到多台機器比較簡單
適應於多核分布式
進程占優
1)需要頻繁創建銷毀的優先用線程
原因請看上面的對比。
這種原則最常見的應用就是Web伺服器了,來一個連接建立一個線程,斷了就銷毀線程,要是用進程,創建和銷毀的代價是很難承受的
2)需要進行大量計算的優先使用線程
所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下線程是最合適的。
這種原則最常見的是圖像處理、演算法處理。
3)強相關的處理用線程,弱相關的處理用進程
什麼叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。
一般的Server需要完成如下任務:消息收發、消息處理。「消息收發」和「消息處理」就是弱相關的任務,而「消息處理」裡面可能又分為「消息解碼」、「業務處理」,這兩個任務相對來說相關性就要強多了。因此「消息收發」和「消息處理」可以分進程設計,「消息解碼」、「業務處理」可以分線程設計。
當然這種劃分方式不是一成不變的,也可以根據實際情況進行調整。
4)可能要擴展到多機分布的用進程,多核分布的用線程
原因請看上面對比。
5)都滿足需求的情況下,用你最熟悉、最拿手的方式
至於「數據共享、同步」、「編程、調試」、「可靠性」這幾個維度的所謂的「復雜、簡單」應該怎麼取捨,我只能說:沒有明確的選擇方法。但我可以告訴你一個選擇原則:如果多進程和多線程都能夠滿足要求,那麼選擇你最熟悉、最拿手的那個。
需要提醒的是:雖然我給了這么多的選擇原則,但實際應用中基本上都是「進程+線程」的結合方式,千萬不要真的陷入一種非此即彼的誤區。
消耗資源:
從內核的觀點看,進程的目的就是擔當分配系統資源(CPU時間、內存等)的基本單位。線程是進程的一個執行流,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。
線程,它們彼此之間使用相同的地址空間,共享大部分數據,啟動一個線程所花費的空間遠遠小於啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小於進程間切換所需要的時間。據統計,總的說來,一個進程的開銷大約是一個線程開銷的30倍左右,當然,在具體的系統上,這個數據可能會有較大的區別。
通訊方式:
進程之間傳遞數據只能是通過通訊的方式,即費時又不方便。線程時間數據大部分共享(線程函數內部不共享),快捷方便。但是數據同步需要鎖對於static變數尤其注意
線程自身優勢:
提高應用程序響應;使多CPU系統更加有效。操作系統會保證當線程數不大於CPU數目時,不同的線程運行於不同的CPU上;
改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利於理解和修改。
4、要做畢業論文了,題目是多線程Web伺服器的設計與實現,請問這個設計需要資料庫嗎,如果需要資料庫起什麼作
這個不需要資料庫,如果是JAVA語言,你可以參看下TOCAT。它是一個JSP/SERVLET伺服器,但也是可處處HTML。
當然你也可以參看下APACHE,它好像是C/C++寫的。
5、1.javaweb中高並發和多線程之間的有必然聯系嗎?2.tomcat的多線程和你代碼中的多線程之間的關系?
簡單點,tomcat是一個web容器,你的web項目在tomcat內部,用戶先訪問tomcat進入容專器,才能去訪問web項目里的方法。至於支持多人屬訪問,牽涉到線程池的概念,見得是你要訪問就要有線程,如果你設置的允許最大連接數是5,同事訪問超過5人就要等待其他人釋放。
現在說多人同時訪問web方法。比如你在秒殺一個商品,只剩一件了,同時訪問給誰呢?一個簡單的解決方法就是給方法加鎖,其中一個線程搶到鎖,其他人不能訪問了,這個線程執行減庫存操作。東西買完了,釋放鎖。
你可以下個慕課網,有比較詳細的秒殺教程
6、java web哪需要用多線程?
例子1:聊天室copy伺服器端程序,servlet接收到客戶端提交信息後,將提交信息交給另外線程處理轉發,自己負責返回發送成功,另外的線程檢測要轉發到的隊列並處理,等待其他客戶端對隊列的讀取,這是實現了一個任務系統的簡單結構,用聊天室舉這個例子比較簡單,實際這種多線程任務系統可以用於WebGame的開發,線程裡面用來處理更復雜的邏輯,並且不需要客戶端等待邏輯的執行完成
7、apache http server 支持多線程嗎
在公司內網用到了apache2做web伺服器,每當內部發文的時候,尤其是一些人事任免及銷售目標下發、達成情況總會出現達到最大連接數的情況,導致阻塞。
一般apache採用prefork和worker機制,通過apachectl -l命令查看默認使用的prefork機制。需要修改prefork策略
那麼需要做如下修改:
1,/usr/local/apache2/conf/http.conf 引入(include)prefork配置文件/usr/local/apache2/conf/extra/httpd-mpm.conf,
2,修改httpd-mpm.conf配置文件的prefork配置部分
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfMole mpm_prefork_mole>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1000 ##必須放在MaxClients上面 且值>=MaxCliens
MaxClients 1000
MaxRequestsPerChild 10000
</IfMole>
注意:
1,默認情況下prefork配置部分沒有ServerLimit配置,其在/usr/loca/apache2/bin/httpd(16進制)中編譯,一般會報錯如下
MaxClients of 1000 exceeds ServerLimit value of 256 servers,
lowering MaxClients to 256. To increase, please see the ServerLimit directive.
2,修改conf文件後,需要重新啟動
3,
prefork採用預派生子進程方式,用單獨的子進程來處理 不同的請求,進程之間彼此獨立。
相對於prefork,worker全新的支持多線程和多進程混合模型的MPM。由於 使用線程來處理,所以可以處理相對海量的請求,而系統資源的開銷要小於基於進程的伺服器。但是,worker也使用了多進程,每個進程又生成多個線程,以 獲得基於進程伺服器的穩定性。
apache http server 支持多線程
8、web api 並發 多線程嗎
應用伺服器的性能分析是復雜的,關注點很多。比如典型場景Web伺服器+數據專庫,底層網路鏈路和網路硬體屬性能姑且不論,單看:Web伺服器對靜態文件的讀寫與磁碟和文件系統IO性能緊密相關;對數據的處理和資料庫性能相關;而高並發訪問則關繫到操作系統的線程、網路套接字以及非同步網路模型的效率。
在數據量大的情況下,資料庫的性能成為一個至關重要的因素,隨之帶來Web伺服器等待資料庫的時間。在此基礎上如果有大量的用戶同時訪問,那麼會對Web伺服器帶來什麼樣的影響?以下主要討論這個問題。
對於並發訪問的處理,一般有兩種處理機制:非同步非阻塞機制、多線程阻塞機制(介紹略)。在測試選擇上,前者使用基於Python的Tornado伺服器,而後者使用基於Java的Tomcat伺服器。注意:本文並非討論開發語言的優劣,事實上,新版本的Java也支持非同步機制,甚至高性能的epoll等。
9、java多線程web伺服器 ,在線等,急。。。瀏覽器總是not found
你跑跑斷點,看看那個文件名是不是有問題哦!
10、java多線程web伺服器解決什麼用
web伺服器提供中間件,多線程解決多用戶同時訪問效率問題,java就是用java寫的