Thread Profiler is instrumenting calls to threading APIs. Sampling does not instrument at all! Thus, Sampling has a very low overhead during data collection while Thread Profiler can have a higher overhead. The downside is that you don't get info regarding the thread names.
There has been discussion of adding VTune analyzer APIs allowing users to name threads from within the code. How of you users require this information?