并发HTTP连接的数量受可用内存和操作系统限制的限制。
在Linux中,可以使用来打印和更改软操作系统限制(例如,打开文件的最大数量)ulimit。
在内存方面,运行在32位Linux上的最小型Go HTTP服务器中的每个HTTP连接都占用21 KiB的内存(该服务器的源代码,可与Go 2013-03-23版一起编译,位于下面)。在64位Linux上,预计内存消耗会更高。
在服务器可用内存为1GB的32位系统上,21 KiB表示可以同时进行约50,000个连接。这并没有包括Linux内核消耗的内存。
package main
import (
"flag"
"fmt"
"net/http"
"os"
"runtime"
"sync"
)
var isClient = flag.Bool("client", false, "Whether to start the HTTP server or the HTTP client")
var N = flag.Int("n", 1000, "Number of concurrent HTTP requests")
var wait = make(chan byte)
var counter = 0
var reachedN = make(chan byte)
func handler(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "