루비 새 스레드 만들기

루비 새 스레드 만들기

2022-06-04 last update

6 minutes reading Ruby
루틴은 프로그램의 단일 실행 단원입니다.일반 프로그램은 단일 루틴입니다. 그 중에서 프로그램의 명령은 끝날 때까지 연속적으로 실행됩니다.
다른 한편, 다중 스레드는 프로그램이 여러 개의 스레드를 만들 수 있도록 하는데, 그 중에서 프로그램의 명령은 동시에 실행할 수 있다.CPU와 메모리와 같은 시스템 리소스를 잘 활용할 수 있습니다.
루비에서, 우리는threads류의 도움으로 라인을 사용합니다.루비의 루틴은 대량의 자원을 차지하지 않기 때문에 프로그램에서 효과적으로 병발성을 사용할 수 있다.
루트는 Ruby 1.9 및 다음 버전의 Ruby 해석기에서 구현됩니다.버전 1.9 및 더 높은 버전부터 라인은 운영체제에서 실현될 것이다.
이 안내서를 사용하면 루비 프로그래밍에서 루틴을 실현하는 방법을 배울 수 있습니다.
참고: Matz 해석기(MRI)에는 여러 스레드가 동시에 실행되는 것을 막는 전역 해석기 잠금이 있습니다.그러나 이것은 JRuby와 Rubinius 해석기에는 적용되지 않습니다.

스레드 생성


앞에서 말한 바와 같이, 우리는 Thread 클래스 처리 라인을 사용할 수 있다.새 스레드를 만들려면 이 스레드를 호출하십시오.새로운 방법.
구문은 다음과 같습니다.
Thread.new { # thread block goes here}
한 쌍의 괄호 안에 실행할 코드가 포함되어 있는지 확인하십시오.
다음은 예입니다.
Thread.new { puts "Hello, world!"}
우리는 간단한 프로그램으로 원의 면적을 계산합시다.
def area
pi = 3.14159
rad = 7.3
return (pi * rad * rad)
end
Thread.new {
area()
puts "Running inside the thread!"
}
puts "Execution complete!"
위의 예시를 실행하면 우리가 원의 면적을 얻지 못했다는 것을 알 수 있습니다.이것은 루비가 생성된 스레드가 실행될 때까지 기다리지 않기 때문입니다.라인이 완성되는 것을 확보하기 위해서, 우리는join 방법을 호출해야 한다.
join 방법은 주 라인의 실행을 멈추고 Join 방법에서 지정한 라인이 완성되기를 기다립니다.
다음은 위에서join 방법을 실현한 예시 코드입니다.
def area
pi = 3.14159
rad = 7.3
return (pi * rad * rad)
end
thread = Thread.new {
puts "The area of the circle is #{area()} cm2"
puts "Running inside the thread!"
}
thread.join
puts "Execution complete!"
이 예제에서는 다음과 같이 스레드의 출력을 얻을 수 있습니다.
The area of the circle is 167.41533109999997 cm2
Running inside the thread!
Execution complete!

종료 스레드


루비는 여러 가지 스레드를 종료하는 방법을 제공합니다.그 중 하나는 킬 방법을 사용하는 것이다.
구문은 다음과 같습니다.
Thread.kill(thread)
괄호 안에서 종료할 라인의 이름을 지정합니다.

스레드 이상


스레드에 이상이 발생하면 프로그램 실행이 멈추지 않는다는 것을 알 수 있습니다.
예:
def error_me
raise "Error!"
end
Thread.new {error_me}
puts "I still run"
위의 예시에서 우리는 라인에 전달되는 함수 내부에서 이상을 일으켰다.다음과 같은 두 가지 사항이 있습니다.
  • 스레드에 오류 메시지가 표시되지 않습니다
  • 라인 후의 코드가 여전히 실행되고 있다. 
  • 어떤 경우, 라인에 이상이 발생하면, 실행을 멈추기를 원할 수도 있습니다.우리는abort\uon\u 실행 옵션을 사용하여 이 작업을 수행할 수 있습니다.
    예:
    Thread.abort_on_exception = true
    thready = Thread.new do
    puts "I run before exception"
    raise "exception occurred!"
    end
    thready.join
    puts "Sorry, I do not run!"
    위의 예시에서 라인 내에서 실행 옵션이 발생하면 프로그램이 종료됩니다.다음은 예제 출력입니다.
    I run before exception
    #<0x000001fd13386960 threads.rb:2="" run=""> terminated with exception (report_on_exception is true):
    threads.rb:4:in `block in 
    ': exception occurred! (RuntimeError) threads.rb:4:in `block in
    ': exception occurred! (RuntimeError)

    스레드 변수


    스레드에서 생성된 변수는 Ruby 범위 규칙을 따릅니다.그것들은 그것들의 라인을 만드는 범위 내에서만 접근할 수 있다.

    스레드 상태


    status 방법으로 주어진 라인의 상태를 얻을 수 있습니다.또한 이벤트를 사용하여 라인이 실행 중인지 확인하고, 라인이 죽었는지 확인하기 위해 멈출 수 있습니다.
    status 방법에는 다음과 같은 다섯 가지 반환 값이 있습니다.
  • 실행 – 다시 실행
  • 수면-수면복귀
  • 중지 – 반환 중지
  • 예외 종료 – 0 반환
  • 정상 종료 - false로 돌아갑니다.
  • 결론


    이 안내서에서 Ruby 프로그래밍 언어를 사용하여 루틴을 처리하는 기초 지식을 토론했습니다.
    주의해야 할 것은 우리가 이 안내서에서 토론한 내용보다 더 많다는 것이다.Consider the documentation to learn more.
    읽어주셔서 감사합니다!