Permission sets are, as the term suggests, a collection of permissions or settings that give users access to specific platform features/functions.
Permission sets are used to extend application feature access to users without changing their profiles.
Every setting you can apply to permission sets is also found on profiles (but not vice versa). A given user is related to only one profile, but it can be assigned to multiple permission sets.
Permission sets are not used to restrict permissions: you cannot use a permission set to revoke access to a specific object of a field if another permission set or user's profile grants this permission.
Think about a service user who has a service profile (cloned from the standard user ...