文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何进行Ruby线程相关知识点分析

2023-06-17 18:46

关注

这期内容当中小编将会给大家带来有关如何进行Ruby线程相关知识点分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Ruby语言一款完全面向对象的解释型脚本语言。对于这样的一款新型编程语言,其特性对于程序员的吸引力不小。

今天看了Ruby线程部分。《Programming Ruby》***版的HTML版的线程和进程部分讲得很详细。看完后感觉就好像又把操作系统的这一部分重温了一遍。尤其是Spawning New Processes那一节,如果没有学过操作系统还真不知道他说什么。

IO.popen,其中的popen,我理解应该是应该是"piped open"的意思。其中这段Ruby线程代码,

  1. pipe = IO.popen("-","w+")  

  2. if pipe  

  3. pipe.puts "Get a job!"  

  4. $stderr.puts "Child says
     '#{pipe.gets.chomp}'"  

  5. else  

  6. $stderr.puts "Dad says 
    '#{gets.chomp}'"  

  7. puts "OK"  

  8. end 

简直和Unix课里面的fork代码示例一样,父子进程共享同一段代码。《Programming Ruby》对这段代码的解释是“There's one more twist to popen. If the command you pass it is a single minus sign (``--''), popen will fork a new Ruby interpreter. Both this and the original interpreter will continue running by returning from the popen. The original process will receive an IO object back, while the child will receive nil. ”。

***次看我完全没看出来他说的是什么。看了代码后一时间也没往fork去想。结果过了十分钟后灵光一现才知道是怎么回事。同志们,看英文的东西不容易啊!

Ruby线程还挺好学。Ruby线程的功能是自已实现的。与操作系统无关。为了达到平台无关性,这种牺牲我觉得有点大。不说作者开发时得费多少力气。就是使用起来,也没有本地线程的种种优势。比如说线程饥饿。下面我写了一个练习性质的生产者--消费者例子。实话说,比Ruby中thread.rb里的例子要长太多……好处是,这里解决了屏幕输出时的窜行问题。

  1. require 'thread'  

  2. class Consumer  

  3. def initialize(queue, 
    stdout_mutex)  

  4. @queuequeue = queue  

  5. @stdout_mutexstdout_mutex 
    = stdout_mutex  

  6. end  

  7. def consume  

  8. product = @queue.pop  

  9. @stdout_mutex.synchronize {  

  10. puts "Product #{product} 
    consumed."  

  11. $stdout.flush  

  12. }  

  13. end  

  14. end  

  15. class Producer  

  16. def initialize(queue, stdout_mutex)  

  17. @queuequeue = queue  

  18. end  

  19. def produce  

  20. product = rand(10)  

  21. @queue.push(product)  

  22. @stdout_mutex.synchronize {  

  23. puts "Product #{product} produced."  

  24. $stdout.flush  

  25. }  

  26. end  

  27. end  

  28. sized_queue = SizedQueue.new(10)  

  29. stdout_mutex = Mutex.new  

  30. consumer_threads = []  

  31. times {  

  32. consumer_threads << Thread.new {  

  33. consumer = Consumer.new(sized_
    queue, stdout_mutex)  

  34. consumer.consume  

  35. }  

  36. Thread.new {  

  37. producer = Producer.new(sized_
    queue, stdout_mutex)  

  38. producer.produce  

  39. }  

  40. }  

  41. consumer_threads.each { 
    |thread| thread.join } 

上述就是小编为大家分享的如何进行Ruby线程相关知识点分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯