2007년 6월 26일 화요일

Thread lock i/o thread processing method

Timer lock I/O thread processing method

이렇게 하고 있는 엔진이 있는지 모르겠넹 ㅎㅎ
---------------------------
IO Thread를 활용하는 다른 법이 생겼다.
--
IO Thread는 IO queue에서 read/write queuing operation을 한다.IO worker thread가 동시에 접근 할 수 있어서...message가 오는대로 순서는 유지되지만그 것을 바로 IO thread에서 처리한다면multithread 프로그래밍을 해야하는 어려운 프로그래밍을 해야한다.
--
그러므로, logic을 thread independent하도록 만드는 것이 매우 중요하다.또한 disconnect되면 unlink되는 것들을 잘 처리해서, logic을 처리하고 있는 동안에access violation이 일어나면 안된다.
--
SNetEx1은 다음과 같이 개선해야 한다.( SNetEX1은 기본적인 Logic을 처리하는 모듈이다. )
1. logic을 SNetEx1SessionLogic으로 분리시켜야 한다.2. IO thread에서 command worker로 dispatch 하는 부분을 없애고,timer lock IO thread processing 방식을 사용한다.
--
timer lock IO thread processing 방식이란!
IO thread에서 메시지를 받으면 즉시 user circular queue(thread safe한) 에 insert 한다.그리고 바로 return 한다.timer thread가 10ms 또는 20ms , 30ms 등의 처리 timer를 만든다.모든 user의 circular queue를 비우면서 처리할 수 있는 충분한 시간이 확보되면 좋다.그 timer는 IO thread에게 timer message object 를 dispatch한다.IO Thread는 그 object를 받아서 처리한다.처리하는 동안에 다른 timer object가 처리되면 안되므로, 주의해야 한다.이것이 매우 중요한 사안이다.
timer period가 10ms 인데,timer processing time이 10ms가 넘으면 다음 timer가 먼저 와서 thread safe하지 않게 되는 것이다.그리고 periodic operation이 필요한 경우에는 timer를 따로 만들지 말고,counter를 사용하여 처리하도록 한다. 기본 timer period의 배수의 periodic operation이면 된다.thread safe를 보장하는 방법은,첫째, timer processing time < timer period둘쨰, timer processing 중 time 이 timer period보다 커지면 다음으로 suspend하는 방법세째, timer processing 중 time 이 timer period보다 커지면 다음 processing timer를 ignore하는 방법이 있다.
timer object를 받았을때 timer object를 처리하고 있는지 확인하는 lock만 걸어 놓는다면,thread safe할 수 있는 것이다.

댓글 없음:

댓글 쓰기