Semaphore机制与TCp通信中的应用以及双缓存优化
来源:互联网 发布:淘宝信用卡支付手续费 编辑:程序博客网 时间:2024/06/04 23:36
一 Semaphore 信号量
三个名词:Semaphore, Operation P, Operation V
用抢车位的概念解释这三个名词。
S-》代表目前的车位数,比如是3
P-》代表有车要进车位了,每次进来一辆,S就会自减1,当S=0的时候,其他车辆就要wait。
V-》代表有车子要从车位离开了,每次离开一辆,S就会自加1,并且让外面等待的车子进来。
理解了这个概念,下面的两个概念就好理解了,当车位数只有1的时候,就表示这个车位只能被1辆车使用,
是不是和线程同步的概念很接近了?
二 TCP通信中的应用
S-》TCPQueue,maxsize设定为20,表示能有20个车位,为一个List的结构,enqueue和dequeue方法都做了线程同步.
简单的代码如下
class TCPQueue{int limitSize = 20;List m_list = new Vector();public synchronized Object dequeue(){ int size = m_list.size(); Object o = null; if (m_list != null && m_list.size() > 0) { o = m_list.remove(0); notifyAll(); } return o; } public synchronized void enqueue(Object item) { m_list.add(item); if(m_list.size()>=20){ wait(); } }}
P-》在一个线程中处理TCP的数据读取,TCP连接中每读取一个包,则往TCPQueue里面添加一个包,如果size到达20,则线程会阻塞,不让继续添加。
Thread receiveT = new Thread(){ while(isrunning){ struct = readData();
queue.enqueue(struct}; process(struct); }}
V-》另一个线程处理TCPQueue当中先进先出的数据
Thread processT = new Thread(){ while(isrunning){ struct = queue.dequeue(}; process(struct); }}
以上就是一个Semaphore机制的应用。但是这样的设计虽然可以适应一般的网络环境,一旦网络传过来的包过快,则会出现问题。
由于使用一个queue同时进行reveive和process操作,而缓存数目有限的情况下,缓存需要处理完数据之后才会清空,导致缓存清空过慢。
有没有更好的设计可以尽快的清理缓存呢?大家可以思考一下
0 0
- Semaphore机制与TCp通信中的应用以及双缓存优化
- 数据缓存与应用优化
- 缓存应用:单例模式在缓存机制中的应用
- 缓存应用:单例模式在缓存机制中的应用
- 缓存应用:单例模式在缓存机制中的应用
- TCP通信机制
- Android 中的缓存机制与实现
- Android 中的缓存机制与实现
- Android中的缓存机制与实现
- Android中的缓存机制与实现
- Android 中的缓存机制与实现
- Android 中的缓存机制与实现
- 租约机制以及在hbase中的应用
- android中的线程使用与通信机制
- java中的synchronized与semaphore
- ListView缓存优化机制
- 单例模式在缓存机制中的应用
- HTML5应用缓存机制
- Android解析XML文件
- 使用 Jenkins 执行Hello World 编译
- loadJS
- ios8新增一些特性
- 设计模式——原型模式
- Semaphore机制与TCp通信中的应用以及双缓存优化
- 使用ViewPager实现屏幕侧滑
- poj解题报告——3292
- 代码配色赏心悦目
- 造诣视觉-河南网站建设的博客,欢迎大家前来观赏
- 最大流入门——POJ 1273
- 利用Navigationcontroller实现tabbar的隐藏(因为是自己添加的tabbarView)
- bat 运行在32bit环境中修改64bit的注册表
- nike tn in some places showing an increasing trend of corruption cases