Consider that a user wants to browser internet and in parallel, it wants to watch movie. For this purpose, he open mozilla browser . At this time, linux starts mozilla browser instance(called as process). Also, for watching video, user launches VLC media player. So, linux also starts VLC media player. These two processes need to be run together. Say, Linux OS schedules them in round-robin manner. This way, user is able to perform multiple tasks(for example, browser and video running at the same time).
Nowadays, Browser has multiple tabs. Browser may want linux to schedule these tabs as well. Say, these tabs are implemented as threads managed by linux kernel. So, linux kernel will schedule each of them.
The Linux scheduler (on recent Linux kernels, e.g. 3.0 at least) is scheduling schedulable tasks or simply tasks.
A task may be :
a single-threaded process (e.g. created by fork without any thread library)
any thread inside a multi-threaded process (including its main thread), in particular Posix threads (pthreads)
kernel tasks, which are started internally in the kernel and stay in kernel land (e.g. kworker, nfsiod, kjournald , kauditd, kswapd etc etc...)
In other words, threads inside application multi-threaded processes are scheduled like non-threaded -i.e. single threaded- processes.
http://www.ibm.com/developerworks/library/l-completely-fair-scheduler/
http://stackoverflow.com/questions/15601155/does-linux-schedule-a-process-or-a-thread