분류 전체보기
-
[Coroutine] 코루틴 학습 - 13 (Actors)Java/Kotlin 2022. 5. 17. 14:22
Actor 컴퓨터 과학에서 Actor model은 Actor를 병렬 컴퓨팅의 보편적인 기본 요소로 취급하는 수학적 모델이다. 액터는 메시지에 대한 응답으로 지역적인 결정을 내리고, 더 많은 액터를 생성하고, 메시지를 전송하고, 수신된 다음 메시지에 응답하는 방법을 결정할 수 있다. 액터는 자신의 비공개 상태를 수정할 수 있지만 메시징을 통해 간접적으로만 서로에게 영향을 줄 수 있다. (이는 잠금 기반의 동기화 필요성을 없앤다.) 각각의 액터는 싱글 쓰레드로 동작하고 메시지를 차례로 처리한다. 코루틴에서는 액터를 꽤나 쉽게 구현할 수 있다. 아래의 예시는 동기화 문제가 발생하지 않는다. 액터가 싱글쓰레드로 동작하고 있기 때문이다. 액터 모델을 간단하게 만들기 위해서는 코루틴 빌더를 이용하면 된다. seal..
-
[Coroutine] 코루틴 학습 - 12 (Channel)Java/Kotlin 2022. 5. 14. 13:05
Channel interface Channel : SendChannel, ReceiveChannel Channel은 여러 Sender와 Receiver를 지원하며, Sender가 전송하는 모든 값은 Receiver를 통해 수신한다. Channel은 인터페이스이고, SendChannel과 ReceiveChannel을 상속하고 있다. public interface SendChannel { public suspend fun send(element: E) public fun close(cause: Throwable? = null): Boolean // ... } SendChannel은 element를 전송하거나 채널을 close하는데 사용된다. public interface ReceiveChannel { pub..
-
[Coroutine] 코루틴 학습 - 11 (runTest)Java/Kotlin 2022. 5. 14. 02:13
runTest @ExperimentalCoroutinesApi public fun runTest( context: CoroutineContext = EmptyCoroutineContext, dispatchTimeoutMs: Long = DEFAULT_DISPATCH_TIMEOUT_MS, testBody: suspend TestScope.() -> Unit ): TestResult class Test { private val userRepository: UserRepository = mockk() @ExperimentalCoroutinesApi @Test fun `유저 한 명을 조회한다`() = runTest { // given val userId = 1L coEvery { userRepository.ge..
-
[Coroutine] 코루틴 학습 - 10 (Dispatchers)Java/Kotlin 2022. 5. 10. 09:22
Dispatchers 코틀린 코루틴 라이브러리가 제공하는 중요한 기능은 코루틴이 실행되어야 하는 쓰레드(또는 쓰레드 풀)를 결정할 수 있게 해주는 것이다. 이러한 기능은 디스패처를 사용하여 수행된다. 특정 코루틴에서 실행될 쓰레드를 결정하는 것은 CoroutineContext이다. Default dispatcher 디스패처를 설정하지 않는다면 디폴드로 Dispatchers.Default가 선택된다. 디폴트 디스패처는 CPU 집약적인 작업을 하도록 설계되었다. 쓰레드 풀의 크기는 코드가 실행되는 머신의 코어 수(2개 이상)와 같다. 적어도 이론적으로는 쓰레드를 효율적으로 사용하고 있다고 가정할 때의 쓰레드 수다. suspend fun main() = coroutineScope { repeat(1000) {..