소수를 구하는 코드를 작성하고
fun findPrime(limit: Int): Long {
var count = 0L
for (i in 2 until limit) {
if (isPrime(i)) {
count++
}
}
return count
}
fun isPrime(number: Int): Boolean {
for (i in 2 until sqrt(number.toDouble()).toInt()) {
if (number % i == 0) return false
}
return true
}
| 플랫폼스레드 | 코루틴 | 코루틴(Dispatchers : Default) | 코루틴(Dispatchers : i/o) |
|---|---|---|---|
| 1387 ms | 5750 ms | 765 ms | 705 ms |
| 1377 ms | 6139 ms | 775 ms | 709 ms |
두개의 차이는 이제 확장의 차이입니다.
cpu 바인드의 경우 cpu의 코어 갯수에 따라 스레드가 확장되기에 적은량의 스레드로 최적화하여 처리를 합니다.
하지만 i/o의 경우는 읽거나 내보내는데 응답 대기시간이 발생하기에 더 많은 스레드를 확장하여 처리하려고 합니다.
아래 첨부된 이미지를 보면 50번 repeat를 통해서 특정 작업을 처리했을 시 io의 경우 44개의 스레드를 확장하여 처리하지만, cpu 바인드의 경우 11개의 스레드를 확장하여 사용했다는 사실을 알수 있습니다.
출처 : https://brunch.co.kr/@mystoryg/222

코루틴 Dispatchers 설정하고 사용하면 플랫폼 스레드보다 빠르게 사용할 수 있고, 특정상황에 따라 dispatchers를 사용해야 제대로된 성능이 나온다.