Hi again,
Well usually parallel processing means using different physical cores (processors) because simple multitasking insists on doing things sequentially rather than in parallel (at the same time). So for the following x data set where each x has two parts to the program that have to be done sequentially x(part1,part2) where we wanted to say calculate the value of y:
x1=(1,2)
x2=(3,4)
True parallel processing would be operating on 1 and 3 at the same time, and 2 and 4 after that. So while it's doing 1 is is also within the same time period doing 3, and while it is doing the second half of x1 (which is 2 here) it would be also doing the second half of x2 (which is 4 here). So 1 and 3 are parallel and 2 and 4 are parallel, but each set is still done sequentially as two parts.
Multitasking on the other hand would be doing 1, then 3, then 2, then 4, sequentially. In other words it would have to finish 1 before it could get to do 3, then finish that before it could get to do 2, then finish that before it could get to do 4. So it puts the whole task in order sequentially. It appears as though they are being done at the same time by the user because the user sees 1 and 3 getting done possibly too fast to notice that 3 had to wait for 1, but that's not really what is happening.
The real difference is in the overall program speed, where a processor core limited to a given speed would take twice as long to complete the above task as a dual core would take, simply because the dual core can do more processing in the same amount of time. But since there is no way to multitask a single process which depends on sequential data the parallel processing ends up being faster.
Maybe we should look at it more like it really is:
x1(1,2,3,4)
x2(5,6,7,8)
Parallel would mean doing pair (1,5) then doing pair (2,6), then (3,7), then (4,8).
Multitasking would mean doing 1, then 5, then 2, then 6, then 3, then 7, then 4, then 8. This would really be called threading though i think.
That appears to be the right way to look at it. Parallel refers to the time frame tasks are being executed under.
Whether or not a given system can automatically assign tasks to different cores i think is a different issue.
I think i see your point now though, that we can look at multitasking in a more general way rather than thinking of it in terms of multithreading where it seems to have originated.