일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Kotlin
- 파이썬
- spring security
- JPA
- 백준 19238
- MSA
- JVM
- Spring
- 프로그래머스
- spring cloud
- 백준 16719
- 백준
- 백준 16236
- springboot
- java 기술면접
- MySQL
- 백준 17626
- 백준 파이썬
- 웹어플리케이션 서버
- 프로래머스
- Spring Boot
- re.split
- 백준 15685
- Coroutine
- sql 기술면접
- spring oauth
- 백준 16235
- with recursive
- java
- 백준 17779
- Today
- Total
목록Coroutine (4)
시작이 반
Tool : Jmeter 환경 : CPU 4Core 8Thread 1000명의 유저가 30초가 걸리는 api를 동시 호출 TEST1 구성 : netty + coroutine ( context : Dispatchers.IO ) @PostMapping("/api/test") suspend fun testApi():MutableMap = withContext(Dispatchers.IO){ log.info(">>>>>>>>>>>> start suspend") performService.measureTestPerform() } suspend fun measureTestPerform(): MutableMap = withContext(Dispatchers.IO) { val map = mutableMapOf() val..
Kotlin은 비동기 작업을 다룰 수 있는 동시성 라이브러리 이다. 동시성에는 잘못된 사용으로 여러 문제를 발생시킬 수 있는데 공유 데이터가 그중 하나이다. 여러 코루틴이 동시에 공유된 변수나 자료구조에 접근 하는 경우 데이터 경합이 발생할 수 있으며 이럴 때 해결할 수 있는 방법에 대해서 알아보자. 문제 코드 import kotlinx.coroutines.* import kotlin.random.Random import kotlin.system.measureTimeMillis suspend fun massiveRun(action: suspend () -> Unit){ val n = 100 val k = 1000 val elapsed = measureTimeMillis { coroutineScope { ..
여러개의 코드를 동시에 실행시키기 위해서는 Coroutine을 알기 전에는 쓰레드라는 개념밖에 생각나지 않았다. 쓰레드는 다수의 작업을 동시에 처리할 수 있으며, 일반적으로 쓰레드는 선점형으로 멀티태스킹이 가능하다. 하나의 작업이 한 쓰레드에서 발생하고 여러개의 작업을 동시 실행시키기위해 멀티 쓰레드를 사용한다. 멀티쓰레드 환경에서 CPU가 여러 Task를 바꿔 실행하기 위해 Context Switching을 하게 되고 이때 현재 PCB, 다음 PCB등에 대한 정보를 적재시키기는 등 Overhead가 매우 커질 수 있다. Coroutine 또한 여러 작업을 병렬적으로 처리하는 방법으로 비선점형으로 멀티태스킹이 가능하다. suspend와 resume을 사용하여 서브루틴을 구성하고 하나의 쓰레드에서 여러개의..
CoroutineScope CoroutineSocpe는 Coroutine이 실행될 수 있는 범위를 나타낸다. 이 범위는 Coroutine의 라이프사이클과 관련이 있으며 Coroutine이 완료되거나 종료될때 해당 범위가 생성되거나 없어진다. 코루틴 스코프 내에서 실행되는 코루틴은 부모-자식 관계를 가지며 자식의 코루틴이 예외가 발생하면 부모로 전파를 하여 모두 종료가된다. (But, 슈퍼 바이저 잡을 사용하면 예외 전파를 자식에게만 할 수 있다.) 코루틴 스코프를 만드는 방법에는 하위와 같은 방법 등이 있다. 코루틴 스코프 빌더 코루틴 빌더 runBlocking launch coroutineScope async withContext produce supervisorScope actor GlobalScop..