Package bwio provides wrappers for io.Reader, io.Writer, io.Copy and io.CopyBuffer that limit the throughput to a given bandwidth. The limiter uses an internal time bucket and hibernates each io operation for short time periods, whenever the configured bandwidth has been exceeded.
The limiter tries to detect longer stalls and resets the bucket such that stalls do not cause subsequent high bursts. Usually you should choose small buffer sizes for low bandwidths and vice versa. The limiter tries to compensate for high buffer size / bandwidth ratio when detecting stalls, but this is not well tested.
Support for monotonic time before Go version 1.9 was implemented in a branch, but has been dropped. Use Go version 1.9 or later in order to profit from transparent non-monotonic time robustness.
Copyright (c) 2017 Johannes Kohnen [email protected]
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.