High on many developer’s and development manager’s minds these days is being able to utilize multicore CPU’s that have become ubiquitous in today’s computers.
It comes down to concurrency - a challenge that computer science has been grappling with for decades with limited and modest success. An “easy” way to get concurrency on modern hardware is to run multiple applications, in which the operating system will generally assign each to a different core. But to address our problems with concurrency then requires us to break our problems into multiple cooperating applications, or to facilitate using more traditional concurrency mechanisms within a single app, providing it can multithread. Regardless, either approach requires thinking, planning and changes in how we address the problem we are trying to solve. Most languages and applications require upfront planning for concurrency to achieve it, or rework and rearrangement of existing applications.


