Work Queue

욱2·2023년 7월 8일

처음 생각했던 work queue.


의문점 :

그럼 만약, 작업1 이 10s 작업2 가 10ms가 걸린다면,

Asynchronous nature of the work queue 로 인해
작업2가 먼저 끝나지 않을까?

Queue 자체는 순서대로 들어오지만 FIFO Queue가 아닌 Work Queue 라서 나가는 순서는 먼저 끝나는 작업2가 아닐까?


해결:

  • 아무 설정 없이 work queue를 사용 시 , 먼저 끝나는 작업2가 나올 것이다.
  • 그래서 work queue를 기반으로 하고 있는 redis bull은 job, job.finished() 라는 기능은 주고 순서를 정한다고 합니다.


의문점2: 그럼 설정없는 work queue는 event loop이랑 비슷한건가?

해결: 조사중...


의문점3:
Okay 그러면, 순서가 정해졌는데 왜 여러 요청이 올 경우, 왜 값이 다르게 나오는 것일까?

8개를 update 하기 전에 조회가 빠르게 실행되기 때문에 작업 2 , 3은 10개를 반환하게 된다. job.finished는 나가는 순서를 보장해주는 것. async 워커들에게 process 순서까지 명령하는 것이 아니다.


해결:

동시성 제어를 검색해보면 LOCK을 찾을 수 있다.
Spin Lock

  • continuously polls or "spins" in a loop until the lock becomes available. 오픈 될때까지 겁나 돌려 계속 확인해.

Redisson Lock - 다쓰면 돌려놓기? -아직 공부중....

다른 방식이지만 목적은 같습니다. 바로 하나의 DATA를 사용한다면, 요청을 한꺼번에 다 실행하는게 아니라 DATA를 가지고 놀수 있게 키를 발급해서 순서를 정합니다. 내가 Data를 갖고 놀 때 다른 요청들은 키를 기다리게 하는 방식으로 동시성 제어를 만들 수 있습니다!!!


profile
성장하는 날 위한 기록

0개의 댓글