Douglas Eadline has an informative article that reviews some of the basic tenets of parallel programming, including the lesson that concurrency is a property of an algorithm, but having it is not the same as realizing a parallel implementation.
If the independent parts are run on separate cores/nodes then we will say the program is executed in parallel. And, just because your program has some concurrency, it does not mean that it will run efficiently in parallel. The distinction is subtle, but very important when real hardware is used. Since the goal is to make your program run faster, we need to ask the question, Does making all the concurrent parts of the program parallel increase execution speed? The answer to that question is a definite “maybe.” Why? Because in some cases running concurrent parts of your program in parallel may actually slow down your the overall application!
It’s good to review the basics every now and then. Check it out.