This thread links to multiple similar questions but it doesn't seem like there have been many comprehensive ones on this question despite its popularity.