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.


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.

  • Could this parallelism gained in the one-to-one model be taken advantage of on a single-chip multi-core system AND a multi-chip single-core system? As in, if the system provides many single-core chips, can we run a single process's threads in parallel instead of running multiple processes (using only a single thread) in parallel? – Dominic Farolino Dec 6 '17 at 16:11
  • 1
    @DominicFarolino: In principle, multiple threads could be spread over multiple processors/chips. How well this works out depends mostly on how the memory synchronization between the processors is handled. – Bart van Ingen Schenau Dec 6 '17 at 16:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.