Of course, we really haven't shown truly parallel processing. We've shown how to make use of completion ports and not cause the main thread to be unresponsive. This really isn't doing two things at once when it comes to the cores in our system. We have multiple cores and we can use all of them to their full potential!
The real trick to making use of all your processors is your ability to divide up the work to be done, so that it can be offloaded, in parts, to each core. If you have an existing application and you're not already dividing up the work, this may be hard to do. You may already be dividing up the work within your application that we could possibly change to make use of multiple cores.
This book isn't a tome on parallelization of work, how to divide work by separating data involved in to units of work, and so on. The parallelization examples we'll detail here fall under the pattern of "embarrassingly parallel," which is code that is so obviously parallelizable as...