Why would I want my application to create more threads than the number of processors (well, actually, cores)?
One very good reason is if you have threads that are waiting for events. For example, you might have a producer / consumer application in which a producer reads data from a certain data stream, and this data comes in packets: several hundred (or thousands) of records in a batch, after which nothing happens, and then another explosion. Say you have a 4-core machine. You can have one producer stream that reads the data and puts it in the queue, and three consumer flows for processing the queue.
Or you can have one producer flow and four consumer flows. In most cases, the producer flow is idle, giving you four consumer flows to process items from the queue. But when items are available in the data stream, one of the consumer flows is replaced in favor of the manufacturer.
This is a simplified example, but essentially similar to the programs that I have in production.
In a more general sense, it makes no sense to create more continuous workflows (i.e. related to the processor) than you have processors (mainly CPU cores, although the existence of a hyperflow mutates the water a bit). If you know that your threads will not wait for external events, then if there are n+1 threads, when you have only n kernels, you lose time using thread context switches. Please note that this is strictly in the context of your program. If there are other OS applications and services, application flows will change from time to time so that these other applications and services can receive time limits. But it is suggested that if you use a processor-intensive program, you will limit other applications and services that run at the same time.
The best thing, of course, is to set up a test. On a quad-core machine, test your application with threads 1, 2, 3, 4, 5, .... The time it takes to complete a different number of threads. I think you will find that on a 4-core machine the sweet spot will be 3 or 4; most likely 4 if there are no other applications or OS services that take up a lot of CPU.