`
samwalt
  • 浏览: 285477 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ruby多线程同步

    博客分类:
  • ruby
 
阅读更多
# 有两个线程。一个线程从文件中读取5行数据到一个队列,然后等待另一个线程
# 从队列中取数据,队列中数据取完后,继续从文件中读取数据到队列。

require 'monitor'

# 要读取的文件
filename = ARGV[0]

total = 0

# 存放数据的队列
q = Queue.new

# 读取文件的线程
a = Thread.new do
	puts "读取文件的线程启动"
	File.open(filename, 'r') do |file|
		i = 0
		file.each_line do |line|
			q << line
			i += 1
			total += 1
			if total >= 25
				puts "退出读取文件的线程"
				Thread.exit
			end
			if i >= 5
				i = 0
				puts "阻塞读取文件的线程"
				Thread.pass
			end
		end
	end
end

# 输出队列数据的线程
b = Thread.new do
	puts "输出队列数据的线程启动"
	loop do
		while q.size == 0
			Thread.pass
		end
		while q.size > 0
			puts q.pop
			#sleep(0.5)
		end
		if total >= 25
			puts "退出输出队列数据的线程"
			Thread.exit
		end
	end
end

a.join
b.join

分享到:
评论

相关推荐

    Ruby多线程编程初步入门

    ### Ruby多线程编程初步入门 #### 一、引言 多线程编程是现代软件开发中的重要组成部分,尤其对于需要高效并发处理的任务而言更是如此。Ruby作为一种灵活且功能强大的编程语言,在支持多线程方面提供了丰富的工具...

    多线程和并行程序设计

    另一方面,Java虚拟机(JVM)提供了一系列高级并发构建,例如Executor框架、并发集合、同步器等,用以简化多线程和并行程序的设计与实现。这些高级构建通常可以减少编程工作量,同时降低出错的可能性,例如减少死锁的...

    Ruby 多线程的潜力和弱点分析

    因此,对于CPU密集型任务,Ruby多线程无法提供显著的性能提升。 JRuby是一个替代的Ruby实现,它去除了GIL,允许在Java平台上实现真正的多线程并行计算。这意味着JRuby可以在多核系统上同时执行多个线程,从而充分...

    Working with Ruby Threads

    通过深入学习《Working with Ruby Threads》,开发者不仅能够掌握Ruby中的线程技术,还能学会如何在多线程环境中编写高效、可靠且易于维护的代码。无论是初学者还是有经验的开发者,都可以从中受益匪浅。

    Working with Ruby Threads(完整版)

    3. **线程同步**:由于线程间的共享数据可能导致竞态条件,Ruby提供了几种同步机制,包括`Mutex`(互斥锁)、`ConditionVariable`(条件变量)和`MonitorMixin`(监视器)。这些工具用于确保在任何时候只有一个线程访问...

    线程与并发:Ruby并行世界的探索之旅

    Ruby 通过提供多线程和并发支持来增强应用程序的性能。然而,需要注意的是 GIL 对线程并行执行的限制。理解线程、并发模型以及同步机制对于编写高效、稳定的 Ruby 程序至关重要。 #### 展望未来 随着 Ruby 解释器...

    ruby 知识总结

    在这篇知识总结中,我们将深入探讨Ruby中的线程同步和闭包(包括Blocks、Procs、Lambdas和Methods)。 首先,让我们关注线程同步。在多线程编程中,确保数据安全是非常重要的。Ruby提供了多种机制来实现线程同步,...

    ruby on rails 常用插件下载

    总的来说,Ruby on Rails 中的多线程插件是提高应用程序性能的重要手段,正确使用可以有效提升用户体验,但同时也需要注意多线程带来的问题,如资源竞争、同步和错误处理等挑战。通过持续学习和实践,开发者可以更好...

    如何能让Ruby性能增加30%

    在默认情况下,Ruby支持多线程,这使得它能够同时执行多个任务,提高资源利用率。然而,线程的创建和管理会带来额外的开销,特别是在某些特定情况下,这种开销可能会变得显著。当使用`--disable-pthread`编译Ruby时...

    ruby2.6.1.zip

    3. **线程并行性增强**:Ruby 2.6加强了线程管理,允许在多核处理器上实现更好的并发性能,通过改进GVL(全局解释器锁)的实现,减少了线程之间的同步开销。 4. **安全的数组和哈希迭代**:为了防止某些类型的安全...

    Programming-Ruby-1.9源代码

    - Ruby的线程模型,以及如何实现并发编程,包括`Thread`类和`Mutex`同步原语。 10. **Gem和包管理** - 如何创建和使用Gem,以及依赖管理,这对于理解Ruby的生态系统至关重要。 通过分析和实践《Programming Ruby...

    Ruby-程序设计-cn.pdf

    Ruby支持多线程和多进程编程,这使得并发处理成为可能。线程和进程的创建、操作以及同步机制是多任务处理的关键,它们能够显著提高程序的执行效率和响应速度。 ### 基本I/O操作 Ruby提供了丰富的I/O操作接口,从...

    Ruby-ParallelRuby让并行处理简单和快速

    Parallel Ruby库通过内部的同步机制尽可能地减少了这些问题,但开发者仍需谨慎设计代码,避免不必要的数据交互。 总之,Parallel Ruby库为Ruby开发者提供了一种高效、易用的并行处理解决方案,使得在Ruby中实现高...

    Ruby和Rails高效的Kafka处理框架_Ruby_下载.zip

    4. **线程和进程安全**:Karafka支持多线程和多进程消费,能够充分利用服务器资源,提高处理能力。同时,它还确保了在并发环境下的数据一致性。 5. **插件和扩展**:开发者可以通过编写自定义中间件来扩展Karafka的...

    ruby and it's tp

    线程池则是一种多线程处理形式,预先创建一组线程,用于执行各种任务,以提高系统的效率和响应速度。 在Ruby中,线程是通过Thread类来实现的。你可以创建一个新的线程并启动它,以执行特定的代码块。然而,直接创建...

    Ruby-Typhoeus封装libcurl让http请求更快和可靠

    Libcurl本身是一个跨平台的库,能够处理多种协议,包括HTTP、HTTPS,它具有强大的网络请求功能,如多线程、重试机制、代理支持等。 Typhoeus的优势在于它的并发性。通过libcurl的多路复用(Multiplexing)特性,...

Global site tag (gtag.js) - Google Analytics