Skip to content

Commit

Permalink
docs/coding-guidelines: Document limit on number of tasks (#2839)
Browse files Browse the repository at this point in the history
Add guideline to limit number of tasks being spawned.
  • Loading branch information
mxinden committed Aug 26, 2022
1 parent ca07ce4 commit a3dec47
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions docs/coding-guidelines.md
Expand Up @@ -10,6 +10,7 @@
- [Bound everything](#bound-everything)
- [Channels](#channels)
- [Local queues](#local-queues)
- [Tasks](#tasks)
- [Further reading](#further-reading)
- [No premature optimizations](#no-premature-optimizations)
- [Keep things sequential unless proven to be slow](#keep-things-sequential-unless-proven-to-be-slow)
Expand Down Expand Up @@ -201,6 +202,19 @@ growth and high latencies.
Note that rust-libp2p fails at this guideline, i.e. still has many unbounded
local queues.

### Tasks

Bound the number of
[tasks](https://docs.rs/futures/latest/futures/task/index.html) being spawned.
As an example, say we spawn one task per incoming request received from a
socket. If the number of pending requests is not bounded by some limit, a
misbehaving or malicious remote peer can send requests at a higher rate than the
local node can respond at. This results in unbounded growth in the number of
requests, and thus unbounded growth in the number of tasks and used memory.

Simply put, rust-libp2p spawns one task per connection but limits the overall
number of connections, thus adhering to this guideline.

### Further reading

- https://en.wikipedia.org/wiki/Bufferbloat
Expand Down

0 comments on commit a3dec47

Please sign in to comment.