Tag: multithreading

在这种情况下我应该使用多个线程吗?

我打开多个文件并一次处理一行。 这些文件包含分隔数据的标记,因此有时一个文件的处理可能必须等待其他文件赶上相同的标记。 我最初只使用一个线程和一个数组指示true / false,如果文件应该在当前迭代中读取,或者它应该等待其他一些人赶上。 使用线程会使这更简单吗? 更高效? Ruby有这个机制吗?

如何在ruby中运行后台线程?

我是ruby的新手,并认为重建一个我用C#编写的简单聊天程序是个好主意。 我正在使用Ruby 2.0.0 MRI(Matz的Ruby实现)。 问题是我想在服务器运行时为简单的服务器命令提供I / O. 这是从示例中获取的服务器。 我添加了使用gets()获取输入的命令方法。 我希望这个方法在后台运行作为一个线程,但该线程阻止了另一个线程。 require ‘socket’ # Get sockets from stdlib server = TCPServer.open(2000) # Socket to listen on port 2000 def commands x = 1 while x == 1 exitProgram = gets.chomp if exitProgram == “exit” || exitProgram == “Exit” x = 2 abort(“Exiting the program.”) end end […]

通过ruby进程共享变量

我正在写一个gem,我必须分叉两个进程,这两个进程启动两个webrick服务器。 我想通过基类中的类方法启动此服务器,因为应该只运行这两个服务器,而不是多个服务器。 在运行时,我想在这两个服务器上调用一些方法来更改变量。 我的问题是,我无法通过基类的类方法访问forks的实例变量。 此外,我不能在我的基类中使用线程,因为我在使用另一个非线程安全的库。 所以我必须将每个服务器分配给它自己的进程。 我用类变量尝试了它,比如@@server 。 但是当我尝试通过基类访问这些变量时,它是nil 。 我读过Ruby中不可能在forks中共享类变量,对吗? 那么,还有其他方法吗? 我想过使用单身,但我不确定这是不是最好的主意。

Rubymultithreading问题

我开始研究Ruby中的multithreading。 所以基本上,我想创建一些线程,让它们全部执行,但是在线程成功完成之前不显示任何输出。 例: #!/usr/bin/env ruby t1 = Thread.new { puts “Hello_1” sleep(5) puts “Hello_1 after 5 seconds of sleep” } t2 = Thread.new { puts “Hello_2” sleep(5) puts “Hello_2 after 5 seconds of sleep” } t1.join t2.join puts “Hello_3” sleep(5) puts “Hello_3 after 5 seconds of sleep” 第一个Hello_1 / Hello_2立即执行。 在线程成功完成之前,我不希望显示任何输出。

Ruby的ThreadGroup是什么用的?

我正在浏览Pickaxe,寻找关于Thread的文档,并遇到了ThreadGroup 。 文档描述了它的作用,但它没有解释它的用途。 是一个与线程池相关的线程组,我认为Ruby没有 ?

最好使用EM.next_tick或EM.defer与Eventmachine进行长时间运行计算?

我试图弄清楚如何在我必须自己实现的长时间运行的计算中使用延迟。 对于我的例子,我想计算前200000个斐波纳契数,但只返回一个。 我对延期的第一次尝试看起来像这样: class FibA include EM::Deferrable def calc m, n fibs = [0,1] i = 0 do_work = proc{ puts “Deferred Thread: #{Thread.current}” if i < m fibs.push(fibs[-1] + fibs[-2]) i += 1 EM.next_tick &do_work else self.succeed fibs[n] end } EM.next_tick &do_work end end EM.run do puts "Main Thread: #{Thread.current}" puts "#{Time.now.to_i}\n" EM.add_periodic_timer(1) do […]

如何获得最佳性能rails请求并行sidekiq worker

我的rails应用程序有一个sidekiq工作者。 工作人员将向api外部发出2500个请求,响应为xml。 如何为这名工人获得最佳表现?

Thread#run和Thread #wakeup之间的区别?

在Ruby中, Thread#run和Thread#wakup有什么区别 ? RDoc指定不使用Thread#wakeup调用调度程序 ,但这意味着什么? 什么时候使用wakeup vs run ? 谢谢。 编辑: 我看到Thread#wakup导致线程变为可运行,但是如果在执行Thread#run之前它不会执行它会有什么用处(无论如何唤醒线程)? 有人可以提供一个醒来有意义的例子吗? 出于好奇心的缘故=)

具有强读取偏差的快速线程安全Ruby Hash

我需要一些帮助来理解Ruby 1.8.7中的Hash。 我有一个multithreading的Ruby应用程序,大约95%的时间应用程序的多个线程都试图访问全局哈希。 我不确定默认的Ruby Hash是否是线程安全的。 根据我的情况,拥有快速哈希的最佳方法是什么,但也是线程安全的?

是否可以使用带有Ruby 1.8的EventMachine启动多个并行的http请求

em-synchrony.rb用Fibers实现了这个function,但是我会选择带有1.8 MRI的非光纤版本。 EM.run do http = EM::Protocols::HttpClient2.connect(“www.google.com”, 80) request = http.get(“/”) request.callback do puts request.status EM.stop end end