728x90
반응형

Android 공부 79

[XX캠퍼스] 07.Kotlin Coroutines & Flow (공유객체, Mutex, Actor )

공유 객체 문제 import kotlin.system.* import kotlinx.coroutines.* suspend fun massiveRun(action: suspend () -> Unit) { val n = 100 // 시작할 코루틴의 갯수 val k = 1000 // 코루틴 내에서 반복할 횟수 val elapsed = measureTimeMillis { coroutineScope { // scope for coroutines repeat(n) { launch { repeat(k) { action() } } } } } println("$elapsed ms동안 ${n * k}개의 액션을 수행했습니다.") } var counter = 0 fun main() = runBlocking { withCon..

[XX캠퍼스] 06. Kotlin Coroutines & Flow ( CEH와 슈퍼바이저 잡 )

GlobalScope 어디에도 속하지 않지만 원래부터 존재하는 전역 GlobalScope가 있습니다. 이 전역 스코프를 이용하면 코루틴을 쉽게 수행할 수 있습니다. GlobalScope는 어떤 계층에도 속하지 않고 영원히 동작하게 된다는 문제점이 있습니다. 프로그래밍에서 전역 객체를 잘 사용하지 않는 것 처럼 GlobalScope도 잘 사용하지 않습니다. import kotlin.random.Random import kotlin.system.* import kotlinx.coroutines.* suspend fun printRandom() { delay(500L) println(Random.nextInt(0, 500)) } fun main() { val job = GlobalScope.launch(Dis..

[XX캠퍼스] 05. Kotlin Coroutines & Flow ( 컨텍스트와 디스패처 )

디스페처 - 어떤 쓰레드에서 수행될지 결정 코루틴 디스패처 코루틴의 여러 디스패처 Default, IO, Unconfined, newSingleThreadContext을 사용해봅시다. import kotlinx.coroutines.* fun main() = runBlocking { launch { println("부모의 콘텍스트 / ${Thread.currentThread().name}") } launch(Dispatchers.Default) { println("Default / ${Thread.currentThread().name}") } launch(Dispatchers.IO) { println("IO / ${Thread.currentThread().name}") } launch(Dispatchers..

[XX캠퍼스] 04. Kotlin Coroutines & Flow ( 서스팬딩 함수 )

suspend 함수들의 순차적인 수행 순차적으로 suspend 함수를 먼저 수행시켜봅시다. import kotlin.random.Random import kotlin.system.* import kotlinx.coroutines.* suspend fun getRandom1(): Int { delay(1000L) return Random.nextInt(0, 500) } suspend fun getRandom2(): Int { delay(1000L) return Random.nextInt(0, 500) } fun main() = runBlocking { val elapsedTime = measureTimeMillis { val value1 = getRandom1() val value2 = getRandom2..

[XX캠퍼스] 03. Kotlin Coroutines & Flow ( 취소와 타임아웃 )

Job에 대해 취소 명시적인 Job에 대해 cancel 메서드를 호출해 취소할 수 있습니다. ( * Join 은 어떤 행동이 끈날때까지 대기하는 것 ) import kotlinx.coroutines.* suspend fun doOneTwoThree() = coroutineScope { val job1 = launch { println("launch1: ${Thread.currentThread().name}") delay(1000L) println("3!") } val job2 = launch { println("launch2: ${Thread.currentThread().name}") println("1!") } val job3 = launch { println("launch3: ${Thread.curr..

[XX캠퍼스] 02. Kotlin Coroutines & Flow ( 잡,구조화된동시성 )

잡,구조화된동시성 suspend 함수에서 코루틴 빌더 호출 import kotlinx.coroutines.* suspend fun doOneTwoThree() { launch { println("launch1: ${Thread.currentThread().name}") delay(1000L) // suspension Point println("3!") } launch { println("launch2: ${Thread.currentThread().name}") println("1!") } launch { println("launch3: ${Thread.currentThread().name}") delay(500L) // suspension Point println("2!") } println("4!") ..

[XX캠퍼스] 01. Kotlin Coroutines & Flow ( 스코프빌더 )

01. [Basic] 1부.코루틴과 동시성 프로그래밍 1-0 처음만나는코루틴 코루틴이란 ? - 실행의 지연과 재개를 허용하면서, 비 선점적 멀티테스킹을 위한 설계 패턴. 코루틴은 비 선점형 멀티태스킹이고, 쓰레드는 선점형 멀티태스킹이다. 이 말은 즉 코루틴은 병행성(Concurrency)을 제공하지만 병렬성(Parallelism)을 제공하지 않는 다는 의미이다. 아니 그럼 병행성과 병렬성의 차이는 무엇인가? 병행성(Concurrency) 동시에 실행되는 것처럼 보이는 것. Logical Level에 속한다. Single Core 사용 물리적으로 병렬이 아닌 순차적으로 동작할 수 있다. 실제로는 Time-sharing으로 CPU를 나눠 사용함으로써 사용자가 Concurrency를 느낄 수 있도록 한다. 병..

코루틴 Flow 참고 블로그 주소

https://kotlinworld.com/175 [Coroutine Flow] 1. Flow란 무엇인가? Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍 지원 하기 위한 구성요소이다. 이를 이해하기 위해서는 먼저 리액티브(반응형) 프로그래밍이 무엇인지, 그리고 Flow가 리 kotlinworld.com https://kotlinworld.com/232?category=973477 [Coroutine Flow] 2. Flow와 StateFlow의 차이는 무엇인가? Flow의 한계 Flow는 데이터의 흐름이다. Flow는 데이터의 흐름(flow)을 발생시키기만 할 뿐 데이터가 저장되지 않는다. 따라서 flow만을 이용해 안드로이드의 UIState를 업데이트 하기 위해서는..

코루틴 기초 정리 _ part 02 Cancellation And Timeouts

Cancellation ( 취소 , 해제 ) 코루틴 취소 val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // delay a bit println("main: I'm tired of waiting!") job.cancel() // cancels the job job.join() // waits for job's completion println("main: Now I can quit.") 런치는 잡을 반환하는데, 거기서 cancel() 하면 취소가 됩니다. 코루틴에서 취소가능 여부 체크하기 (방법1 - suspend ) val job = launch(Dispatcher..

코루틴 기초 정리 _ part 01

코루틴 컨텍스트 CoroutineContext 에는 Main, IO, Default의 세 가지가 있다. Main은 말 그대로 메인 쓰레드에 대한 Context이며 UI 갱신이나 Toast 등의 View 작업에 사용된다. IO는 네트워킹이나 내부 DB 접근 등 백그라운드에서 필요한 작업을 수행할 때 사용된다. Default는 크기가 큰 리스트를 다루거나 필터링을 수행하는 등 무거운 연산이 필요한 작업에 사용된다. 코루틴 빌더 launch - 새로운 코루틴을 만들어주는 빌더 역할을 한다. - 이녀석을 사용하려면 코루틴 스코프가 필요하다. - UI 작업 O - Job을 반환한다 runBlocking - 얘도 코루틴 빌더역할을 한다. - 자식 스레드가 완료될 때 까지 현재 대기중인 스레드를 block한다. -..

728x90
반응형