2011-09-05 6 views
4

나는 2 개의 함수를 취하는 함수를 가지고 있는데, 하나는 특정 이벤트를 감시하고 다른 하나는 실제로 작업을 수행하고, 각각 미래에 실행되며, 이벤트가 미래에 실패를 반환하자마자 호출자가 미래에 신호를 보낸다. 중지. 이벤트가 수신되기 전에 작업자 스레드가 완료되면 호출자 스레드는 감시자에게 신호를 보내 중지하고 발신자에게 반환합니다.너무 많은 선물

이것은 잘 작동하지만 실제 작업을 수행하는 작업자 함수는 라인 아래의 다른 이벤트를 확인해야 할 때마다 특정 이벤트를 감시해야 할 때마다 2 개의 추가 선물을 준비해야합니다. 문제는 최대 선물 거래 횟수에 제한이 있습니까? 나는 때때로 60 개의 선물로 끝나야합니까? 필요에 따라 스레드 풀이 커질 수 있습니까? 그리고 그들은 스레드 풀에서 실행되기 때문에 나는 너무 비싸지 않다고 가정하고 있습니까?

답변

4

모두는 Executor에 따라 다릅니다. Executors.newFixedThreadPool(n)을 사용하여 Executor을 만들고 n * 100 개의 작업을 제출했다고 가정하면 n 스레드 이 실행됩니다.

Clojure의 future function을 사용하는 경우 작업을 clojure.lang.Agent.soloExecutor에게 제출합니다. soloExecutor는 Executors.newCachedThreadPool(threadFactory)으로 생성되므로 스레드를 다시 사용하고 최대한 많이 실행합니다.