Although there is some variation in use of both terms, a "core" generally refers (collectively) to the primary calculation/execution units of a CPU. A "core" can execute calculations independently and generally encompasses a full set of execution units, in contrast with an individual "execution unit" (like SIMD, or a floating point unit) which is just one part of a "core" and must operate in conjunction with other elements, which form the whole of a "core". In a multi-core CPU there is more than 1 core, each generally operating somewhat independently in terms of execution/processing.
A "thread" on the other hand simply refers to a stream of calculations which form a part or the whole of a "process" (a "process" is generally the active running state of a single application). In a multi-threaded application there may be multiple threads. In a single-threaded application the single thread can be said to comprise the whole of the "process".
I'm sure that's still as clear as mud, but maybe this will help: A thread is *executed on* a "core" which is part of a CPU, either singly or multiply in a multi-core CPU. A single core can calculate multiple threads simultaneously, but is most efficient when concentrating calculations on a single thread. To most efficiently calculate multiple threads, especially when each thread is highly demanding as in a rendering context, it is best to have multiple CPU's or "cores" to which you can assign a thread.
In TG2 since each thread is so resource-intensive, and there is little or no benefit to running simultaneous thread on a single core, we detect how many cores are available for independent calculation and then spawn a number of threads that corresponds to the available cores.
More information in these Wikipedia articles:
http://en.wikipedia.org/wiki/Multi-core_(computing)http://en.wikipedia.org/wiki/Thread_(computer_science)- Oshyan