与ruby 1.9.3相比,ruby2.0中的线程逻辑是否发生了变化?

雅鲁

我尝试了《 Well Grounded Rubyist》一书中的一个示例,该书在我的Ruby 2.0中使用了Ruby 1.9,并获得了不同的结果。取而代之的是:

启动线程

外螺纹

我只得到第二行:

外螺纹

这是代码示例:

Thread.new do 
  puts "Starting a thread"
  sleep 2
  puts "At the end of the thread"
end

puts "Outside the thread"

为什么这样?

您可以在此处看到不同的结果:(在线ruby解释器-第一个是ruby 1.9,第二个是ruby 2.0)

http://www.compileonline.com/execute_ruby_online.php

http://ideone.com/XkGn2a

丹尼斯·德·伯纳迪

如果将其作为可执行文件而不是IRB运行,则还需要使子线程在某些时候加入父线程。否则,当父母做完后,孩子将被杀死。

#!/usr/bin/env ruby

t = Thread.new do 
  puts "Starting a thread"
  sleep 2
  puts "At the end of the thread"
  nil
end

puts "Outside the thread"

t.join

我无法在笔记本电脑上重现不同的输出:

~/wk $ /usr/bin/ruby --version
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0]
~/wk $ /usr/local/bin/ruby --version
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin11.4.2]

t.join

~/wk $ /usr/bin/ruby test.rb 
Starting a thread
Outside the thread
At the end of the thread
~/wk $ /usr/local/bin/ruby test.rb
Starting a thread
Outside the thread
At the end of the thread

没有t.join

~/wk $ /usr/bin/ruby test.rb 
Starting a thread
Outside the thread
~/wk $ /usr/local/bin/ruby test.rb
Starting a thread
Outside the thread

我确实在服务器上重现了它们:

~ $ ruby --version
ruby 1.9.3p448 (2013-06-27 revision 41675) [amd64-freebsd9]

t.join

~ $ ruby test.rb 
Outside the thread
Starting a thread
At the end of the thread

没有t.join

~ $ ruby test.rb 
Outside the thread

sleep 1但是,如果我在脚本的末尾添加内容,则会得到以下内容:

~ $ ruby test.rb 
Outside the thread
Starting a thread

因此,methinks可能没有任何外观上的区别,可能只是在外观上的实现细节之外。您只需要加入父母。

另外,当然,您不应该期望“线程外”和“启动线程”有任何特定顺序。两者并行运行,并且不能保证一个发生在另一个之前。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Ruby2中克隆哈希

来自分类Dev

使用MRI Ruby2或JRuby 1的新rails项目?

来自分类Dev

与C ++ 14相比,C ++ 1z中的第12.3.2节[class.conv.fct] / 1发生了重大变化。是否有意义?

来自分类Dev

与多进程fork服务器中的Ruby 2相比,'require'优先于'autoload'吗?

来自分类Dev

与多进程fork服务器中的Ruby 2相比,'require'优先于'autoload'吗?

来自分类Dev

从HTML [REGEX,RUBY]中的<!-[if gte mso 9]>删除为<![endif]->

来自分类Dev

为什么[1,1,2] | [] == [1,2]在Ruby中是否为true?

来自分类Dev

在Ruby中如何执行Integer('1')`?

来自分类Dev

Ruby中[1,2,3] .to_enum和[1,2,3] .enum_for之间的差异

来自分类Dev

Ruby on Rails 5中build()发生了什么

来自分类Dev

2个模型,Ruby on Rails中的1个“数组”

来自分类Dev

Ruby on Rails中的1:1关联有问题

来自分类Dev

为什么3 [0]和3 [1]在Ruby中产生1?

来自分类Dev

题如何使用cloud9从Ruby中的Ruby导入SQL文件到MySQL数据库?

来自分类Dev

在Ruby中实现线程

来自分类Dev

Ruby 中的线程循环

来自分类Dev

ruby regex允许AZ,az,0-9,句点,连字符和空格

来自分类Dev

ruby regex允许AZ,az,0-9,句点,连字符和空格

来自分类Dev

在ruby中,如何检查以9开头的社会保险号?

来自分类Dev

jRuby 1.7和ruby 9中的DataTime.parse.utc.to_s输出

来自分类Dev

Cloud9 中的 Ruby on Rails 应用程序在 Heroku 上“不存在”

来自分类Dev

Javascript正则表达式/ ^(19 | 20)([0-9] {2})-([0-9] {2} | 0 [0-9] {1})-([0-9] {2} | 0 [0-9] {1})$ / g未找到日期作为输入值

来自分类Dev

C中{0,1,2,3,4,5,6,7,8,9}外的条件

来自分类Dev

Ruby-错误的参数数(1/2)

来自分类Dev

错误数量的参数(给定 0,预期为 1) - Ruby

来自分类Dev

是什么导致与8.0.2相比,8.1中的自转发生了巨大变化?

来自分类Dev

自从教程以来,d3中的嵌套选择是否发生了变化?

来自分类Dev

Tensorflow - tf.nn.conv2D() 中的权重值是否发生了变化?

来自分类Dev

Ruby on Rails-无法显示数据库中的关联项目(#<Comment:0x44f9ec8>)

Related 相关文章

  1. 1

    在Ruby2中克隆哈希

  2. 2

    使用MRI Ruby2或JRuby 1的新rails项目?

  3. 3

    与C ++ 14相比,C ++ 1z中的第12.3.2节[class.conv.fct] / 1发生了重大变化。是否有意义?

  4. 4

    与多进程fork服务器中的Ruby 2相比,'require'优先于'autoload'吗?

  5. 5

    与多进程fork服务器中的Ruby 2相比,'require'优先于'autoload'吗?

  6. 6

    从HTML [REGEX,RUBY]中的<!-[if gte mso 9]>删除为<![endif]->

  7. 7

    为什么[1,1,2] | [] == [1,2]在Ruby中是否为true?

  8. 8

    在Ruby中如何执行Integer('1')`?

  9. 9

    Ruby中[1,2,3] .to_enum和[1,2,3] .enum_for之间的差异

  10. 10

    Ruby on Rails 5中build()发生了什么

  11. 11

    2个模型,Ruby on Rails中的1个“数组”

  12. 12

    Ruby on Rails中的1:1关联有问题

  13. 13

    为什么3 [0]和3 [1]在Ruby中产生1?

  14. 14

    题如何使用cloud9从Ruby中的Ruby导入SQL文件到MySQL数据库?

  15. 15

    在Ruby中实现线程

  16. 16

    Ruby 中的线程循环

  17. 17

    ruby regex允许AZ,az,0-9,句点,连字符和空格

  18. 18

    ruby regex允许AZ,az,0-9,句点,连字符和空格

  19. 19

    在ruby中,如何检查以9开头的社会保险号?

  20. 20

    jRuby 1.7和ruby 9中的DataTime.parse.utc.to_s输出

  21. 21

    Cloud9 中的 Ruby on Rails 应用程序在 Heroku 上“不存在”

  22. 22

    Javascript正则表达式/ ^(19 | 20)([0-9] {2})-([0-9] {2} | 0 [0-9] {1})-([0-9] {2} | 0 [0-9] {1})$ / g未找到日期作为输入值

  23. 23

    C中{0,1,2,3,4,5,6,7,8,9}外的条件

  24. 24

    Ruby-错误的参数数(1/2)

  25. 25

    错误数量的参数(给定 0,预期为 1) - Ruby

  26. 26

    是什么导致与8.0.2相比,8.1中的自转发生了巨大变化?

  27. 27

    自从教程以来,d3中的嵌套选择是否发生了变化?

  28. 28

    Tensorflow - tf.nn.conv2D() 中的权重值是否发生了变化?

  29. 29

    Ruby on Rails-无法显示数据库中的关联项目(#<Comment:0x44f9ec8>)

热门标签

归档