Why does the program show twice as many cores as actually available?

Note: This does not affect Macs using Apple Silicon processors.

System Monitor uses the same view on the computer as it is shared by macOS and all other running applications. Modern processors make use of a technology which simulates more processors in hardware as are actually available. This technique is known as Simultaneous Multi-Threading (SMT). At Intel, the product name IntelĀ® Hyper-Threading Technology is used.

To better utilize the individual components that make up a processor core, certain parts, in particular for the pre-processing of incoming instructions, are laid out twice. This way, the processor can internally distribute individual subtasks on its components better, pretending that two processors were available. This causes the operating system to feed it with two instruction sequences simultaneously. By this deliberate “overloading”, the tasks can now be reorganized so efficiently that as few of its subcomponents as possible are left unexploited. This causes data throughput to increase, of course never reaching the performance of two real processors. The actual speed gain of this technology strongly depends on the question whether the instruction sequences can be distributed on the available components without creating conflicts through oversubscription (double bookings).

So if you have a computer with two quad (four core) processors, eight real processors will be available. However, macOS handles these eight cores as sixteen cores and the whole process scheduling will be based on that. All programs receive the information that 16 processors can be used. This also includes monitoring applications like System Monitor. It is technically impossible for programs to differentiate between real and simulated processors.