코루틴에 대해서

김수호·2024년 12월 7일

코틀린

목록 보기
2/5

코드

소수를 구하는 코드를 작성하고

 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
    }

성능 비교

  1. 플랫폼스레드
  2. 코루틴 (설정x)
  3. 코루틴(Dispatchers : Default) - cpu 바인드
  4. 코루틴(Dispatchers : i/o) - I/O 바인드
    에 대한 성능을 측정한다.
플랫폼스레드코루틴코루틴(Dispatchers : Default)코루틴(Dispatchers : i/o)
1387 ms5750 ms765 ms705 ms
1377 ms6139 ms775 ms709 ms

i/o랑 default 차이

두개의 차이는 이제 확장의 차이입니다.
cpu 바인드의 경우 cpu의 코어 갯수에 따라 스레드가 확장되기에 적은량의 스레드로 최적화하여 처리를 합니다.
하지만 i/o의 경우는 읽거나 내보내는데 응답 대기시간이 발생하기에 더 많은 스레드를 확장하여 처리하려고 합니다.

아래 첨부된 이미지를 보면 50번 repeat를 통해서 특정 작업을 처리했을 시 io의 경우 44개의 스레드를 확장하여 처리하지만, cpu 바인드의 경우 11개의 스레드를 확장하여 사용했다는 사실을 알수 있습니다.

출처 : https://brunch.co.kr/@mystoryg/222

결론

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

profile
정답을 모르지만 답을 찾는 법을 알고, 그 답을 찾아낼 것이다. 그럼 괜찮지 않은가? -크리스 가드너-

0개의 댓글