导航:首页 > IDC知识 > web服务器多线程

web服务器多线程

发布时间:2020-12-12 08:58:17

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写的

与web服务器多线程相关的知识