mirror of
https://github.com/valyala/fasthttp.git
synced 2026-06-15 16:07:51 +03:00
91 lines
2.1 KiB
Markdown
91 lines
2.1 KiB
Markdown
# Prefork
|
|
|
|
Server prefork implementation.
|
|
|
|
Preforks master process between several child processes increases performance, because Go doesn't have to share and manage memory between cores.
|
|
|
|
**WARNING: using prefork prevents the use of any global state!. Things like in-memory caches won't work.**
|
|
|
|
- How it works:
|
|
|
|
```go
|
|
import (
|
|
"github.com/valyala/fasthttp"
|
|
"github.com/valyala/fasthttp/prefork"
|
|
)
|
|
|
|
server := &fasthttp.Server{
|
|
// Your configuration
|
|
}
|
|
|
|
// Wraps the server with prefork
|
|
preforkServer := prefork.New(server)
|
|
|
|
if err := preforkServer.ListenAndServe(":8080"); err != nil {
|
|
panic(err)
|
|
}
|
|
```
|
|
|
|
## Benchmarks
|
|
|
|
Environment:
|
|
|
|
- Machine: MacBook Pro 13-inch, 2017
|
|
- OS: MacOS 10.15.3
|
|
- Go: go1.13.6 darwin/amd64
|
|
|
|
Handler code:
|
|
|
|
```go
|
|
func requestHandler(ctx *fasthttp.RequestCtx) {
|
|
// Simulates some hard work
|
|
time.Sleep(100 * time.Millisecond)
|
|
}
|
|
```
|
|
|
|
Test command:
|
|
|
|
```bash
|
|
$ wrk -H 'Host: localhost' -H 'Accept: text/plain,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7' -H 'Connection: keep-alive' --latency -d 15 -c 512 --timeout 8 -t 4 http://localhost:8080
|
|
```
|
|
|
|
Results:
|
|
|
|
- prefork
|
|
|
|
```bash
|
|
Running 15s test @ http://localhost:8080
|
|
4 threads and 512 connections
|
|
Thread Stats Avg Stdev Max +/- Stdev
|
|
Latency 4.75ms 4.27ms 126.24ms 97.45%
|
|
Req/Sec 26.46k 4.16k 71.18k 88.72%
|
|
Latency Distribution
|
|
50% 4.55ms
|
|
75% 4.82ms
|
|
90% 5.46ms
|
|
99% 15.49ms
|
|
1581916 requests in 15.09s, 140.30MB read
|
|
Socket errors: connect 0, read 318, write 0, timeout 0
|
|
Requests/sec: 104861.58
|
|
Transfer/sec: 9.30MB
|
|
```
|
|
|
|
- **non**-prefork
|
|
|
|
```bash
|
|
Running 15s test @ http://localhost:8080
|
|
4 threads and 512 connections
|
|
Thread Stats Avg Stdev Max +/- Stdev
|
|
Latency 6.42ms 11.83ms 177.19ms 96.42%
|
|
Req/Sec 24.96k 5.83k 56.83k 82.93%
|
|
Latency Distribution
|
|
50% 4.53ms
|
|
75% 4.93ms
|
|
90% 6.94ms
|
|
99% 74.54ms
|
|
1472441 requests in 15.09s, 130.59MB read
|
|
Socket errors: connect 0, read 265, write 0, timeout 0
|
|
Requests/sec: 97553.34
|
|
Transfer/sec: 8.65MB
|
|
```
|