: 메시지를 수신 서버 역할 위의 인간의 언어 스크립트에서루비 멀티 스레딩 - 중지하고 특정 스레드를 다시 시작
thread_hash = Hash.new()
loop do
Thread.start(call.function) do |execute|
operation = execute.extract(some_value_from_incoming_message)
if thread_hash.has_key? operation
thread_hash[operation].run
elsif !thread_hash.has_key?
thread_hash[operation] = Thread.current
do_something_else_1
Thread.stop
do_something_else_2
Thread.stop
do_something_else_3
thread_hash.delete(operation)
else
exit
end
end
end
, 들어오는 메시지에서 일부 매개 변수를 추출합니다. 해당 매개 변수가 이미 thread_hash에 있으면 일시 중단 된 스레드를 다시 시작해야합니다.
매개 변수가 thread_hash에 없으면 스레드 ID와 함께 매개 변수가 thread_hash에 저장되고 일부 함수가 실행되고 현재 스레드는 새 루프에서 다시 시작될 때까지 일시 중단되며 do_something_else_3 함수가 실행되고 작업 서비스가 완료 될 때까지 일시 중단됩니다 현재 스레드에서 해시에서 제거됩니다.
thr.run
가인가 :
는 스레드 ID 또는 새 스레드가
thr = Thread.start
처럼 시작할 때 이름을 부여해야하며, 같은이 이름 만 다시 시작할 수 있습니다에 따라 루비에 재개 된 스레드 수 솔루션은 위에서 설명한 현실? 새로운 스레드에서 이전 스레드 재개로 인해 누출/교착 상태가 발생하거나 중복 스레드가 자동으로 루비에서 처리됩니다.
좋은 점, 힌트에 감사드립니다! –