One of the main goals of the Avian Computing Project is to reduce the length of time it takes to develop parallel computer programs. In this post, we’ll look at how limiting the exposure of developers to programming languages will help us achieve our goal.
Conceptually, Avian Computing is a programming framework simulating the nature-based model. The model is relatively straight-forward; every thread is modeled on the lifecycle of a bird, hence the name Avian. Every bird is hatched, looks for food (work to do), digests it when it finds it, stores the resulting food, and then takes a nap. Well fed birds reproduce while unfed birds starve and die. Here’s a diagram of the process.
The birds always look in the “tree” for the food type configured by the developer in the Concurrency Explorer (ConcX). Any bird descended from a BasicBird knows how to find its kind of food without any coding by the developer. Storing the food and taking a nap, reproducing, and dying from old age or starvation are also done without any additional developer coding. The developer configures in ConcX how “well fed” a bird should be before it reproduces as well as how long it will live when it doesn’t find food.
Which means that the developer is only responsible for writing the code to “digest” their food. The digestion code can do anything the developer needs done, such as perform a mathematical calculation or format a string or look up and replace a value. The developer only needs to write the code to make the changes that should be applied to the chunk of food that the bird found before it puts the updated food back in the tree for the next bird to find.
The beauty of this system is that the Avian framework handles all of the locking and synchronizing without involving the developer. When a bird has a chunk of food, it has absolute control over that chunk of food, without having to worry about sharing it, and any changes that it makes to that food apply to that food only.
The Avian Computing environment moves the developer’s focus from “how should these threads be programmed to cooperate?” to “how should the data be broken into logical chunks that make sense to work on?” For example, an invoicing program might use the following food types: customer name and address, customer past due, customer current charges, customer special charges, customer invoice template, etc., and a different bird would eat each one of those food types.
The bird that ate the customer’s name and address would only know how to look up that information and put it into a standard format before putting it back into the tree. Eventually, an Invoicing bird would eat all the pieces for that customer and produce a finished invoice with all necessary information.
In this example, all of the work needed to generate an invoice was been done in parallel, with a minimum of programming, and with no particular sequence required. And since the Avian system automatically adjusts to the load, any birds that fall behind will reproduce and clone themselves until enough of them are available to keep up with the load.
All with a minimum of programming by the developer.