제 첫 아이디어
Fezz 아이디어
아이디어 퓨전!!!!!
for문 속에서 dependency를 주는 방법은 지양해야할 것 같다는 생각이 들었습니다. 잘못하면 무한 loop에 빠질 수도...
다시한 번...
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가 알아서 배분하도록 설정해서 해결할 수 있었어요. 하지만 최선의 해결책이 아닌거 같아서....조금 찝찝한 상황입니다.