서버에서 관리하는 Session을 vector<>로 관리하는 것을 Lockfree Stack을 이용해 index를 관리하는 방식으로 변경했다.

 

vector로 관리하다보니 Sessions를 접근하거나 session을 넣거나 뺄때 Lock을 걸어줘야했는데, 매우 빈번한 작업이므로 Sessions를 일반 배열로 변경하고, index를 원자적으로 접근해 해결한다.

 

 

방식은 다음과 같다.

 

서버를 준비할때, 배열에 미리 Session을 할당한다.

그리고 index를 LockfreeStack에 보관한다.

 

 

클라가 서버에 접속하면 index를 하나 꺼내서 Session을 찾은 후에 초기화 해준다.

 


 

클라가 접속이 끊어지면, 

Release에서 index를 반납해서 session이 더이상 사용되지 않음을 알려준다.

+ Recent posts