Concurrency Models – Difference Between Many-to-One and One-to-One Models

modelmultithreadingoperating systems

I am studying "Threads" part with a textbook, Operating system concepts written by Abraham Silberschatz, Peter, Greg.

First, I'm going to say something in the textbook related to my question, and then to ask the question. If someone already knows the following theory, skip to my question, please.


The book defined parallelism and concurrency like the following:


Concurrency supports more than one task making progress.

Concurrent execution on single-core system:


Parallelism implies a system can perform more than one task simultaneously.

Parallelism on a multi-core system:

Parallelism on a multi-core system


Many-to-one model: true concurrency is not gained because kernel can schedule only one thread at a time.


One-to-one model: provides more concurrency than many-to-one model."


My question is why concurrency is not gained in many-to-one model and why one-to-one model provides more concurrency than many-to-one model.

I think that many-to-one model's performance is not gained, but I think concurrency is 4 times greater than single thread. In addition, one-to-one model provides 4 times more concurrency than single thread (same as many-to-one model). Moreover, parallelism is 4 times better than many-to-one model in multi-processor architectures.

My conclusion is the textbook wrote wrongly. So it should be changed like the following

Many-to-one model: concurrency is improved up to the number of user threads, but performance is not gained because kernel can schedule only one thread at a time.

One-to-one model: concurrency is improved up to the number of user threads, and performance is also improved up to the number of processors.

Is my thought right or wrong? Thank you for reading.

Best Answer

Your textbook isn't wrong, but it is using the term 'concurrency' a bit loosely at times.

Concurrency means that there is the appearance that multiple tasks are being done at the same time.
True concurrency means that multiple tasks are actually been done at the same time. This is also referred to as Parallelism. Your textbook appears to be using these terms interchangeably, which isn't wrong but can be misleading if you overlook the word 'true'.


In the many-to-one model, you get concurrency (the appearance that tasks run at the same time) but you can't get parallelism. There is only one kernel thread and that can't be spread over multiple processors.

In the on-to-one model, each user thread has a corresponding kernel thread, which gives the kernel more options to provide concurrency or even parallelism.