Ask Your Question
0

타이머 관련해서 문의드립니다.

asked 2018-12-13 10:21:49 +0900

simpler gravatar image

타이머 핸들러 1,2,3 을 등록하였다면 핸들러 실행은 쓰레드 concurrent 하게 동작하는 방식인지요? 그리고 타이머 핸들러는 이벤트 쓰레드와 별개의 쓰레드에서 동작하는지요?

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2018-12-13 10:29:39 +0900

Seunghyun gravatar image

안녕하세요. 아이펀팩토리입니다.

타이머 핸들러는 이벤트 스레드에서 실행됩니다.

타이머 핸들러들은 타이머를 등록하는 Timer::Expire*(...) 함수의 Tag 인자별로 직렬화 되어 실행됩니다. 같은 Tag 값을 사용하는 타이머 핸들러는 순차적으로 실행됩니다. 만약 앞서 실행된 핸들러 함수가 오랫동안 끝나지 않으면 뒤에 실행될 타이머 핸들러들의 실행이 그 만큼 지연되게 됩니다.

별도로 Tag 인자 값을 지정하지 않으셨다면 모두 동일한 기본 값을 사용하게 되어 순차적으로 실행되게 됩니다.

감사합니다.

edit flag offensive delete link more

Comments

tag 인자를 사용하지 않아도 순차적으로 실행된다는 말씀은 각 핸들러들이 스레드 concurrent 하게 동작하지 않는 것으로 이해를 하면 되는건지요?

simpler gravatar imagesimpler ( 2018-12-13 10:56:43 +0900 )edit

네 맞습니다. (Tag 인자를 생략하면 기본 값 Tag 를 사용하게 됩니다.)

Seunghyun gravatar imageSeunghyun ( 2018-12-13 11:20:39 +0900 )edit

혹시 주기적인 처리를 여러 쓰레드로 분산 해서 처리 하는 방법은 없는건가요?

simpler gravatar imagesimpler ( 2018-12-13 11:44:00 +0900 )edit

Tag 를 무작위 값을 주시면됩니다. 이벤트 스레드 수 만큼 병렬로 실행됩니다.

EventTag tag = RandomGenerator::GenerateUuid();

Timer::ExpireAfter(..., tag);

Seunghyun gravatar imageSeunghyun ( 2018-12-13 11:49:43 +0900 )edit

넵!~ 답변 감사합니다.!~

simpler gravatar imagesimpler ( 2018-12-13 13:35:52 +0900 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2018-12-13 10:21:49 +0900

Seen: 22 times

Last updated: Dec 13 '18