강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của audition365695
audition365695

câu hỏi đã được viết

Hệ thống sự kiện đến trước được phục vụ trước để học thông qua thực hành

Cài đặt môi trường làm việc

ApplyService 의 총 처리 시간이 궁금합니다.

Viết

·

142

0

Redis 로 문제점 해결하기 강의 7분 쯤에 나오는 설명으로,

redis 는 싱글스레드 기반으로 동작하기 때문에

 

Thread 1 에서 10:00 에서 10:02 동안 incr coupon_count 메서드가 동작한다고 했을 때 10:02분에 끝나고나서 thread 2의 incr coupon_count 가 동작한다고 말씀하셨는데요

 

이는 딱 redis 가 싱글스레드로 동작하는 시간 만큼만이 lock 이 걸린 시간이라고 보면 될까요?

 

예컨데 ApplyService 의 apply 가 싱글 스레드, 단일 요청에 딱 2분이 걸리는 메서드라고 가정하고

 

그 안에 있는 couponCountRepository.increment() 가 1초가 걸린다고 가정하면

 

100개의 요청이 동시에 들어온 경우, 전체 요청이 모두 처리되는 시간이

 

2분 + 1*100초 = 3분 40초가 걸린다고 계산하는게 맞는거죠? 2분*100이 아니라요

javadockerspring-bootkafkaredis

Câu trả lời 1

0

169developer9973님의 프로필 이미지
169developer9973
Người chia sẻ kiến thức

조기윤님 안녕하세요.

Thread 1 에서 10:00 에서 10:02 동안 incr coupon_count 메서드가 동작한다고 했을 때 10:02분에 끝나고나서 thread 2의 incr coupon_count 가 동작한다고 말씀하셨는데요
이는 딱 redis 가 싱글스레드로 동작하는 시간 만큼만이 lock 이 걸린 시간이라고 보면 될까요?

여기서 lock 은 어떤 lock 을 말씀하시는걸까요?
강의에서 말하고자 했던것은 redis 는 순차적으로 명령을 실행하며 현재 실행중인 명령이 끝나야 다음 명령이 실행된다 였습니다!

예컨데 ApplyService 의 apply 가 싱글 스레드, 단일 요청에 딱 2분이 걸리는 메서드라고 가정하고 그 안에 있는 couponCountRepository.increment() 가 1초가 걸린다고 가정하면 100개의 요청이 동시에 들어온 경우, 전체 요청이 모두 처리되는 시간이 2분 + 1*100초 = 3분 40초가 걸린다고 계산하는게 맞는거죠? 2분*100이 아니라요

ApplyService.apply 메소드가 싱글스레드로 동작하며 메소드의 실행시간이 2분이라고 가정하고
couponCountRepository.increment() 가 1초가 걸린다고 가정한다면

100개의 요청을 처리하는데 걸리는 시간은 2분 * 100 일것같네요.

  • ApplyService.apply 는 1번에 1개의 요청밖에 처리를 하지 못합니다.

  • couponCountRepository.increment() 하는 로직은 ApplyService.apply 메소드 안에 존재합니다.

  • ApplyService.apply 는 처리하는데 2분이 걸립니다. 싱글스레드 이므로 이전 요청이 끝나고난 이후 다음 요청을 처리할 수 있습니다. 따라서 100개의 요청을 처리하는데는 2 * 100 분이 걸릴것같네요

audition365695님의 프로필 이미지
audition365695
Người đặt câu hỏi

안녕하세요. 빠른 답변 감사드립니다~! ㅎㅎ

모호하게 질문드린 부분이 있는 것 같아서 내용을 조금 명확하게 정정하겠습니다.

 

먼저 lock 이라고 말씀드린 부분은 용어를 잘 못 사용한 것 같습니다.

Redis 가 싱글 스레드로 동작하는 시간 만큼 다른 Thread 가 접근하지 못하는 상황을 lock 걸린 시간이라고 표현했습니다만, 쓰레드 대기 시간 정도로 표현하는게 적절했을까 싶네요.

 

그리고 결과적으로 이 부분에서 질문드리고 싶었던 것은,

예컨데 ApplyService 의 apply 가 싱글 스레드, 단일 요청에 딱 2분이 걸리는 메서드라고 가정하고 

ApplyService 의 apply 메서드가 단일 요청 1개를 처리하는데 걸리는 시간이 2분이라고 가정하고 싶었고

 

100개의 요청이 동시에 들어온 경우, 전체 요청이 모두 처리되는 시간이 2분 + 1*100초 = 3분 40초가 걸린다고 계산하는게 맞는거죠? 2분*100이 아니라요

그런 상황에서 100개의 요청이 ThreadPoolSize 가 100인 멀티 스레드가 가능한 환경에서 한꺼번에 들어왔을 때를 전제로 전체 요청 응답 시간을 계산하고자 하였습니다.

 

제 개인적인 예상으로는 Redis 를 통해 발생하는 대기 시간이 발생하는 경우를 제외하고는 동시에 처리가 되어서

1번째 요청은 2분, 2번째 요청은 1초 대기 후(redis 처리 대기) 2분1초에 끝나고 100번째 요청은 100초대기 후 2분걸려서 3분 40초에 걸리게 되지 않을까 생각했는데 이렇게 예상하는게 맞는지 질문 드립니다~!

 

169developer9973님의 프로필 이미지
169developer9973
Người chia sẻ kiến thức

조기윤님 안녕하세요.
알림을 놓쳐서 답변이 늦었습니다 ㅠㅠ 죄송합니다.

그런 상황에서 100개의 요청이 ThreadPoolSize 가 100인 멀티 스레드가 가능한 환경에서 한꺼번에 들어왔을 때를 전제로 전체 요청 응답 시간을 계산하고자 하였습니다.

 

제 개인적인 예상으로는 Redis 를 통해 발생하는 대기 시간이 발생하는 경우를 제외하고는 동시에 처리가 되어서

1번째 요청은 2분, 2번째 요청은 1초 대기 후(redis 처리 대기) 2분1초에 끝나고 100번째 요청은 100초대기 후 2분걸려서 3분 40초에 걸리게 되지 않을까 생각했는데 이렇게 예상하는게 맞는지 질문 드립니다~!

멀티스레드 환경이고 스레드가 100개인 상태에서 100개의 요청이 들어온다면 말씀하신것과 비슷하게 소요될것이라고 예상됩니다.

다만, 다른 로직이 추가된다면 소요 시간은 변경될 수 있을듯합니다.

감사합니다.

Hình ảnh hồ sơ của audition365695
audition365695

câu hỏi đã được viết

Đặt câu hỏi