Visit Our UNIX and Linux User Community


Confusion over Multi Threading


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Confusion over Multi Threading
# 1  
Old 01-07-2015
Confusion over Multi Threading

Hi, I am trying to get my head round Multi Threading and I have a few queries to try and clear up my confusion

Q1. Is multi threading a hardware / chip level concept, an OS level or an application level concept ? I am trying to work out where SMT architecture fits in.

Q2. What's the multi threading position in relation to Unix, Linux and Windows ?

Q3. Is multi threading only in relation to application processes or is it for OS processes as well ? I am trying to differentiate multi threading from the older CPU concepts of timeslicing, round robin etc

My understanding is that you can have multi processing systems which switch between or execute processes in parallel. However multi threading takes this a step further in that a process can be broken down into threads and the processor execute the individual threads ( again via switching or parallel depending on the number of processors / cores you have )

Q4. Are processors therefore specifically designed either to execute full processes, threads or both ? Can a single processor execute a mix of full processes and threads ? i.e. does a processor operate only at either a process level or a thread level ?

Q5. What's the difference between a single processor with multi cores and a multi processor with single core processors ?

Q6. Are most modern processors today, multi thread capable processors ( or is it the OS which determines this ). Does the processor have to be specifically set to multi threading ?

any help greatly appreciated
Jim
# 2  
Old 01-07-2015
Threading can be implemented either in hardware or in software. It is an aspect of multiprocessing - which Windows, and Unix, and Linux all have. How they implement threads varies somewhat but a Windows threads program written in C (not C#) can be converted to either Linux or UNIX with some work. Usually.

One way to look at a thread is to see it as a lightweight process. It operates independently of the parent process for scheduling. It may share resources like common memory with the parent or any related thread in the "process tree" that is created by one parent making several threads. The OS can have kernel threads, which is what symmetric multiprocessing is all about (multiple cpu cores).

This kind of question transcends the usual kind of response on a forum . You need to read.
'Advanced Programming in the UNIX Environment' by Stevens and Rago. Read the chapters on process and threads. Come back with more specific questions.
# 3  
Old 01-07-2015
Quote:
Originally Posted by jimthompson
Q1. Is multi threading a hardware / chip level concept, an OS level or an application level concept ? I am trying to work out where SMT architecture fits in.
It's both -- and simpler than you think. Everything the CPU runs is a thread. Even a single thread is a thread! Time-slicing, pre-emption, all the usual rules still apply, even on multi-core. A store with several checkouts still sees lineups when its busy enough.

What I need to clear up, I think, is what "process" and "thread" actually mean. A process is a set of memory, open files, sockets, and one or more threads. A thread is a copy of a CPU's registers. Load it into any of the system's cores and that CPU will execute instructions from wherever it left off. When the thread is stopped, the registers are copied into memory, saved for later.

"Multithreading" means the ability to have several threads running in the same process. This means two CPU's simultaneously operating on the exact same memory, files, and sockets. Literally the exact same. Open a file in one thread, any other thread in the same process can use it by calling read() with the right file descriptor number.

This has some benefits. Having a set of files and sockets for every thread can be wasteful of memory, and if your processes are communicating with each other a lot, they may spend more time sending to and receiving from other processes than doing actual work. Since every system call is a pre-emption by definition (the thread stops while the kernel runs), this can mean a lot of pointless waiting for each other as well.

Two threads in the same process have access to all the same resources. This makes communication direct and fast, and makes some things easy which used to be nearly impossible -- imagine trying to send a file descriptor to another process -- very difficult. Another thread, though? Being in the same process, it's already valid.

It also has its problems. Each thread is scheduled independently, so you can't assume you always get the order you wanted. A common beginner mistake is to run a thread, immediately return from main (terminating the process and killing all threads) then wonder why the thread never finished. You also have to worry about race conditions -- if two threads write to the same variable at the exact same cycle, which wins? There are many books filled with this subject.
Quote:
Q2. What’s the multi threading position in relation to Unix, Linux and Windows ?
Linux threading used to be very eccentric -- it joined several single-threaded processes together instead of keeping several threads in one process. They replaced that with something POSIX-complaint now. Windows threading is more similar to UNIX threading than Windows processes are to UNIX processes, at least. It's hard for it to be that different when the concept is so similar. It's done through different calls, though.
Quote:
Q3. Is multi threading only in relation to application processes or is it for OS processes as well ?
Every CPU state is a thread, so kernels have threads.

Since the kernel is the thing which makes processes possible, it might even be thought to have threads without processes.

Quote:
I am trying to differentiate multi threading from the older CPU concepts of timeslicing, round robin etc
All these concepts still apply.
Quote:
My understanding is that you can have multi processing systems which switch between or execute processes in parallel. However multi threading takes this a step further in that a process can be broken down into threads and the processor execute the individual threads ( again via switching or parallel depending on the number of processors / cores you have )
Again, threads are what actually get scheduled. Otherwise, the rules are exactly the same.
Quote:
Q4. Are processors therefore specifically designed either to execute full processes, threads or both ?
This is a non-sequitur, the thread is what gets executed, the process is the context it runs in.

But in a manner of speaking -- both. Nearly any modern CPU handles memory management in hardware, and that's a big chunk of what needs to be done to manage a process.

Quote:
Can a single processor execute a mix of full processes and threads ? i.e. does a processor operate only at either a process level or a thread level ?
This is almost a simple question to answer... One core is one CPU, one CPU runs runs one thread, and everything is a thread.

Except, Hyperthreading processors can sometimes overlap two threads on one CPU. They have to be doing independent, non-overlapping things -- one could add two registers while another reads something memory, all on one CPU. This needs the help of the operating system, so a quad-core hyperthreading processor might appear to have 8 cores, but acts more like a 4-core which runs more instructions per clock cycle.

Quote:
Q5. What’s the difference between a single processor with multi cores and a multi processor with single core processors ?
One core is still one thread. Putting several cores on one chip is faster in some ways -- they can communicate directly, and share the same cache -- and slower in others. Imagine two cores fighting over one memory channel, versus two chips using two different buses.

Quote:
Q6. Are most modern processors today, multi thread capable processors ( or is it the OS which determines this ).
Any multi-core CPU supports it by definition, which these days is most consumer CPU.. A 64-bit PC has a CPU derived or cloned from AMD's Opteron chips, which were designed for several cores per chip from the beginning. Even before that, everything later than the Pentium was technically capable of it, except most boards didn't actually have multiple CPU's to take advantage of it.

Last edited by Corona688; 01-07-2015 at 04:16 PM..
# 4  
Old 01-07-2015
Quote:
Q1. Is multi threading a hardware / chip level concept, an OS level or an application level concept ?
Multi-threading can exist at three levels (userland/kernel/CPU) and each are not necessarily linked (a multi-threaded process can run on a single thread CPU and single threaded processes can take advantage of a multi-threaded (a.k.a hyperthreading) CPU.

Quote:
Q2. What's the multi threading position in relation to Unix, Linux and Windows ?
As far as kernels are concerned, CPU multi-threading/hyperthreading is not really different than multi-core or multi-CPU support.

Process threads are implemented through different APIs under Windows than under Unix and Linux which nowadays are both mostly using POSIX threads. The implementation used to be more complex with the "many to one" model (many software threads bound to a single kernel level thread) or the "many to many" one compared to the model mostly used today "one to one".

Quote:
Q3. Is multi threading only in relation to application processes or is it for OS processes as well ? I am trying to differentiate multi threading from the older CPU concepts of timeslicing, round robin etc
There is no difference, time-slicing / scheduling algorithms apply to threads and always did even when all processes were single threaded.

Quote:
My understanding is that you can have multi processing systems which switch between or execute processes in parallel. However multi threading takes this a step further in that a process can be broken down into threads and the processor execute the individual threads ( again via switching or parallel depending on the number of processors / cores you have )
Don't confuse CPU multi/hyper-threading/multi-core (first sentence) and process multi-threading (second one).

Quote:
Q4. Are processors therefore specifically designed either to execute full processes, threads or both ? Can a single processor execute a mix of full processes and threads ? i.e. does a processor operate only at either a process level or a thread level ?
There is no such thing as a full process vs a thread execution because threads are not other entities than processes. A process is just a collection of one or more (user level) threads.

Quote:
Q5. What's the difference between a single processor with multi cores and a multi processor with single core processors ?
No that much. One is some components are shared by the multiple-cores of a single CPU. This can impact performance.

Quote:
Q6. Are most modern processors today, multi thread capable processors ( or is it the OS which determines this ). Does the processor have to be specifically set to multi threading ?
The trend is for processors to have more than one core and for the cores to be multi-threaded. The OS doesn't determine what the hardware is. There is usually no configuration involved although with some high end CPUs like the UltraSPARC T4 and newer are able to switch from multi-thread to single thread mode, i.e. to monopolize all of a core resources to a single process thread.
 

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Multi threading in UNIX

Hi, Can we apply multi threading in Unix. I am using bash shell. We have a generic script to load the data to table based on file input. For each file there is an individual table to load. For each file found in directory I want to load the data in parallel to target table using ... (3 Replies)
Discussion started by: vedanta
3 Replies

2. UNIX for Beginners Questions & Answers

Does UNIX support multi-Threading ?

Not just background process running ... but im looking if unix has any multi-threading concept like in Java, C# ... if not present, can you pls share the nearest feature in unix that is close to multi-threaded concept (3 Replies)
Discussion started by: i4ismail
3 Replies

3. Programming

Multi-threading

In this piece i implemented the gossip method. The first thread is invoked from inside the (msg is first sent from node -1 to 0 from main()) and the other threads are invoked from inside of the thread function itself. I used two mutexes and a condition variable to control the synchronization. ... (4 Replies)
Discussion started by: saman_glorious
4 Replies

4. Programming

Multi-threading

Hi, If we create 10 threads to invoke runQuery method at same time, Will queryProcessor will be overriden sometime or 10 different copies will be created? We are not using any sunchronzation mechnism in runQuery(). so there is not gurantee on QueryProcessor class variables right OR each 10... (1 Reply)
Discussion started by: jramesh1
1 Replies

5. Programming

Multi-threading-- calling same function through different threads

Sir, Can I call same function in the start routines of different Threads. I have created two different threads....and wanna call same function from both threads....is it possible??? Also can I fork inside a thread??? (1 Reply)
Discussion started by: arunchaudhary19
1 Replies

6. Programming

Multi threading?

I am not sure if multi threading is the correct term, but here is what I am trying to do. I have a while loop that displays the number 1, pauses, displays the number 2, pauses , displays the number 3 ad infinitum. It just keeps counting. While the screen displays the sequence of numbers counting... (4 Replies)
Discussion started by: enuenu
4 Replies

7. Programming

Regarding Multi-Threading

Hi All, Here's my question I have a 385 MB file containing 5,000,000 records. I need to read from the file and load into a table. Initially i thought of doing it in a single thread (execution of a single program) but when calculated accounted 16 hours of time on a standard benchmark. Hence... (5 Replies)
Discussion started by: matrixmadhan
5 Replies

8. Programming

Multi threading using fork

Hi, I have written a code which will run a set of process using fork. I want to know from You how can i start another job when one of my job in my loop is completed My code is #include<stdio.h> #include<ctype.h> main() { int pid,cid; ChildProcess(); ... (1 Reply)
Discussion started by: sureshraju_ma
1 Replies

9. Programming

Multi-threading questions

I've been doing some reading lately about threading (Posix threads) and I'm really curious about a couple things that I've read. I'm not sure if many people here have threading experience, but I thought it would be nice to be able to discuss some questions about it. (For the record, I did... (1 Reply)
Discussion started by: DreamWarrior
1 Replies

10. Programming

Multi threading using posix thread library

hi all, can anyone tell me some good site for the mutithreading tutorials, its application, and some code examples. -sushil (2 Replies)
Discussion started by: shushilmore
2 Replies

Featured Tech Videos