Hi all. I'm new to concurrency and am looking for some guidance on the 'best' way to accomplish something.
Background: Extremely abstract example here. There is some task(s) to accomplish. The tasks can vary greatly from one another in complexity. There are a number of algorithms available which could all be used to solve these tasks. However, no one algorithm dominates the others for all cases. It is also very challenging to profile the tasks and algorithms to effectively match them to the optimal algorithm. Performance varies such that task/algorithm combinations could take seconds, minutes, or hours to complete.
Given n algorithms in our portfolio (lets say 4 for example), when a task is presented, we wish to run all 4 algorithms concurrently. As soon as one algorithm completes the task, we will terminate the others and use the results from the first finisher. (So, it's a cut-throat winner-take-all race)
So far in reading the concurrent java examples out there, I've yet to see anything that would/could match this scenario.
Few years ago I implemented a competition sorting algorithm: The idea was to use different sorting algorithms to sort the same array concurrently. All algorithms accessed concurrently a single array-instance at the same time. If one of sorting algorithms was finished then other algorithms were canceled.
I adapted few sorting algorithms like in place quick sort, insertion sort thus they could work on the same array without disturbing each other. To lock many variables at ones I used a scheduler which avoided deadlocks. Suddenly final sorting algorithm was very slow because the most of time was consumed by data-access and synchronization.
Here you can find the scheduler implementation: