Нет никакой частоты и нет никакого бесконечного цикла.
Обновление происходит только тогда когда вызывается $digest
Во многих случаях $digest вызывается автоматически. К примеру после срабатывания $watch
А вот из
setTimeout(function(){
$scope.x++;
},100);
нужно дергать вручную.
setTimeout(function(){
$scope.x++;
$scope.$apply();
},100)
иначе на изменения в scope никто не отреагирует