Ruby实现生产者和消费者代码分享

#ruby实现生产者和消费者代码

require 'thread'
queue = Queue.new
consumers = Thread.new do
  5.times do |i|
    obj = queue.pop
    print "consumer :#{i}\n"
    sleep(rand(0.05))
  end
end

producters = Thread.new do
  5.times do |i|
    sleep(0.1)
    print "producter : #{i}\n"
    queue.push("Item #{i}")
  end
end

producters.join
consumers.join
(0)

相关推荐

  • Ruby实现生产者和消费者代码分享

    #ruby实现生产者和消费者代码 require 'thread' queue = Queue.new consumers = Thread.new do 5.times do |i| obj = queue.pop print "consumer :#{i}\n" sleep(rand(0.05)) end end producters = Thread.new do 5.times do |i| sleep(0.1) print "producter : #{i}\n&q

  • JMS简介与ActiveMQ实战代码分享

    一.异步通信 之前接触到的RMI,Hessian等技术都是同步通信机制.当客户端调用远程方法时,客户端必须等到远程方法完成后,才能继续执行.这段时间客户端一直会被阻塞(这样造成的用户体验很不好). (同步通信) 同步通信有并不是程序之间交互的唯一方式,异步通信机制中,客户端不需要等待服务处理消息,可以继续执行,并且最终能够收到并处理消息. (异步通信) 异步通信的优势 无需等待.客户端只需要将消息发送给消息代理,不需要等待就可以继续执行别的任务,且确信消息会被投递给相应的目的地. 面向消息和解耦

  • C#多线程学习之(三)生产者和消费者用法分析

    本文实例讲述了C#多线程学习之生产者和消费者用法.分享给大家供大家参考.具体实分析如下: 前面的文章说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待.在C#中,关键字lock定义如下: lock

  • python条件变量之生产者与消费者操作实例分析

    本文实例讲述了python条件变量之生产者与消费者操作.分享给大家供大家参考,具体如下: 互斥锁是最简单的线程同步机制,面对复杂线程同步问题,Python还提供了Condition对象.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法.线程首先acquire一个条件变量,然后判断一些条件.如果条件不满足则wait:如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wait状态的线程接到

  • 基于C#实现的多生产者多消费者同步问题实例

    本文实例讲述了基于C#实现的多生产者多消费者同步问题,分享给大家供大家参考之用.具体代码如下: // 多个生产者和多个消费者,能生产n个产品的情况 using System; using System.Threading; public class HoldIntegerSynchronized{ private int[] buffer; //缓冲区 private int occupiedBufferCount = 0; private int readPosition = 0 , writ

  • java编程实现优先队列的二叉堆代码分享

    这里主要介绍的是优先队列的二叉堆Java实现,代码如下: package practice; import edu.princeton.cs.algs4.StdRandom; public class TestMain { public static void main(String[] args) { int[] a = new int[20]; for (int i = 0; i < a.length; i++) { int temp = (int)(StdRandom.random()*1

  • Java解压zip文件完整代码分享

    关于Java解压zip文件,我觉得也没啥好多说的,就是干呗..代码如下: package com.lanyuan.assembly.util; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; i

  • Python tornado队列示例-一个并发web爬虫代码分享

    Queue Tornado的tornado.queue模块为基于协程的应用程序实现了一个异步生产者/消费者模式的队列.这与python标准库为多线程环境实现的queue模块类似. 一个协程执行到yieldqueue.get会暂停,直到队列中有条目.如果queue有上限,一个协程执行yieldqueue.put将会暂停,直到队列中有空闲的位置. 在一个queue内部维护了一个未完成任务的引用计数,每调用一次put操作便会增加引用计数,而调用task_done操作将会减少引用计数. 下面是一个简单的

  • PHP基于rabbitmq操作类的生产者和消费者功能示例

    本文实例讲述了PHP基于rabbitmq操作类的生产者和消费者功能.分享给大家供大家参考,具体如下: 注意事项: 1.accept.php消费者代码需要在命令行执行 2.'username'=>'asdf','password'=>'123456' 改成自己的帐号和密码 RabbitMQCommand.php操作类代码 <?php /* * amqp协议操作类,可以访问rabbitMQ * 需先安装php_amqp扩展 */ class RabbitMQCommand{ public $

  • Python实现的生产者、消费者问题完整实例

    本文实例讲述了Python实现的生产者.消费者问题.分享给大家供大家参考,具体如下: 生产者.消费者问题,经典的线程同步问题:假设有一个缓冲池(列表),生产者往里面放东西,消费者从里面取,规则是:列表为空的时候,生产者才能放东西:列表不为空的时候,消费者才能取东西:为了简单起见,暂定缓冲池中最多只能有一个产品.这里生产者和消费者共同操作一个资源:缓冲池,因此每次操作的时候,需要给资源加锁,操作结束时,释放锁,这样才能做到资源同步.使用python实现,需要继承Thread类,获取锁对象,代码如下

随机推荐