In their most basic form General Purpose Input Output (here after simply called GPIO pins) are simple binary interfaces that are either on or off, this is why they are sometimes referred to as Digital Pins
in the Arduino community. As the name suggests they can be configured as an Input or an Output. This is similar to Read vs Write for those from a software background but with the hardware monitoring or controlling the flow of electrons to and from the pin.
For those simply concerned with writing code to control these pins it basically comes down to simply writing to a very specific address in memory either a high or low bit in the corresponding position in a particular byte that is assigned to that physical pin on the chip package.
It should be noted that it is common for specific pins on a chip to have more than one possible function depending on configuration of the hardware. So if a chip has 24 GPIO pins and 6 PWM pins (often called analogue pins in the Arduino community) there are likely only 24 physical pins on the device where 6 can be either binary I/O ports or contain a larger number of values depending on the PWM signal. This is an over simplification of Pulse Width Modulation, but only mentioned here to illustrate that pins have more than one possible function.