¿Qué hace realmente $ q.defer ()?

Estoy aprendiendo sobre Angular JS y en este momento estoy tratando de entender sobre las promesas y la programación asincrónica y tengo esta duda sobre$q.defer(). Mi punto es el siguiente: generalmente cuando las personas trabajan con promesas hacen algo así, considerando que $ q ya está disponible

function someAsyncFunction() {
    var deferred = $q.defer();

    /* Do things and if everything goes fine return deferred.resolve(result) 
       otherwise returns deferred.reject()
     */

    return deferred.promise;
}

¿Qué está haciendo esto realmente? Cuando hacemosvar deferred = $q.defer() cambia inmediatamente toda la ejecución de esa función a otro hilo y devuelve la promesa como una referencia a los resultados de esta operación que aún se está realizando allí?

¿Es esta la forma en que debemos pensar al crear métodos asincrónicos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta