#presentation
Date : 2019/06/14
[https://www.youtube.com/watch?v=hQrFfwT1IMo](https://www.youtube.com/watch?v=hQrFfwT1IMo)
# なぜこの動画を見た
会社で Spring Boot + Kotlin でサーバーサイド開発する機会があったので主に外部システムとのやりとりの部分でノンブロッキングをうまく扱うにはどうするかというので動画を見た
# なんの動画か
Server Side で Kotlin Coroutine を使う方法の話
# メモ
たとえば、以下のようなトレーディングアプリケーションがあるとする
kotlin
```
fun placeOrder(order: Order): Response {
val account = accountService.loadAccount(order.accountId)
val margin = if (account.isOptionsAccount) {
marginService.loadMargin(account)
} else {
defaultMargin
}
return validateOrder(order, margin)
}
```
accountService と marginService は外部サービスで上の例ではスレッドをブロッキングしてしまう

たとえば、Service2 が遅い場合にはすべての Executor Thread Pool を使い果たしてしまいアプリケーション全体が遅くなってしまうことに繋がる。
これを防ぐためのプログラミングスタイルに Aync Programming がある
Kotlin では Kotlin Coroutine がこの実装になる
Kotlin Coroutine で suspend function を使うと通常と同じようなコードで上記の Async Programming を達成することができる
kotlin
```
suspend fun placeOrder(order: Order): Response {
val account = accountService.loadAccount(order.accountId) // suspend function
val margin = if (account.isOptionsAccount) {
marginService.loadMargin(account) // suspend function
} else {
defaultMargin
}
return validateOrder(order, margin)
}
```
# 感想