I wonder what's the difference between a dual core computer and a computer with 2 processors on the mother board.. I think it's something related with the threads but a I don't understand it very well..
Multiple processors let your computer do literally two things at once (instead of only seemingly doing two things at once, but actually just swapping between tasks extremely rapidly).
Multiple cores are the same. The advantage of multiple cores over multiple processors is that they share some bits of the CPU, e.g. the second level cache, which makes it possible for them to work even more efficiently if they have some shared data. This makes them much cheaper to manufacture. A single dual-core CPU also takes up less room than two single-core CPUs, which is an important factor these days with everyone moving to laptops.
There may be some performance differences, but nothing you're likely to notice.
- A softer starter: The Difference Between Multithreaded and Multicore Programming
- More hardware oriented -- Demystifying multithreading and multi-core
Well, it's about scaling horizontally instead of vertically. In the old days they used to make CPU's faster and faster. Over time the speed of CPU's increased from only a handfull of megahertz to super speeds ranging up to 3 gigahertz. However, when the 3 gigahertz speed was reached CPU makers had found a limit to how far they could push the speed on a single CPU core.
While this speed race was happening, for those applications that needed more power (like servers and CGI render farms), the multi-socket CPU motherboards where introduced. This allowed to be more than one CPU (usually two) to be placed on the motherboard. Operating systems that where able to utilize multiple CPU's at once could run software that took advantage of this feature by distributing load over those two CPU's, therefore increasing execution speed.
Fast forward to present day. The CPU speed limit is somewhat reached and instead of scaling vertically (making it faster), CPU manufactures are starting to scale horizontally by placing multiple cores on a single chip. Currently dual core chips are very common and soon the quad cores will be the standard. Now imagine that you'd placed two quad cores on a single motherboard. This would mean that the operating system would have access to 8 CPU's, all running at around 3 gigahertz.
Besides multi-core CPU's there is also a 'fake' dual core CPU that uses a technology known as 'hyper-threading'. With hyper-threading the CPU emulates the presence two CPU's when there is in reality only one actual core present. The CPU knows how to make use of what would normally be down time by scheduling instructions in a specific way, gaining more efficiency.
From a software development perspective there is relatively little difference.
Some incorrectly written multi-threaded applications may accidentally work on a multi-core processor, but not on a multi-processor motherboard, but I would not lose too much sleep over that, since... well... we're talking incorrectly written software.
The main difference between the two scenarios for the same total number of available cores (for example, 1x 4-core processor vs. 2x 2-core processor) is that in the case of the multi-processor scenario there is typically a larger aggregate memory-bandwidth. This means that for any workload that is memory intensive you may be better off with the latter. Note however that locking primitives may actually be a bit slower (depending on hardware implementation) so algorithms that use a lot of synchronisation may actually perform worse on the latter.
Even so, I would not worry too much about the difference even then, because if you work in an area where this difference matters then you'd most likely already know about it (domain-specific knowledge).