你的位置:首页 > 软件开发 > Java > 转:Java Web应用中调优线程池的重要性

转:Java Web应用中调优线程池的重要性

发布时间:2016-09-04 17:00:06
不论你是否关注,Java Web应用都或多或少的使用了线程池来处理请求。线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的。本文主要介绍Java线程池的使用和如何正确的配置线程池。单线程我们先从基础开始。无论使用哪种应用服务器或者框架(如Tomcat、Je ...

转:Java Web应用中调优线程池的重要性

不论你是否关注,Java Web应用都或多或少的使用了线程池来处理请求。线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的。本文主要介绍Java线程池的使用和如何正确的配置线程池。

单线程

我们先从基础开始。无论使用哪种应用服务器或者框架(如Tomcat、Jetty等),他们都有类似的基础实现。Web服务的基础是套接字 (socket),套接字负责监听端口,等待TCP连接,并接受TCP连接。一旦TCP连接被接受,即可从新创建的TCP连接中读取和发送数据。

为了能够理解上述流程,我们不直接使用任何应用服务器,而是从零开始构建一个简单的Web服务。该服务是大部分应用服务器的缩影。一个简单的单线程Web服务大概是这样的:

ServerSocket listener = new ServerSocket(8080);try { while (true) {  Socket socket = listener.accept();  try {   handleRequest(socket);  } catch (IOException e) {   e.printStackTrace();  } }} finally { listener.close();}

上述代码创建了一个服务端套接字(ServerSocket), 监听8080端口,然后循环检查这个套接字,查看是否有新的连接。一旦有新的连接被接受,这个套接字会被传入handleRequest方法。这个方** 将数据流解析成HTTP请求,进行响应,并写入响应数据。在这个简单的示例中,handleRequest方法仅仅实现数据流的读入,返回一个简单的响应 数据。在通常实现中,该方法还会复杂的多,比如从数据库读取数据等。

final static String response =  “HTTP/1.0 200 OK\r\n” +  “Content-type: text/plain\r\n” +  “\r\n” +  “Hello World\r\n”;public static void handleRequest(Socket socket) throws IOException { // Read the input stream, and return “200 OK” try {  BufferedReader in = new BufferedReader(   new InputStreamReader(socket.getInputStream()));  log.info(in.readLine());  OutputStream out = socket.getOutputStream();  out.write(response.getBytes(StandardCharsets.UTF_8)); } finally {  socket.close(); }}

由于只有一个线程来处理请求,每个请求都必须等待前一个请求处理完成之后才能够被响应。假设一个请求响应时间为100毫秒,那么这个服务器的每秒响应数(tps)只有10。

相关厂商内容

通过探针技术,实现Java应用程序自我防护

新Java,新未来

针对容器化服务的分布式存储实践

分布式关系型数据库架构探索

互联网金融的性能微创新,给你奇思妙想!


原标题:转:Java Web应用中调优线程池的重要性

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。