How often does hook_cron happen?
As often as you like :) 


By default you can configure it on: /admin/config/system/cron (This will be executed on someone's page load, so it is importan to know that if nobody visits your site this will not be executed). This is known as poormanscron (Drupal 6).
Calling with a internal/external cron script (wget for example) to yoursite.com/cron.php


This is a heavy process so normally you want to limit cron functions like check updates. elysia cron is very useful in this case. 


  Elysia Cron extends Drupal standard cron, allowing a fine grain control over each task and several ways to add custom cron jobs to your site.