고수님들에 조언 부탁드립니다.
글쓴이: hj6269 / 작성시간: 금, 2008/07/04 - 10:14오후
제가 프로그램을 하나짜는데요
패킷을 캡쳐하고 캡쳐된 패킷을 디비에 저장하는 프로그램입니다.
문제는 패킷을 캡쳐하는 스레드를 생성하고 디비에 저장하는 스레드를 생성한 다음
디비에 저장하기전 매개체가 배열로된 원형 버퍼를 사용하는데요
두 스레드간에 작업 속도의 차이로 인한 문제 입니다.
패킷을 캡쳐하는 스레드의 버퍼에 패킷을 저장하는 속도가 디비 스레드가 버퍼에서 데이터를 읽어 DB에 저장하는
속도보다 빨라 둘간의 간격이 시간이 지날수록 벌어지면서 원형 큐이기 때문에 결국 패킷 캡쳐하는 스레드가 한바퀴 돌아
다시 디비 스레드가 저장된 데이터를 읽기전에 기존 데이터를 새로운 패킷 데이터로 덮어 써버리면서 문제가 생깁니다.
패킷을 캡쳐하는 속도를 유지하기위해 스레드를 사용한것인데 디비 스레드와 패킷 스레드의 작업 속도를 고려하지 못했네요
이 프로그램을 장기적으로 돌릴 생각이라 이문제가 해결이 되야 하는데 혹시 이런 코딩을 한 경험이 있으신 고수님들의
조언을 부탁 드립니다.
[ 패킷 스레드 ] -쓰기-> | 원형 버퍼[1000] | -읽기-> [ DB 스레드 ]
위와 같이 동작합니다. 조언을 부탁드려요 ㅜㅜ
Forums:
1 : 1라면, 좀 복잡할
1 : 1라면, 좀 복잡할 순 있겠지만, 저장한 packet에 대해서 처리했는지 확인하면서, 처리하다가, 만약 원형큐의 마지막이라면, 원형큐의 buffer를 늘려주는 방식으로 하면 가능은 할 거 같습니다. 하지만, 이렇게 하면, 원형큐를 동적화시키면서 발생하는 overhead가 좀 클거 같네요. 대신, 1 : M 방식으로 처리를 하면, lock은 좀더 복잡할 순 있겠지만, 그래도 첫번째 방식보다는 해결이 수월하지 않을까 싶습니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
댓글 달기