# README # hmbdc is a C++ framework and library built on top of various real-world tested lockfree algorithms that facilitate ultra low latency and high throughput messaging (inter-thread, inter-process and thru network) programming. It aims to take most out of the allocated hardware resources (memory, cores, NICs and switches) to achieve latency and throughput goals. It works as a framework but it can also be used as libraries to collaborate with other frameworks. Please refer to: http://www.hummingbirdcode.net for reliability, scalability, performance and design information. Keywords and features: - multithreaded without the headache - lockfree / disruptor pattern - low latency / high throughput / kernel bypassing - support multiple types of transport mechanisms with the consistent look and feel C++14 API: interthread(~200ns delay, free), interprocess(ipc, ~200ns delay, free), UDP multicast(mcast, ~30us delay, free), TCP(tcpcast, ~30us delay, free), netmap multicast(netmap, ~15us delay, free), reliable multicast (rmcast, ~30us delay, hmbdc-licensed) reliable netmap (rnetmap, ~15us delay, hmbdc-licensed) - rmcast provides the same latency, throughput and scalability as UDP multicast and is as reliabel as TCP. rnetmap, even better, as reliable as TCP, it further reduces latencies using the netmap driver. - support symetric (no broker process) publish / subscribe topic based network communication including subscribing using topic prefixes - other high performance computing features: packet or message level sniffing, network link traffic arbitration, high speed async logging, timer, rate control ... - straightforward integration with any other programming languages that supports Linux piping - see the Python example in package. - performance measurement binaries using hmbdc are packaged in releases as well as their source code. both rmcast and rnetmap performance measure tools are runnable without any license requirement. The C++(14) flavor API are designed to be powerful and yet intuitive to use. The extensive template usage gives the compiler all the opportunities to optimize. The best way to get a taste of the lib is thru its examples and the API doc can be found at /opt/hmbdc/doc/html/index.html and the source headers. Some full examples to use hmbdc to send and receive messages (inter-thread, ipc and thru network) can be found in https://bitbucket.org/hmbd/hmbdc-rel/src More examples are packaged in the release. ### What is this repository for? ### * it is used in areas that are cpu / network intensive with high performance (latency / throughput) requirements. Where the aplication latencies is measured in the unit of microsecond, or the system throughput is measured in millions per second - such as high frequency trading, high performance server-backend, robotics, multi-core real-time systems, etc. hmbdc helps you get it done quick and fast. ### How do I get set up? ### * hmbdc supports gcc 4.8.5 (or later) on Linux CentOs 7 (or later, and their compatible Red Hat RHEL platforms) and Ubuntu 16 (or later) clang 5.0.1 (or later) on the above CentOs and RHEL platforms * go to the download page, and install the rpms (or deb on Ubuntu) and the dependency will be checked automatically. installed libraries and doc are located at /opt/hmbdc dir. * boost (later than 1.62), netmap and rnetmap need netmap driver * /opt/hmbdc/bin has compiled binaries to test the library functionality and performance on your platform * package functionalities: hmbdc-free (inter-thread, inter-process messaging, mcast, tcpcast, netmap) hmbdc-licensed (rmcast and rnetmap) ### Contribution guidelines ### * all suggestions and issue reports are welcome * please report the issue using the issues function on the downloading website, or contact email@example.com or firstname.lastname@example.org ### Who do I talk to? ### * public is granted all the rights to use and modify hmbdc-free without redistributing the modifications in source code format. * hmbdc-free is public downloadable freeware owned by Hummingbird Code Software LLC. Please contact email@example.com or firstname.lastname@example.org for hmbdc-licensed package. * most part of hmbdc-free and hmbdc-licensed are header only C++ libs. * please direct questions to email@example.com or firstname.lastname@example.org and thank you for your interests in hmbdc!