`
kenlistian
  • 浏览: 6443 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

ruby 中线程问题探讨

阅读更多
t = Thread.new do
  i=0
  while true
       #sleep 1

       puts "printing a line, #{i.to_s}"
       i+=1
       #sleep 1
     end
  end

gets
t.exit
puts "exiting"


这个例子来自http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229801
就是在windows下,加上sleep就不会在dow界面上打印 printing a line,即使把sleep去掉,
好像在只能写到80来行就停止了。
  其中有人解答说是ruby采用one-click install的将使之io和线程不能工作。而在linux下
和macos下可以,是这样的吗?
  希望资深者解释一二。
分享到:
评论
3 楼 yawl 2008-03-31  
很少见到人用ruby的thread.

ruby不是用的os thread,而是自己管理的'green' thread.这种办法在写库函数的非常麻烦,所有可能阻塞的地方都要自己做检查,看是否需要context switch。如果哪处遗漏了就是deadlock.



2 楼 blogbin 2008-03-31  
又试了另外的例子,即在gets前加入sleep 10
sleep 10 
gets 
t.exit 
puts "exiting"
t.join
可以解决该问题。
我估计gets直接把输出io给block掉了,如果t线程加上sleep 1,造成t线程来不及输出printing a line, #{i.to_s}。

线程main的gets和线程puts都在争夺输出io...
1 楼 blogbin 2008-03-31  
不是sleep的问题
gets或者t.exit造成的问题

建议改成
gets 
#t.exit 
puts "exiting"
t.join
看看
即,注释t.exit,并补充t.join

相关推荐

    Working with Ruby Threads

    ### Ruby线程开发技术详解 #### 引言 在计算机科学领域中,多线程编程是一种常见的技术,它允许多个任务同时运行在一个程序中。《Working with Ruby Threads》这本书深入探讨了Ruby语言中的线程机制,对于希望利用...

    Working with Ruby Threads(完整版)

    "Working With Ruby Threads"这本书全面深入地探讨了这个主题,提供了关于Ruby线程的详尽知识。 在Ruby中,线程允许程序同时执行多个任务,从而提高了效率。Ruby的线程模型基于两种主要实现:MRI(Matz's Ruby ...

    Ruby-ConcurrentRuby现代并发工具

    本文将深入探讨`Concurrent Ruby`中的核心概念和组件,包括Agents、Futures、Promises和Thread Pools,以及Supervisors,帮助你更好地理解和运用这些工具。 一、Agents 在`Concurrent Ruby`中,Agent是一种线程安全...

    ruby trap 初学者使用

    下面,我们将深入探讨一些可能涵盖在书中的Ruby编程知识点。 1. **变量和常量**: - Ruby有四种变量类型:局部变量(以小写字母或下划线开头),实例变量(以`@`开头),类变量(以`@@`开头)和全局变量(以`$`...

    ruby 经典教程从新手到专家

    - **面向对象编程(OOP)**:详细解释Ruby中的类、对象、继承、封装、多态等OOP核心概念。 - **程序结构**:探讨模块、混合和命名空间,如何组织大型Ruby项目。 #### 第二部分:进阶技巧 - **元编程**:讲解Ruby的元...

    Ruby 编程语言的书籍

    1. **Ruby内部机制揭秘**:每章末尾都包含“Digging Deeper”部分,揭示Ruby运行时的各种细节,如作用域解析、多线程实现等,帮助读者更好地理解语言本身的设计理念。 2. **陷阱与注意事项**:通过实际案例分析常见...

    Ruby语言中文教程

    - Ruby 1.9以后版本引入了Green Thread,提供轻量级线程,但并非真正的并发,因为Ruby解释器在MRI实现中使用全局解释器锁(GIL)。 - Fiber:用于实现协程的结构,允许用户控制线程的切换。 学习Ruby语言,不仅...

    ruby and it's tp

    结合标签"ruby",我们可以进一步探讨Ruby中的并发编程概念,如 Fiber 和 Concurrent Ruby 库。Fiber是轻量级线程,它允许你在单一线程内实现协程,提高代码的可读性和性能。而Concurrent Ruby库提供了多种并发模型,...

    ruby-2.6.3源码压缩包

    4. **改进的并发模型**:Ruby 2.6加强了线程和并发处理,如更好的线程局部变量支持,以及线程池的优化,提升了多线程环境下的程序性能。 5. **新的垃圾回收(Garbage Collection, GC)算法**:引入了Shenandoah垃圾...

    ruby2.6.1.zip

    4. **安全的数组和哈希迭代**:为了防止某些类型的安全问题,Ruby 2.6.1提供了安全的数组和哈希迭代器,它们可以确保在迭代过程中不会因修改容器而导致未定义的行为。 5. **Symbol到Proc转换的改进**:在Ruby 2.6.1...

    Ruby - Ruby for Rails

    - **高级特性**:讨论 Ruby 中的一些高级特性,如元编程和多线程,并展示如何在 Rails 中利用这些特性。 - **性能优化**:分享一些关于如何提高 Ruby 和 Rails 应用程序性能的方法。 ### 二、Ruby 建筑模块 #### ...

    ruby实战书、代码书.rar

    4. **并发编程**:Ruby支持线程和进程,书中可能会讨论如何在多线程环境下编写安全的代码。 5. **Web开发**:Ruby在Web开发领域有著名的Rails框架,书中可能涉及Web开发的基础知识,如HTTP协议、路由、模板和数据库...

    Ruby-Async是基于nio4r和定时器的Ruby的可组合的异步IO框架

    在Ruby世界中,异步编程可以帮助开发者编写出并发性能更好的应用,尤其在处理大量I/O密集型任务时,如网络通信、文件读写等。下面我们将深入探讨这个框架的核心概念、工作原理以及如何使用它。 一、异步编程与nio4r...

    ruby-2.5.8.tar.gz

    在Ruby-2.5.8版本中,我们可以探讨以下几个关键知识点: 1. **版本号的意义**:Ruby的版本号通常由主版本号、次版本号和修订号组成,如2.5.8。这里,2代表主版本,5代表次版本,8是修订号。主版本号变化通常意味着...

    Ruby编程,Ruby编程,

    - **核心库和工具**:详细介绍了Ruby标准库中的一些重要模块,如数组、哈希表等,并探讨了常用的Ruby工具和环境配置方法。 - **高级主题**:包括元编程、线程、网络编程等内容,适合想要进一步深入了解Ruby的...

Global site tag (gtag.js) - Google Analytics