HTTPS SSH
# 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 needs 
  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 
  dev@hummingbirdcode.net or hummingbirdcode@gmail.com

### 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 dev@hummingbirdcode.net or
  hummingbirdcode@gmail.com for hmbdc-licensed package.
* most part of hmbdc-free and hmbdc-licensed are header 
  only C++ libs.
* please direct questions to dev@hummingbirdcode.net or 
  hummingbirdcode@gmail.com 
  and thank you for your interests in hmbdc!