0
나는 테스트 프로그램을 썼다. 즉, 다음을 수행합니다 이 다중 스레드 프로그램이 의도 한대로 작동하지 않는 이유는 무엇입니까?
- 는 어떤 임의의 쓸모 calcuations를 실행합니다 (그러나 충분히 길게) 단일 스레드 및 인쇄 실행에 시간을
이제 두 경우 모두 실행 시간이 동일합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
여기 소스 인 : 여러 스레드를 실행하는 동안 정말 평행하지 않은 루비와 파이썬 같은
def time
start = Time.now
yield
p Time.now - start
end
range_limit = 9999
i_exponent = 9999
time do
array = (1 .. range_limit).map { |i | i**i_exponent }
p (array.inject(:+)/2)[0]
end
time do
first_thread = Thread.new do
arr = (1..range_limit/6).map { |i| i**i_exponent }
arr.inject(:+)
end
second_thread = Thread.new do
arr = (range_limit/6..range_limit*2/6).map { |i| i**i_exponent }
arr.inject(:+)
end
third_thread = Thread.new do
arr = (range_limit*2/6..range_limit*3/6).map { |i| i**i_exponent }
arr.inject(:+)
end
fourth_thread = Thread.new do
arr = (range_limit*3/6..range_limit*4/6).map { |i| i**i_exponent }
arr.inject(:+)
end
fifth_thread = Thread.new do
arr = (range_limit*4/6..range_limit*5/6).map { |i| i**i_exponent }
arr.inject(:+)
end
sixth_thread = Thread.new do
arr = (range_limit*5/6..range_limit).map { |i| i**i_exponent }
arr.inject(:+)
end
first_thread.join
second_thread.join
third_thread.join
fourth_thread.join
fifth_thread.join
sixth_thread.join
result = first_thread.value + second_thread.value + third_thread.value + fifth_thread.value + sixth_thread.value
p (result/2)[0]
end
와우. 그래서 나는 무엇을해야합니까? – konnigun
@Chelios 여러 프로세스를 사용하십시오. 나는 이제 좀 더 쉽게하기 위해 몇 가지 모듈을 제공하는 SO 응답에 대한 링크로 답변을 업데이트했습니다. – user4815162342
다른 Ruby 구현을 사용하는 것이 가능하면 문제를 해결할 수 있습니다. JRuby 나 Rubinius 모두 GIL이 없으며 코드를 병렬로 실행할 수 있습니다. –