Re: Thread.sleep() 사용 문의

350 views
Skip to first unread message

kris jeong

unread,
Mar 8, 2013, 3:21:50 AM3/8/13
to nett...@googlegroups.com
현상으로 보아선 IO처리 스레드에 Sleep이 걸리는것 같네요.

테스트를 해보지 않아서 결과는 장담 못하지만 이런 방법은 어떨까요?

BlockingQueue를 하나 선언 하시고 초기화 하신 다음 로직에서 그놈을 poll 메서드로 호출 하시면

block이 걸립니다. 내부 IO처리 Thread가 아니라 로직에서 Block이 걸리니 Worker Thread가

멈추는 효과를 볼수 있을것 같네요.

private static final BlockingQueue<Object> sleepQueue = new ArrayBlockingQueue<Object>();;

// 쉬어야 하는 경우. 5초간 Blocking됨.
sleepQueue.poll(5, TimeUnit.SECONDS);

한번 해보세요.

반드시 Worker Thread쪽에서 호출 하셔야 합니다.


2013년 3월 8일 오후 4:04, 검은안개 <skh...@gcen.co.kr>님의 말:

안녕하세요,

netty-3.6.2.Final을 사용하여 통신 서버를 개발하고 있는 중 입니다.

Thread.sleep를 사용하는데 문제가 있어 질문 드립니다.


기존에 글을 읽어보니 messageReceived 메소드 내에서 Thread.sleep() 를 사용하면 I/O전체가 멈추기에 사용하지 말기를 권하시더군요.


제가 하려는건 이렇습니다..

messageReceived 메소드에서 프로세스를 수행해서 boolean으로 결과를 받아
true면 바로 write(), false면 5초 기다렸다가 write()를 하려 합니다.

Thread.sleep(5000)으로 테스트 해봤는데, 테스트 클라이언트에서 쓰레드를 100개쯤 돌려서

쓰레드별로 시간을 측정을 해보니, 정확히 16개마다 5초씩 늘어나고 있습니다.

1~16은 5초
17~32는 10초
33~48는 15초... 이런 식입니다.

제가 기대(?)한 결과는 1~100개의 쓰레드가 모두 5초씩 나오는거였습니다만,,,

ScheduledExecutorService.schedule 를 사용해봤지만 
Thread.sleep()랑 결과가 똑같이 나오는게 뭔가 다른 방법이 필요할거 같습니다.


혹시 비슷한 경험이나 해결방법을 알고계시다면, 조언 부탁드립니다.


--
Google 그룹스 'Netty Korean User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 netty-ko+u...@googlegroups.com에 이메일을 보내세요.
더 많은 옵션을 보려면 https://groups.google.com/groups/opt_out을(를) 방문하세요.
 
 

Reply all
Reply to author
Forward
0 new messages