Mapa de RxSwift y diferencia de FlatMap

No puedo entender la diferencia entre map y flatMap en RxSwift. En los ejemplos de juegos RxSwift y los libros, flatMap se utiliza como convertible Observables que tiene la propiedad interna Observable.

Sin embargo, veo que flatMap se usa directamente en Observable de tipos básicos. Por ejemplo, para el siguiente código, ambos producen la misma salida. ¿Alguien puede ayudarme a comprender la diferencia entre map y flatMap

struct Student {
    let score:Int
}

let ryan = Student(score:80)
let student = PublishSubject<Student>()

let deneme = student.map({ val in
    return Student(score: val.score+10)
})
deneme.subscribe(onNext: {
    print("StudentMAP: \($0.score)")
})

let deneme2 = student.flatMap({ val -> Observable<Student> in
    return Observable.of(Student(score: val.score + 10))
})

deneme2.subscribe(onNext: {
    print("StudentFlatMAP: \($0.score)")
})

 student.onNext(ryan)

Respuestas a la pregunta(3)

Su respuesta a la pregunta