go语言和java+jetty的web hello world 性能测试对比


     公司现在的搜索服务RESTful架构一直是使用java + jetty; jetty的简单和高效一直很让人喜欢,搜索的RESTful架构两年来一直很稳定;但是软负载keepalived上想添加些业务的控制模块,可是keepalived没有专门的开发接口,自己新开发一套?对成本和性能、稳定性要求很高,考虑过scala 、lisp 、c 都觉得不合适,需要开发周期,性能都要考虑进去,go语言出来也两年多了,所以去关注了一下;下面是go对比jetty的性能测试。(注:go 语言的web没有服务容器这个概念,不需要apache 或nginx 等等,至少先阶段是这样)


测试的内容很简单,go 和java都是一个"hello world "的web输出


go代码

package main

import (
	"fmt"
	"log"
	"net/http"
	"strings"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) {
	r.ParseForm() //参数解析
	for k, v := range r.Form {
		fmt.Println("key:", k)
		fmt.Println("value:", strings.Join(v, ""))
	}
	fmt.Fprintf(w, "hello astaxie")
}

func main() {
	http.HandleFunc("/", sayhelloName)
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
		log.Fatal("listenAndServer", err)
	}
}


java代码

package com.search5173.jetty.test;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;



public class OneContext
{
	
    public static void main(String[] args)
    throws Exception
    {
    	 QueuedThreadPool threadPool= new QueuedThreadPool(); 
    	 threadPool.setMaxThreads(11);  
         threadPool.setMinThreads(4);   
        Server server = new Server();
        server.setThreadPool(threadPool); 
        
        
        Connector connector=new SelectChannelConnector();
        connector.setPort(8081);
        server.setConnectors(new Connector[]{connector});
        
        ContextHandler context = new ContextHandler();
        context.setContextPath("/t");
        context.setResourceBase(".");
        context.setClassLoader(Thread.currentThread().getContextClassLoader());
        server.setHandler(context);
        
        Handler handler=new HelloHandler();
        context.setHandler(handler);
        
        server.start();
        server.join();
    }
    
    public static class HelloHandler extends AbstractHandler
    {

		@Override
		public void handle(String arg0, Request request1, HttpServletRequest request,
				HttpServletResponse response) throws IOException, ServletException {
			

            response.getWriter().println("<h1>Hellodfgdfgdfgfd OneContext</h1>");
			
		}
    }
}




测试方式 apache ab, 这个简单方便

测试硬件

Pentium(R) Dula-Core CPU E5200 @2.50GHz

内存:3.25GB

操作系统:32位 (win7)


测试地址

1)   go--->http://localhost:9090/rwer

2)   java--->http://localhost:8081/t

测试脚本一

1)   ab -n 50 -c 10   http://localhost:9090/rwer

2)  ab -n 50 -c 10    http://localhost:8081/t

Requests per second:  结果:

jetty go
1311.44 2265.21
1083.40 2491.78
1423.85 1607.61
   

可以说在各方面go都完胜,知道go他强,但是没想到这么强,冲击很大。

再看些其他的

go:



jetty





本文来自:CSDN博客

感谢作者:Xiao_Qiang_

查看原文:go语言和java+jetty的web hello world 性能测试对比

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。