grpc-java/examples
Eric Anderson 4168f67e38 Optimize blocking calls to avoid app thread pool
This reduces the necessary number of threads in the application executor
and provides a small improvement in latency (~15μs, which is normally in
the noise, but would be a 5% improvement).

Benchmark                         (direct)  (transport)  Mode  Cnt       Score        Error  Units
Before:
TransportBenchmark.unaryCall1024      true    INPROCESS  avgt   10    1566.168 ±     13.677  ns/op
TransportBenchmark.unaryCall1024     false    INPROCESS  avgt   10   35769.532 ±   2358.967  ns/op
After:
TransportBenchmark.unaryCall1024      true    INPROCESS  avgt   10    1813.778 ±     19.995  ns/op
TransportBenchmark.unaryCall1024     false    INPROCESS  avgt   10   18568.223 ±   1679.306  ns/op

The benchmark results are exactly what we would expect, assuming that
half of the benefit of direct is on server and half on client:
1566 + (35769 - 1566) / 2 = 18668 ns --vs-- 18568 ns

It is expected that direct=true would get worse, because
SerializingExecutor is now used instead of
SerializeReentrantCallsDirectExecutor plus the additional cost of
ThreadlessExecutor.

In the future we could try to detect the ThreadlessExecutor and ellide
Serializ*Executor completely (as is possible for any single-threaded
executor). We could also optimize the queue used in ThreadlessExecutor
to be single-producer, single-consumer. I don't expect to do those
optimizations soon, however.
2016-01-26 12:41:50 -08:00
..
android Give dependency example for android clients. 2015-10-07 16:08:36 -07:00
src Optimize blocking calls to avoid app thread pool 2016-01-26 12:41:50 -08:00
README.md Replace broken link in example 2015-09-28 14:43:36 -07:00
build.gradle Add an example compressing client 2015-09-08 13:06:25 -07:00

README.md

grpc Examples

To build the examples, run in this directory:

$ ../gradlew installDist -PskipCodegen=true

This creates the scripts hello-world-server, hello-world-client, route-guide-server, and route-guide-client in the build/install/grpc-examples/bin/ directory that run the examples. Each example requires the server to be running before starting the client.

For example, to try the hello world example first run:

$ ./build/install/grpc-examples/bin/hello-world-server

And in a different terminal window run:

$ ./build/install/grpc-examples/bin/hello-world-client

That's it!

Please refer to gRPC Java's README and tutorial for more information.