Architecting your Concurrency Model
Friday, March 7th, 2008Abstraction of concurrency from software application logic
(a.k.a: “I feel the need… the need for - Concurrency…”)
So it went, the software industry continued to evolve our architectures into more componentized and modular arrangements.
Architecting for Concurrent Computing
Now that multi-core architectures are common and the need for concurrency in software architectures well understood, the next question is how best to architect our applications and how best to structure development organizations to support them. For the moment, let’s talk about the development organization.
There are two ways to handle this. First, train all your software developers to be experts in concurrency (yikes…). Second, have concurrency specialists to focus on making your applications parallel.
To the extent that you can do this, you can allow your application developers to focus on application logic and your concurrency experts to focus on concurrency. In addition, you can gain quite a bit more flexibility to your application architecture. The more your concurrency is abstracted, the easier it is to change without affecting the application logic. It’s really just an extension of the idea of loose coupling.
This means that the application developer does not have to be the primary owner of the concurrency model. The application developer is able to focus on the application, and a concurrency expert can design about the concurrency model, just as a DBA does with the data model - I wouldn’t be surprised if we start to see something like a Concurrency Model Architect (CMA?).
Anyway, the whole thing relies on being able to separate your concurrency model from your application logic. More on that later.
Patrick
