2017-12-08 5 views
0

diff 스레드에서 verx의 무한 루프를 실행하고 싶습니다.while() 루프를 사용하여 vertx에서 무한 루프를 실행하는 방법

vertx.executeBlocking(future -> { 
while(true){ 
} 
    //some logic (e.g waiting on blocking-code) 
} 

것조차 스레드를 executeBlocking에 대한 vertx에 당신이 증가 할 수 글로벌 시간 제한을 가지고있다 : 이 같은이어야한다. 하지만이 실행 시간 초과 경고가 영원히 계속 실행되도록 설정하고 싶습니다.

  1. vertx에서 제 목적을 달성 했습니까?
  2. 1이 참인 경우. 이 특정 차단 실행을 시간 초과 경고에서 제외하는 방법
+0

VertX는 이미 무한 루프를 실행합니다. 작업자 verticle으로 시작하는 Verticle은 EventBus에서 이벤트를 수신하고 그에 따라 작동합니다. 나는 그곳의 건축물을 고집 할 것을 제안합니다. 예제가 필요하면 알려주세요. –

답변

0

그렇지 않습니다.

처리를 트리거하는 조건이있는 경우 무한 루프 내부가 아닌 해당 지점에서 처리가 이루어집니다.

예 :

while ((event = eventQueue.take()) != null) { 
    final Vertx target = event.target; 
    executor.submit(() -> { 
    doProcessing(target); 
    }); 
} 

이 주된 이유가 차단 상태에서 심지어 스레드가 자원을 소비 할 것입니다. 이벤트를 기다리는 스레드가 1000 개일 경우 시스템은 스레드 스케줄링에 많은 시간을 낭비합니다. 이것이 위의 코드와 비슷한 방식으로 모든 최신 IO 처리가 비 블로킹 (non-blocking)으로 발생하는 이유입니다.

+0

eventQueue.take() - X 초 후에 응답 (또는 빈 결과)으로 돌아온 다음 반복하고 다시 기다려야하는 방식으로 작동하고 있습니다 (다음 X 초 동안). .. 당신의 발췌 문장에서 첫 번째 반복 메시지를 가져 오는 동안 (만약 그렇다면), 종료하고 나면 다시 메시지를 소비 할 수 없을 것입니다. – rayman

+0

JavaDoc :'이 큐의 머리를 얻어서 제거합니다. 사용할 수 있습니다. Take 무한대 또는 중단 때까지 기다릴 것입니다. – TwoThe