ざっくり簡単に説明します。
同期処理
同期処理は、順番通り(だいたいの言語は上の行から)直列で順番に処理が行われることです。
ある処理が先に走ったとき、その処理が終了するまで、次の処理は実行されません。
だいたいの言語で、普通に処理を書けば、この同期処理になります。
変数の値保証が基本的にされるので、
非同期にしたいなど特に無ければ、同期処理のままにするのが基本です。
非同期処理
メインの処理が動きつつも、並行して実行させる処理です。
ゆえに、メインの処理が実行されてる間に、同時に処理を進めることができるので、
重い処理をバックグラウンド(非同期)で実行させることにより、
メインの処理、表示に影響を出さずにいれます。
ようは、重い処理の終了を同期的に待たずに、軽い処理やメインの処理を先に実行、とすることができるというわけです。
よく使われる処理としては、HTTP通信でのAPI使用時に、レスポンスを受け取るとかです。
また、読み込みの処理や、デバイス内の重いデータの読み込みなんかにもよく使用されます。
利点としては上記の通りですが、
デメリットというか、注意点としては、非同期で変数を定義、代入としたときに、
メインの処理でその変数を使いたいってときに、変数にまだ値が入ってない!ってことが起きやすいことです。
よって、非同期処理の際は、基本的に、処理が終わった際に実行されるコールバックを用意し、
そのコールバックで、メインの処理の変数に代入、処理の続きを行う、ということをします。
Swiftでよく使うフレームワークである、
UIKit/AppKitにおいては、非同期処理の多くは、デリゲートを使用しています。
また、今回の話は、スレッドについても深く関係してきますので、
より理解するには、学習が必要かと思います。
上記二つの他、並列処理というものがありますが、(非同期処理と非常に似てるが、違う)
本件では割愛します。
各用語に関しては、ご自身でお調べください。
学習の仕方ですが・・・、一番いいのは、WebAPI用意してー、ですが、(最近はよくAPI処理をする案件がほとんどのため)
デバイス内の重いファイルに対しての非同期処理、といった形で練習すればいいのではないでしょうか?
APIに関しては、書籍もいっぱいありますし、
画像や動画処理に関しては、書籍もいっぱいありますし、
Swiftの練習としてはかなりいい教材になると思いますよ。