Understanding Multi-threading (boost) in bitcoin initialization I am not familiar with boost in c++. Can any expert please explain in simple terms what is happening in the below code ? Is it like the logic in ThreadScriptCheck is scheduled to be run in background or how? 

This is taken from bitcoin initialization (src/init.cpp). The classes are defined in src/scheduler.h

AppInit2():

// Assume value of nScriptCheckThreads is 4

if (nScriptCheckThreads) {
    for (int i=0; i&lt;nScriptCheckThreads-1; i++)
        threadGroup.create_thread(&amp;ThreadScriptCheck);
}

// Start the lightweight task scheduler thread
CScheduler::Function serviceLoop = boost::bind(&amp;CScheduler::serviceQueue, &amp;scheduler);
threadGroup.create_thread(boost::bind(&amp;TraceThread&lt;CScheduler::Function&gt;, "scheduler", serviceLoop));
The boost::thread_group class doesn't do very much. It's basically just a container of threads. It doesn't really have any scheduling or dispatch functions. That this thread is part of a thread group doesn't really matter.

The CScheduler code allows a thread to run a task at a particular time. It requires a thread to run the various tasks that it schedules. This code creates a thread to runs those tasks for this CScheduler and adds it to the thread group.