Concurrency and real-time programming
Concurrency and Real-Time Programming can be defined as the programming discipline dealing with real-time critical software development. At first glance Real-time programming is often associated with the need for efficient computing power and throughput performance. Actually, the main issue for real-time programming is how to design programs that are able to compute and respond according to certain quality attributes (maximum response time, average response time, quality of calculation, precision of calculation, within a certain time frame) in a predictable manner.
In Real-Time Programming there is usually a need to respond to multiple requests in parallel, and with different Real-Time Constraints. The software may have to support a fast time cyclic and demanding control loop, while simultaneously having to respond to asynchronous inputs from the user. To solve programming problems with multiple control loops and simultaneous requests, different Concurrency Programming techniques have been applied.
Programming environments and languages supporting Concurrency Programming are, to mention a few: Ada, RHAPSODY UML with C++, ERLANG, Concurrent C++, C with proper operating system support.
As time criticalness is often a concern, the following languages often disqualify themselves because of unpredictable demanding garbage collection activities: Java, C#.
The following programming languages are normally not suitable for demanding real-time control due to their single-thread processing limitations: Basic, Lisp, Prologue,
But there have been developments in Java which support Real Time programming to some extent. Two reference implementations have been created one is provided by TimeSys and other by Sun Microsystems. They have introduced some new advanced concepts like ImmortalMemory, ScopedMemory, NoHeapRealTimeThreads etc, whose interaction with heap can be controlled or at the best disallowed thereby insulating them from the Garbage Collector and hence establishing themselves as promising potential constructs for efficient real time programming.