For a very long time, a CPU could only process one execution flow at a time. Read instruction, decode instruction, execute instruction, and repeat.
At some point it was found that it would be interesting to process multiple execution flows at the same time — in parallel.
This started by having multiple CPUs, a so-called multiprocessor setup.
After a while, manufacturers starting putting multiple processors in the same chip. These processors inside the chip are often called cores, while the chip itself it called a multi-core CPU. But this is just one convention, and from the operating system or software point of view, the multiple cores are often considered as multiple CPUs.
Each core will contain a number of units used in the processing of an execution flow, but there may be additional stuff in the chip that is not part of any core, especially cache memory (there may be a small cache within each core and a larger cache shared by multiple cores), the necessary stuff to manage arbitration between the multiple cores, some execution units may be shared, there will be RAM interfaces (or built-in RAM in some cases), I/O interfaces (USB, SATA, PCIe…) and in recent “CPU” chips which contain a lot more than execution units, video-related stuff (VPU encoder/decoder, 3D GPU, video input and/or output), sometimes flash, etc.
So a “CPU” can either refer to a single core inside a chip which contains multiple cores and a lot of other stuff, or the whole chip. The latter is often called a SoC nowadays (system on chip) as more and more components which used to be external get integrated into a single chip.
In the PC world nowadays you’ll have nearly everything in the chip except RAM and some I/O, while in the world of mobile phones, tablets, embedded devices and recent Mac models even RAM is often integrated.