http2: interface to support pluggable schedulers
This adds an interface to support pluggable schedulers. The interface is defined in writesched.go. The only type needed by this interface is FrameWriteRequest, which describes a request to write a frame (this used to be called frameWriteMsg). The scheduler can be configured with a new field in http2.Server. Two schedulers are implemented: 1) A random scheduler that is essentially equivalent to the existing scheduler. This is currently the default scheduler if none is configured. The implementation is in writesched_random.go. 2) A scheduler that uses H2 weights and priorities. The H2 priority tree is maintained as a tree of priorityNodes. The next frame is chosen by walking this tree in topological order, where sibling nodes are ordered by their bandwidth usage relative to their H2 weight. Two optional features are added to improve performance -- these are configured with PriorityWriteSchedulerConfig. Fixes golang/go#16168 Change-Id: I97ec93e5c58c2efec35455ba2f3c31e849f706af Reviewed-on: https://go-review.googlesource.com/25366Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Showing
http2/writesched_priority.go
0 → 100644
http2/writesched_random.go
0 → 100644
http2/writesched_test.go
0 → 100644
Please
register
or
sign in
to comment