第3月第14天 生产者-消费者

1.

之前公司有个项目,有一个线程接收 tcp连接然后把socket放入队列,10个线程处理socket的数据,但10个线程还是处理不过来,客户端连上又关闭了,服务端处理完数据通过socket发送时,发现socket已经关闭了。

对于生产者-消费者问题,一定要设定缓冲区大小,当缓存区满的时候,生产者不会加入数据。而使用链表就会导致生产者不断的将数据放入缓冲区,而消费者处理不过来。

iOS audioUnit播放声音时也是如此。生产者 解码数据放入缓冲区,播放时消耗缓冲区数据。当缓存区满的时候,就不会继续解码了。这就需要通知功能。

生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。

http://blog.csdn.net/jnu_simba/article/details/9103059

时间: 2024-11-07 07:45:28

第3月第14天 生产者-消费者的相关文章

Java多线程14:生产者/消费者模型

什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制.生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: 1.生产者生产的时候消费者不能消费 2.消费者消费的时候生产者不能生产 3.缓冲区空时消费者不能消费 4.缓冲区满时生产者不能生产 生产者/模型作为一种重要的模型,它的优点在于: 1.解耦.因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这一点很容易想到,这样生产者和消费者的代码发生变化,

【并发那些事】生产者消费者问题

Step 1. 什么是生产者消费者问题 生产者消费者问题也叫有限缓冲问题,是多线程同步的一个最最最经典的问题.这个问题描述的场景是对于一个有固定大小的缓冲区,同时共享给两个线程去使用.而这两个线程会分为两个角色,一个负责往这个缓冲区里放入一定的数据,我们叫他生产者.另一个负责从缓冲区里取数据,我们叫他消费者. 这里就会有两个问题,第一个问题是生产者不可能无限制的放数据去缓冲区,因为缓冲区是有大小的,当缓冲区满的时候,生产者就必须停止生产.第二个问题亦然,消费者也不可能无限制的从缓冲区去取数据,取

实战Spring4+ActiveMQ整合实现消息队列(生产者+消费者)

引言: 最近公司做了一个以信息安全为主的项目,其中有一个业务需求就是,项目定时监控操作用户的行为,对于一些违规操作严重的行为,以发送邮件(FoxMail)的形式进行邮件告警,可能是多人,也可能是一个人,第一次是以单人的形式,,直接在业务层需要告警的地方发送邮件即可,可是后边需求变更了,对于某些告警邮件可能会发送多人,这其中可能就会有阻塞发邮件的可能,直到把所有邮件发送完毕后再继续做下边的业务,领导说这样会影响用户体验,发邮件的时候用户一直处于等待状态,不能干别的事情.最后研究说用消息队列,当有需

生产者消费者模型实现多线程异步交互

[Python之旅]第六篇(五):生产者消费者模型实现多线程异步交互 消息队列 生产者消费者模型 多线程异步交互 摘要:  虽然标题是"生产者消费者模型实现多线程异步交互",但这里要说的应该还包括Python的消息队列,因为这里多线程异步交互是通过Python的消息队列来实现的,因此主要内容如下: 1 2 3 4 1.生产者消费者模型:厨师做包子与顾客吃包子 2.Python的消息队列 3.利用... 虽然标题是"生产者消费者模型实现多线程异步交互",但这里要说的应

经典进程同步问题一:生产者-消费者问题(The producer-consumer problem)

(注:参考教材:计算机操作系统第四版 西安电子科技大学出版社) 问题描述:一群生产者进程在生产产品,并将这些产品提供给消费者去消费.为了使生产者进程与消费者进程能够并发进行,在两者之间设置一个具有n个缓冲区的缓冲池,生产者进程将产品放入一个缓冲区中:消费者可以从一个缓冲区取走产品去消费.尽管所有的生产者进程和消费者进程是以异方式运行,但它们必须保持同步:当一个缓冲区为空时不允许消费者去取走产品,当一个缓冲区满时也不允许生产者去存入产品. 解决方案:我们这里利用一个一个数组buffer来表示这个n

线程同步之生产者消费者

前言: 前面因时间关系,未将“生产者消费者问题”实例的介绍发布在博客随笔中,故本文作为对之前“多线程”一文的补充.概念: 生产者消费者问题(Bounded-buffer problem),是一个多线程同步问题的经典案例.这个案例中主要实现的是两个角色协同对同一资源进行访问.生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程.与此同时,消费者也在缓冲区消耗这些数据.该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据. 设计:本博客前面关于多线程的文

生产者-消费者问题(2)

问题描述 一组生产者进程和一组消费者进程共享一个初始为空.大小为n的缓冲区,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待:只有缓冲区不空时,消费者才能从中取出消息,否则必须等待.由于缓冲区是临界资源,它只允许一个生产者放入消息,或者一个消费者从中取出消息. 问题分析 1) 关系分析.生产者和消费者对缓冲区互斥访问是互斥关系,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,他们也是同步关系. 2) 整理思路.这里比较简单,只有生产者和消费者两个进程,正

c++11 条件变量 生产者-消费者 并发线程

http://baptiste-wicht.com/posts/2012/04/c11-concurrency-tutorial-advanced-locking-and-condition-variables.html ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 struc

【[email protected]】queue模块-生产者消费者问题

python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据. 个人感觉queue就是管程的概念 一个生产者消费者问题 1 from random import randint 2 from threading import Thread 3 from queue import Queue 4 from time import sleep 5 6 7 def writeq(queue): 8 print('starting put queue...') 9 queue.put('