Forking is expensive, because every forked instance of your program is a full running copy of the original process, but is supported (or at least emulated) in every OS with POSIX support.
Threading is a steeper learning curve and is less universal than forking, but takes minimal resources in comparison. Threading and socket polling let you do things like thousand-connection-a second web servers.