-
-
Notifications
You must be signed in to change notification settings - Fork 494
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixes #1663 Request/Reply Protocol Throughput and Scalability
This eliminates the req protocols use of nni_timer (and setting a single timer node per request. This was problematic because it devolves into O(n^2) as we wind up inserting timer nodes and having to scan the list for the timer node. The solution is to use a single scan - stop worrying about insertion, but instead use a coarse granularity timer (defaults to 1 second) for retries. Then do the O(n) scan just once per interval. A new option, NNG_OPT_REQ_RESENDTICK, can be used to change the tick interval for cases (like unit tests) where more fine grained timing is required.
- Loading branch information
Showing
4 changed files
with
192 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
= nng_req(7) | ||
// | ||
// Copyright 2018 Staysail Systems, Inc. <[email protected]> | ||
// Copyright 2023 Staysail Systems, Inc. <[email protected]> | ||
// Copyright 2018 Capitar IT Group BV <[email protected]> | ||
// | ||
// This document is supplied under the terms of the MIT License, a | ||
|
@@ -100,10 +100,27 @@ The following protocol-specific option is available. | |
(xref:nng_duration.5.adoc[`nng_duration`]) | ||
When a new request is started, a timer of this duration is also started. | ||
If no reply is received before this timer expires, then the request will | ||
be resent. | ||
(Requests are also automatically resent if the peer to whom | ||
the original request was sent disconnects, or if a peer becomes available | ||
while the requester is waiting for an available peer.) | ||
be resent. + | ||
+ | ||
(Requests are also automatically resent if the peer to whom | ||
the original request was sent disconnects, or if a peer becomes available | ||
while the requester is waiting for an available peer.) + | ||
+ | ||
Resending may be deferred up to the value of the `NNG_OPT_RESENDTICK` parameter. | ||
|
||
((`NNG_OPT_REQ_RESENDTICK`)):: | ||
|
||
(xref:nng_duration.5.adoc[`nng_duration`]) | ||
This is the granularity of the clock that is used to check for resending. | ||
The default is a second. Setting this to a higher rate will allow for | ||
more timely resending to occur, but may incur significant additional | ||
overhead when the socket has many outstanding requests (contexts). + | ||
+ | ||
When there are no requests outstanding that have a resend set, then | ||
the clock does not tick at all. + | ||
+ | ||
This option is shared for all contexts on a socket, and is only available for the socket itself. | ||
|
||
|
||
=== Protocol Headers | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.