부재 : 큐와 쓰레드 그리고 메시지 순서 보장
나의 첫번째 서버는 cpu 100% 치고 올라가는것도 문제지만
또 다른 문제를 갖고 있습니다.
나의 첫번째 서버는 쓰레드간 큐를 공유하는 방식으로
1개이상 입력 메시지 처리기 -- 1개 큐 -- 1개이상 비지니스 로직 처리기 -- 1개 큐 -- 1개이상 출력 메시지 처리기
와 같은 구조를 갖습니다.
이렇게 설계한 이유는 병렬성을 극대화 하기 위해서였습니다.
그런데 여기서 문제가 있습니다.
채팅을 한다고 합시다. A 가 첫번째 메시지를 보낸후 다시 두번째 메시지를 보내면
같은 채팅방에 있는 B 한테 A 의 첫번째 메시지와 두번째 메시지를 순서대로 받는것을 보장 할 수 있을까요?
답은 도착한 메시지 순서를 보장 할 수 없다 입니다.
왜냐하면 동일한 로직을 수생하는 쓰레드라도 큐에 의해 먼저 깨어난 쓰레드의 일부분만 실행되고 그 다음 로직은 언제 실행될지 모릅니다.