Changes for page Concurrency

Last modified by chrisby on 2024/06/02 15:15

From version 1.6
edited by chrisby
on 2023/11/26 20:28
Change comment: There is no comment for this version
To version 1.8
edited by chrisby
on 2023/11/26 20:59
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -4,7 +4,7 @@
4 4  
5 5  ### Why concurrency?
6 6  
7 -* Concurrency is a decoupling strategy. The what is decoupled from the when. Concurrency is important and can improve the throughput and structure of an application. On the other hand, it is hard to write clean concurrent code and it is harder to debug.
7 +* Concurrency is a decoupling strategy. The what is decoupled from the when. Concurrency is important and can improve the throughput and structure of an application. On the other hand, it is hard to write clean concurrent code and it is harder to debug. -> own: And to test, right?
8 8  * Concurrency doesn't always improve performance behavior and but it always changes the design of the program. When working with containers, you should know exactly what you are doing.
9 9  * Concurrency demands a certain amount of management effort, which degrades performance behavior and requires additional code. Proper concurrency is complex, even for simple problems. Concurrency bugs are usually not reproducible; therefore, they are often written off as one-time occurrences (cosmic rays, glitches, etc.) rather than treated as true defects, as they should be. Concurrency requires a fundamental change in design strategy.
10 10  * Challenges: When threads access out-of-sync data, incorrect results may be returned.
... ... @@ -45,12 +45,15 @@
45 45   * Deadlock
46 46   * Livelock
47 47   * Thread Pools
48 - * Runnable
49 - * Callable
50 50   * Future
51 - * Java Executor Framework
49 + * Synchronization: General term for techniques that control the access of multiple threads to shared resources.
50 + * Race Condition: A situation where the system's behavior depends on the relative timing of events, often leading to bugs.
51 + * Semaphore: An abstract data type used to control access to a common resource by multiple threads.
52 + * Locks: Mechanisms to ensure that only one thread can access a resource at a time.
53 + * Atomic Operations: Operations that are completed in a single step relative to other threads.
54 + * Thread Safety
52 52   * Producer-consumer
53 - * Reader-recorder
56 + * Reader-recorder vs Reader Writer??
54 54   * Philosopher problem → Study algorithms and their application in solutions.
55 55  
56 56  ### Watch out for dependencies between synchronized methods
... ... @@ -83,22 +83,3 @@
83 83   * Client-based locking: User has to manually implement locking. This approach error prone and hard to maintain.
84 84  * If there is no access to the server an adapter class can be used instead. Even better would be thread-save collections using extended interfaces.
85 85  * As little synchronized code (`synchronized`) as possible should be used. And if, then only for small, critical code sections.
86 -
87 -### Problems of testing multi-threaded methods
88 -
89 -* Very tricky which is why concurrency should be avoided in the first place.
90 -* In general this requires a lot of iteration which makes it resource intensive.
91 -* The outcome is architecture dependent (OS, hardware) which introduced randomness and make the error detection unreliable.
92 -
93 -### Solution approaches for testing multi-threaded methods
94 -
95 -* Monte-Carlo-Tests
96 - * Write flexible, adaptive tests.
97 - * Repeatedly run them on a test server and randomly vary the test settings.
98 - * If something fails, the code is defect and the applied settings should be logged.
99 - * Do this early to gain tests ASAP for your testing repertoire or CI-server.
100 -* Execute these tests on every platform over a long time to increase the probability that
101 - * the production code is correct or
102 - * the test code is bad.
103 -* Execute the tests on a computer using simulations of application loads when possible.
104 -* There are tools to test thread-based code like ConTest.