They work good!
Actually, to put it briefly, the G2 or G3 is a call code for your controller to use it's circular interpolation hardware to generate sinusoidal motion on two axis. Each axis moves different amounts and speeds during the movement, just as your pencil must do in X and Y if you were to draw a circle on a graph.
A G1 by contrast, is a call for simple linear motion of one or more axis, that means that they all start and end their linear movements at the same instants, but each axis moves at a constant speed throughout the movement.
The G2 and G3 commands also look more complex, because the controller also needs a parameter that describes where the center of the arc is supposed to be, in order that it can base its internal calculations on the correct point. So, quite often you will see the arc center described in terms of I and J, which are synonymous with the X and Y coordinates of the arc's center.
Your machine is always assumed to be at the start of the arc before reading the G2 or G3, so the G2 or G3 contains an X and Y component which describes the final position after the arc has been traversed.
More modern controllers, use a simple R (radius) value to determine the arc center, and leaves the geometric calculation of the center point up to your controller to figure out. This makes programming appear simpler to read, although it can skew a whole toolpath, if the R value is edited at the controller.