"In 2004, I wrote that 'the biggest sea change in software development since the OO revolution is knocking at the door, and its name is Concurrency' (http://www.ddj.com/184405990). The concurrency revolution now getting underway will be as significant as the object revolution of the late 1980s and 1990s in its impact on programming languages and development tools."
I have been trying to find some material to study on these matters but haven't been able to just yet. I guess that means that this is truly a new field. I want to find out how software I write can take advantage of the dual core (or however many cores, I think the mac pro is going to be a quad machine) a machine has. Is it something that will be handled by the kernel of an OS, the interpreter in an interpreted language, a virtual machines headache, or something your code has to handle. Do we have to use libraries like MPICH and do our applications have to be aware of MPI. How well do SMP kernels handle dual core processors.
I used to think that SMP was a pretty stable thing. However, I was surprised to find that Ubuntu doesn't use the SMP kernel by default because some software cause issues. What software causes what kind of issues? Must look that up.
Also, are their any differences in writing code for a dual-core vs. a dual CPU machine?