티스토리 뷰
다음과 같이 여러개의 작업을 동시에 처리할때 작업1,2가 메인작업과 별개의 작업일때
비동기(@Async)로 던져놓고 메인 작업만 완료 후 응답을 주기도 합니다.
(응답시간 0.5초, 작업1,2의 결과 받을 수 없음)
메인작업 : 0.5초
작업1 : 1초
작업2 : 2초
하지만 3가지 작업의 결과가 모두 필요할 경우 동기 처리를 하면 3.5초가 걸리지만
작업1, 2를 비동기로 처리하면 일찍 처리가 끝난 작업은 모든 작업이 완료될때까지 대기 후 응답을 줍니다.
(응답시간 2초, 3개의 작업 결과 확인 가능)
Kotlin
@RestController
@EnableAsync
class ThreadTest(
val taskService: TaskService,
val mainService: MainService
) {
@GetMapping("task")
fun testMapping(): String {
val start = System.currentTimeMillis()
val task1 = taskService.task1()
val task2 = taskService.task2()
val main = mainService.task()
return "main[$main], task1[${task1.get()}], task2[${task2.get()}], total[${System.currentTimeMillis()-start}]"
}
}
@Service
class MainService {
fun task(): Long {
val start = System.currentTimeMillis()
Thread.sleep(500)
return (System.currentTimeMillis()-start)
}
}
@Service
class TaskService {
@Async
fun task1(): CompletableFuture<Long> {
val start = System.currentTimeMillis()
Thread.sleep(1000)
return CompletableFuture.completedFuture(System.currentTimeMillis()-start)
}
@Async
fun task2(): CompletableFuture<Long> {
val start = System.currentTimeMillis()
Thread.sleep(2000)
return CompletableFuture.completedFuture(System.currentTimeMillis()-start)
}
}
테스트1
http://localhost:8080/task
main[502], task1[1001], task2[2001], total[2007]
메인 작업은 처리 완료 후 비동기 작업들이 완료될때까지 대기 후 응답을 주고 있습니다.
테스트2
반대로 동기로 처리하는 메인작업이 오래걸릴 경우도 테스트 해보겠습니다.
(MainService의 작업시간을 3초로 늘려주세요)
메인작업 : 3초
작업1 : 1초
작업2 : 2초
http://localhost:8080/task
main[3001], task1[1001], task2[2001], total[3004]
당연히 메인작업이 처리되는동안 1,2번 작업은 비동기로 작업을 완료하고 응답을 같이 주고 있습니다.
* 동시에 여러 곳을 연동해서 결과를 취합한다거나
자원이 남아 별도의 스레드에서 처리하고자 할 때 사용하시면 됩니다.
'개발 > Java, Kotlin' 카테고리의 다른 글
Spread operator(전개구문) in kotlin (0) | 2022.12.06 |
---|---|
히카리 풀 모니터링 (0) | 2020.04.28 |
RestTemplate 한글 깨짐 (0) | 2019.11.19 |
Kotlin toIntOrNull (0) | 2019.05.24 |
스프링 부트+마이바티스에서 트랜잭션이 안먹을때 (2) | 2018.06.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 톰캣
- 코틀린
- Kotlin
- boot
- java
- 도커
- jQuery
- 맛집
- maven
- properties
- IntelliJ
- 합정
- resttemplate
- Access
- docker
- oracle
- Linux
- vi
- vrapper
- Eclipse
- Shell
- Build
- Database
- grant
- Spring
- mybatis
- vim
- Profile
- ls
- Tomcat
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함