Get programmatic access

Concurrent & Multithreaded Engine


A concurrent, multi-threaded engine

Serialized Payloads + Async Messaging

Let our engine handle queuing, pipelining, concurrency and multithreading. You focus on your domain. You will need Microsoft Bond for payload transformations and ZeroMQ for communicating messages over the wire.

The dev kit is targeted towards intermediate and advanced users. Developers unfamiliar with the basics of sockets, messaging patterns, concurrency and basic design patterns might have a bit of a learning curve but even then it shouldn’t be too difficult. The sample apps are meant to be a clear and straightforward starting point for developers.

  • Messages are serialized using Microsoft Bond for which we provide you the Bond compiler generated C++, C# and Java files. On the client side, you will use ZeroMQ to communicate with the engine.
  • We recommend you have only one Parietal context instance (a singleton or static class) per application as it encapsulates a ZeroMQ context and dealer socket identities which do not need to be recreated or duplicated. Ultimately how you choose to implement Parietal context and potentially make it multithreading capable if needed is up to your project policy.
  • Bindings are located in your installation folder: C:\Program Files\Parietal Numerics\bindings\

Synchronous Request-Reply Lifecycle

What To Expect

We encourage you to take a look at the complete examples which you can find in your install folder. However, we want to give you an idea of the interplay between three components.

  • Core Engine parietal.exe
  • Message Serialization Microsoft Bond
  • Message Transport ZeroMQ
  • Create request
      // create request ticket                                      
      var model = new pn.Lm
          kind = pn.Kind.OLS,
          is_async = false,
          X = X,
          Y = Y,
          add_intercept = true,
          x_labels = new List<string>(new string[] { }),
          y_labels = new List<string>(new string[] { })
  • Serialize it
      // serialize request
      var request = Pack<pn.Lm>.Run(ref model, pc.RequestWork);      
  • Send it
      // send request payload                                       
      pc.Push(ref request);
  • Engine responds when done
  • Listen for response
      // wait on response (number of tries).
      var (rc, zf) = Receiver.Receive(Receiver.ReceiveFrom.Sync, 200);
  • Deserialize it
      // unpack response payload
      var (metadata, response) = Unpacker<pn.O_lm>.TryUnpack(rc, ref zf);

To learn more about the SDK we encourage you to take a look at the documentation.