![]() |
Hazelcast C++ Client
Hazelcast C++ Client Library
|
@Beta More...
#include <pipelining.h>
Public Member Functions | |
std::vector< boost::optional< E > > | results () |
Returns the results. More... | |
void | add (boost::future< boost::optional< E >> future) |
Adds a future to this Pipelining or blocks until there is capacity to add the future to the Pipelining. More... | |
Static Public Member Functions | |
static std::shared_ptr< pipelining > | create (int depth) |
Creates a Pipelining with the given depth. More... | |
@Beta
The Pipelining can be used to speed up requests. It is build on top of asynchronous requests like e.g. IMap#getAsync(const K&) or any other asynchronous call.
The main purpose of the Pipelining is to control the number of concurrent requests when using asynchronous invocations. This can be done by setting the depth using the constructor. So you could set the depth to e.g 100 and do 1000 calls. That means that at any given moment, there will only be 100 concurrent requests.
It depends on the situation what the optimal depth (number of invocations in flight) should be. If it is too high, you can run into memory related problems. If it is too low, it will provide little or no performance advantage at all. In most cases a Pipelining and a few hundred map/cache puts/gets should not lead to any problems. For testing purposes we frequently have a Pipelining of 1000 or more concurrent requests to be able to saturate the system.
Definition at line 81 of file pipelining.h.
|
inline |
Adds a future to this Pipelining or blocks until there is capacity to add the future to the Pipelining.
This call blocks until there is space in the Pipelining, but it doesn't mean that the invocation that returned the ICompletableFuture got blocked.
future | the future to add. |
null_pointer | if future is null. |
Definition at line 136 of file pipelining.h.
|
inlinestatic |
Creates a Pipelining with the given depth.
We use this factory create method and hide the constructor from the user, because the private up() and down() methods of this class may be called from the executor thread, and we need to make sure that the Pipelining
instance is not destructed when these methods are accessed.
depth | the maximum number of concurrent calls allowed in this Pipelining. |
illegal_argument | if depth smaller than 1. But if you use depth 1, it means that every call is sync and you will not benefit from pipelining at all. |
Definition at line 99 of file pipelining.h.
|
inline |
Returns the results.
The results are returned in the order the requests were done.
This call waits till all requests have completed.
IException | if something fails getting the results. |
Definition at line 116 of file pipelining.h.