The Concurrency Explorer (ConcX) is the reference implementation of the concepts defined and developed by the Avian Computing Project. Avian Computing models parallel programs as flocks of birds, where each virtual bird behaves like a natural bird (this modeling is described in more detail elsewhere on this website). ConcX supports this model by allowing users to create virtual flocks of one or more birds, where each bird is actually an independent thread. Birds in the flock can be started individually or as a group.
Once a bird has been started (hatched), it lives according to the standard bird life cycle: it looks for food, digests it if it finds it, stores any results, and then takes a nap. If the bird has been configured to reproduce, it will clone itself any time it has met its configuration requirements. If the bird is unable to eat for its specified length of time, it will die of starvation unless otherwise specified. Unless otherwise configured, each bird will die of old age when it has exceeded its configured length of time.
All of these behaviors have been coded into ConcX. Because one of Avian Computing goals was to make it easier to think about parallel programs, ConcX has been implemented as a GUI environment with easy access to each bird’s individual configuration settings (life length, stamina (how long until it starves), frequency of searching for food, nap length, reproduction requirements, etc.). The GUI also provides activity progress bars for each bird that are updated in real time so it is easy to spot when a bird is behaving strangely (eating too much or not eating enough).
ConcX provides dozens of pre-defined birds that can be individually selected and configured in the GUI. Users can also create their own custom birds to meet the specific requirements of their parallel project. Custom birds typically only require overriding of a few “hook” methods in the BasicBird code. For example, if you wanted to add your name to a food pod’s description, your customer bird would extend from BasicBird and then would only have to override the afterEating method; all of the other functionality of the BasicBird (finding food, storing food, starving, napping, etc.) would all be inherited
Each bird will normally eat just one type of food pod, which can be selected on the GUI. In some situations, a bird may need to eat two types of food, in which case you will need to set the relationship between the two foods:
- both foods must be found for the bird to eat (AND)
- either food can be found for the bird to eat (OR)
Any time a bird successfully eats it will digest the food that it found. The Digestion phase is where most of the custom coding is expected to be written. This is where