동기(Synchronous)/비동기(Asynchronous) 처리

다음과 같이 여러개의 작업을 동시에 처리할때 작업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번 작업은 비동기로 작업을 완료하고 응답을 같이 주고 있습니다.

 

 

* 동시에 여러 곳을 연동해서 결과를 취합한다거나

  자원이 남아 별도의 스레드에서 처리하고자 할 때 사용하시면 됩니다.

 

 

 

 

 

 

  Comments,   0  Trackbacks
댓글 쓰기
RestTemplate 한글 깨짐

FCM 연동 중 한글 깨짐 현상 발생 시 다음과 같이 메세지 컨버터의 인코딩을 변경한다.

 

Kotlin

        val restTemplate = RestTemplate().apply {
            messageConverters.forEach {
                if(it is StringHttpMessageConverter) {
                    it.defaultCharset = Charset.forName("UTF-8")
                }
            }
        }

 

  Comments,   0  Trackbacks
댓글 쓰기
윈도우10에서 도커 용량 줄이기

윈도우에서 도커를 사용하다보면 사용하지 않는 이미지가 쌓여서 용량이 무한증식하는 사태가 벌어집니다
범인 : "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx"

 

미사용 이미지 삭제

> docker images 
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE 
ddanzit-api_api                   latest              1287e2e8862d        13 days ago         971MB 
                                          310c3191c7df        4 weeks ago         971MB 
                                          19dc6cd2a496        7 weeks ago         971MB 
shippang-api_shippang_server      latest              662739236085        3 months ago        1.53GB 
nginx_nginx                       latest              0a566ca88abf        3 months ago        23.9MB 

> docker rmi 310c3191c7df 19dc6cd2a496 
Deleted: sha256:310c3191c7df7d7928a40b92e2a98f962df9809d3c39b906e65e437cbad0e81a 
Deleted: sha256:128cb726ac87d5009933122f5ecd0e511c1e5b934b702b42680099ad93913872 
Deleted: sha256:9e053b0161e7c8e11742ed4056ea86ca67e407e54eea99f2385bffe0947232ac 
Deleted: sha256:93ec1b72be89394325b7b3103bc83f518d7224aaa4ad5386502b80986c80de9d 
Deleted: sha256:1e376dd0c9aeac1dc477ff8d3008fc494aaf1b6adc9d93cdbb7009c1ae3b88b0 
Deleted: sha256:3989b9e1791054bc63736b9d9bfc28d6d2332cdb5ace3106922151d8339b8310 
Deleted: sha256:d5d74293cd7816f8cfd3afa4c6be31d499669a85e283b00a0dcb59b3c2c411a5 
Deleted: sha256:ef3846b3cf8da1b7cd385745dcd8645681edf220168d95c98845f8fe79a59361 
Deleted: sha256:dd79b4f4ebb863b50f3204bf55ee9f069ab8eb3641651a5b7e3a72f604baeda8 
Deleted: sha256:19dc6cd2a49616860806ea9e6326ef3e45a238d30180a6658cf2653e12de8763 
Deleted: sha256:f73ba70111aa682b27a3e0771ce78f7766cf39aa8bdb8f4ea37d4b7e38fd34b3 
Deleted: sha256:30381e8fdc78ef0353abb0b24a6b6e7e176ef6606912106ed34434a5c59585e1 
Deleted: sha256:7cfcd9ebff4f7b772a2a0e013850e2aa595e16eb14a151d74cb3887c436ce2a4 
Deleted: sha256:c552b92c65d7ad06b29b4bfc0e6ef2ac3574a94deaeaf00b586000a93e789dab 
Deleted: sha256:676761e5886e28e0be002ece7e7c656c12fec7b4d7b5c9d3d8c843b1fe5d6313 
Deleted: sha256:b92fb12e0167105e63962f35d21dde069b7096f98e4c4d80cd51f1e135f8d9cf 
Deleted: sha256:e86492207dcca0add1fa1821d907cbd126354ce727b7f9c54590cba67ba38233 
Deleted: sha256:70e5ae3507821588585f063f1b96bcce9c1ebe69d53d4777a7180faaf771032f 

> docker images 
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE 
ddanzit-api_api                   latest              1287e2e8862d        13 days ago         971MB 
shippang-api_shippang_server      latest              662739236085        3 months ago        1.53GB 
nginx_nginx                       latest              0a566ca88abf        3 months ago        23.9MB

도커 중지

는 윈도우에서 잠시 도커를 꺼주세요

 

파일 최적화(cmd/powershell 관리자 권한)

>Optimize-VHD -Path  "C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx"  -Mode Quick

 가상 디스크 압축
    72%
    [oooooooooooooooooooooooooooooooooooooooooooooooooooo           ]

도커 시작

 

 

'개발 > Linux/Server' 카테고리의 다른 글

윈도우10에서 도커 용량 줄이기  (0) 2019.10.15
nginx 로그 로테이트  (0) 2019.01.11
대용량 더미파일 생성 방법  (0) 2018.12.27
쉘 이용해서 자동 로그인하기  (0) 2014.09.17
vmstat 파일에 쓰기  (0) 2014.08.25
shell 색상 입히기  (0) 2013.11.28
  Comments,   0  Trackbacks
댓글 쓰기