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
原创粉丝点击