Apr 30, 2021, TIL (Today I Learned)

Inwoo Hwang·2021년 8월 26일
0
post-thumbnail

학습내용


제 첫 아이디어

Screen Shot 2021-04-30 at 3.07.42 PM

Fezz 아이디어

Screen Shot 2021-04-30 at 3.15.15 PM

아이디어 퓨전!!!!!

은행창구

퓨전실패

for문 속에서 dependency를 주는 방법은 지양해야할 것 같다는 생각이 들었습니다. 잘못하면 무한 loop에 빠질 수도...

다시한 번...

fusion

은행창구2

operation의 우선순위에 맞게 스케줄링을 하다하다....포기했습니다.

장렬히 싸운 흔적을 공유합니다...

private func scheduleService() {
  while !vvipQueue.isEmpty || !vipQueue.isEmpty || !normalQueue.isEmpty {
    if vvipQueue.isEmpty == false {
      if bankWindow1.operationCount == 0 {
        bankWindow1.addOperation(vvipQueue.removeFirst())
        continue
      } else if bankWindow2.operationCount == 0 {
        bankWindow2.addOperation(vvipQueue.removeFirst())
        continue
      } else if bankWindow3.operationCount == 0 {
        bankWindow3.addOperation(vvipQueue.removeFirst())
        continue
      } else {
        bankWindow1.addOperation(vvipQueue.removeFirst())
        continue
      }
    } else if vipQueue.isEmpty == false {
      if bankWindow1.operationCount == 0 {
        bankWindow1.addOperation(vipQueue.removeFirst())
        continue
      } else if bankWindow2.operationCount == 0 {
        bankWindow2.addOperation(vipQueue.removeFirst())
        continue
      } else if bankWindow3.operationCount == 0 {
        bankWindow3.addOperation(vipQueue.removeFirst())
        continue
      } else {
        bankWindow1.addOperation(vipQueue.removeFirst())
        continue
      }
    } else {
      if bankWindow1.operationCount == 0 {
        bankWindow1.addOperation(normalQueue.removeFirst())
        continue
      } else if bankWindow2.operationCount == 0 {
        bankWindow2.addOperation(normalQueue.removeFirst())
        continue
      } else if bankWindow3.operationCount == 0 {
        bankWindow3.addOperation(normalQueue.removeFirst())
        continue
      } else {
        bankWindow1.addOperation(normalQueue.removeFirst())
        continue
      }
    }
  }
}

3개의 queue에 operation을 우선순위에 맞게 넣은 뒤 @Fezz의 노력이 담긴 뒤 위와 같은 스케줄링을 통해서 3개의 operation queue에 넣어주려했는데 잘 작동이 안되었습니다. 그래서 일단은 operationQueue 하나에 집어넣어서 thread가 알아서 배분하도록 설정해서 해결할 수 있었어요. 하지만 최선의 해결책이 아닌거 같아서....조금 찝찝한 상황입니다.

profile
james, the enthusiastic developer

0개의 댓글