EventMachine은 하나의 메인 스레드에서이 작업의 개별 스레드와 모든 콜백에서 모든 작업을 실행합니다. 데이터의 부분간에 데이터 처리의 경쟁력을 떨어 뜨릴 필요가있을 때 매우 유용합니다. 네트워크에서 데이터를 수신하고 대기열에 결과를 처리 할 수 있습니다. 그러나 나는 더 나아갈 필요가있다. 내 사이트에 많은 사용자가 있고 각각에 대해 별도의 대기열을 만들고 싶습니다. 따라서 각 사용자마다 단일 EM처럼 작동해야합니다. 그러나 나는 할 수 없다. EventMachine은 싱글 톤입니다.Ruby : EventMachine 및 별도의 콜백 대기열
Thread.new do
EM.run
end
def request_from_user
operation = Proc.new {
# network request
}
callback = Proc.new {
# some heavy data processing
2*2
}
5.times do
EM.defer(operation, callback)
end
end
3.times do
request_from_user
end
그래서 우리는 mainthread 대기열에서 콜백 혼잡이 있습니다. 일부 데이터는 대기열 끝에 처리되고 일부 데이터는 중간에 처리됩니다. 부하가 크면 대기열이 커지고 일부 사용자는 매우 큰 지연으로 결과를 수신합니다. 어쨌든 단일 스레드 콜백에서 request_from_user를 실행하면 하나의 EM 주 스레드에서 실행됩니다.
그럼 어떻게해야합니까? 그것은 각 사용자에 대해 별도의 콜백 대기열을 만들고 concurent 또는 그것을 실행할 수 있습니까? EventMachine 없이도 사용할 수 있습니다. 셀룰로이드 ...
EM이 "단일"메인 라인 스레드에서 모든 작업을 실행한다고 생각하니 그렇지 않습니까? – rogerdpack
EM.defer를 사용하면 작업이 EMs 스레드 풀의 스레드에서 실행되고 콜백이 주 스레드에서 실행됩니다. – dj2