亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fc.java.new

?? JGRoups源碼
?? NEW
?? 第 1 頁 / 共 2 頁
字號:
// $Id: FC.java,v 1.51 2006/01/14 14:00:38 belaban Exp $package org.jgroups.protocols;import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;import EDU.oswego.cs.dl.util.concurrent.Sync;import EDU.oswego.cs.dl.util.concurrent.ReentrantLock;import EDU.oswego.cs.dl.util.concurrent.CondVar;import org.jgroups.*;import org.jgroups.stack.Protocol;import org.jgroups.util.BoundedList;import org.jgroups.util.Streamable;import org.jgroups.util.Util;import java.io.*;import java.util.*;/** * Simple flow control protocol based on a credit system. Each sender has a number of credits (bytes * to send). When the credits have been exhausted, the sender blocks. Each receiver also keeps track of * how many credits it has received from a sender. When credits for a sender fall below a threshold, * the receiver sends more credits to the sender. Works for both unicast and multicast messages. * <p> * Note that this protocol must be located towards the top of the stack, or all down_threads from JChannel to this * protocol must be set to false ! This is in order to block JChannel.send()/JChannel.down(). * <br/>This is the second simplified implementation of the same model. The algorithm is sketched out in * doc/FlowControl.txt * @author Bela Ban * @version $Revision: 1.51 $ */public class FC extends Protocol {    /** HashMap<Address,Long>: keys are members, values are credits left. For each send, the     * number of credits is decremented by the message size */    final Map sent=new HashMap(11);    // final Map sent=new ConcurrentHashMap(11);    /** HashMap<Address,Long>: keys are members, values are credits left (in bytes).     * For each receive, the credits for the sender are decremented by the size of the received message.     * When the credits are 0, we refill and send a CREDIT message to the sender. Sender blocks until CREDIT     * is received after reaching <tt>min_credits</tt> credits. */    final Map received=new ConcurrentReaderHashMap(11);    // final Map received=new ConcurrentHashMap(11);    /** List of members from whom we expect credits */    final List creditors=new ArrayList(11);    /** Max number of bytes to send per receiver until an ack must     * be received before continuing sending */    private long max_credits=50000;    private Long max_credits_constant;    /** Max time (in milliseconds) to block. If credit hasn't been received after max_block_time, we send     * a REPLENISHMENT request to the members from which we expect credits. A value <= 0 means to     * wait forever.     */    private long max_block_time=5000;    /** If credits fall below this limit, we send more credits to the sender. (We also send when     * credits are exhausted (0 credits left)) */    private double min_threshold=0.25;    /** Computed as <tt>max_credits</tt> times <tt>min_theshold</tt>. If explicitly set, this will     * override the above computation */    private long min_credits=0;    /** Whether FC is still running, this is set to false when the protocol terminates (on stop()) */    private boolean running=true;    /** Determines whether or not to block on down(). Set when not enough credit is available to send a message     * to all or a single member */    private boolean insufficient_credit=false;    /** the lowest credits of any destination (sent_msgs) */    private long lowest_credit=max_credits;    /** Lock to be used with the Condvar below */    final Sync lock=new ReentrantLock();    /** Mutex to block on down() */    final CondVar mutex=new CondVar(lock);    static final String name="FC";    private long start_blocking=0, stop_blocking=0;    private int num_blockings=0;    private int num_credit_requests_received=0, num_credit_requests_sent=0;    private int num_credit_responses_sent=0, num_credit_responses_received=0;    private long total_time_blocking=0;    final BoundedList last_blockings=new BoundedList(50);    final static FcHeader REPLENISH_HDR=new FcHeader(FcHeader.REPLENISH);    final static FcHeader CREDIT_REQUEST_HDR=new FcHeader(FcHeader.CREDIT_REQUEST);    public final String getName() {        return name;    }    public void resetStats() {        super.resetStats();        num_blockings=0;        num_credit_responses_sent=num_credit_responses_received=num_credit_requests_received=num_credit_requests_sent=0;        total_time_blocking=0;        last_blockings.removeAll();    }    public long getMaxCredits() {        return max_credits;    }    public void setMaxCredits(long max_credits) {        this.max_credits=max_credits;        max_credits_constant=new Long(this.max_credits);    }    public double getMinThreshold() {        return min_threshold;    }    public void setMinThreshold(double min_threshold) {        this.min_threshold=min_threshold;    }    public long getMinCredits() {        return min_credits;    }    public void setMinCredits(long min_credits) {        this.min_credits=min_credits;    }    public boolean isBlocked() {        return insufficient_credit;    }    public int getNumberOfBlockings() {        return num_blockings;    }    public long getMaxBlockTime() {        return max_block_time;    }    public void setMaxBlockTime(long t) {        max_block_time=t;    }    public long getTotalTimeBlocked() {        return total_time_blocking;    }    public double getAverageTimeBlocked() {        return num_blockings == 0? 0.0 : total_time_blocking / (double)num_blockings;    }    public int getNumberOfCreditRequestsReceived() {        return num_credit_requests_received;    }    public int getNumberOfCreditRequestsSent() {        return num_credit_requests_sent;    }    public int getNumberOfCreditResponsesReceived() {        return num_credit_responses_received;    }    public int getNumberOfCreditResponsesSent() {        return num_credit_responses_sent;    }    public String printSenderCredits() {        return printMap(sent);    }    public String printReceiverCredits() {        return printMap(received);    }    public String printCredits() {        StringBuffer sb=new StringBuffer();        sb.append("senders:\n").append(printMap(sent)).append("\n\nreceivers:\n").append(printMap(received));        return sb.toString();    }    public Map dumpStats() {        Map retval=super.dumpStats();        if(retval == null)            retval=new HashMap();        retval.put("senders", printMap(sent));        retval.put("receivers", printMap(received));        retval.put("num_blockings", new Integer(this.num_blockings));        retval.put("avg_time_blocked", new Double(getAverageTimeBlocked()));        retval.put("num_replenishments", new Integer(this.num_credit_responses_received));        retval.put("total_time_blocked", new Long(total_time_blocking));        return retval;    }    public String showLastBlockingTimes() {        return last_blockings.toString();    }    /** Allows to unblock a blocked sender from an external program, e.g. JMX */    public void unblock() {        if(Util.acquire(lock)) {            try {                if(trace)                    log.trace("unblocking the sender and replenishing all members, creditors are " + creditors);                Map.Entry entry;                for(Iterator it=sent.entrySet().iterator(); it.hasNext();) {                    entry=(Map.Entry)it.next();                    entry.setValue(max_credits_constant);                }                lowest_credit=computeLowestCredit(sent);                creditors.clear();                insufficient_credit=false;                mutex.broadcast();            }            finally {                Util.release(lock);            }        }//        synchronized(mutex) {//            if(trace)//                log.trace("unblocking the sender and replenishing all members, creditors are " + creditors);////            Map.Entry entry;//            for(Iterator it=sent.entrySet().iterator(); it.hasNext();) {//                entry=(Map.Entry)it.next();//                entry.setValue(max_credits_constant);//            }////            lowest_credit=computeLowestCredit(sent);//            creditors.clear();//            insufficient_credit=false;//            mutex.notifyAll();//        }    }    public boolean setProperties(Properties props) {        String  str;        boolean min_credits_set=false;        super.setProperties(props);        str=props.getProperty("max_credits");        if(str != null) {            max_credits=Long.parseLong(str);            props.remove("max_credits");        }        str=props.getProperty("min_threshold");        if(str != null) {            min_threshold=Double.parseDouble(str);            props.remove("min_threshold");        }        str=props.getProperty("min_credits");        if(str != null) {            min_credits=Long.parseLong(str);            props.remove("min_credits");            min_credits_set=true;        }        if(!min_credits_set)            min_credits=(long)((double)max_credits * min_threshold);        str=props.getProperty("max_block_time");        if(str != null) {            max_block_time=Long.parseLong(str);            props.remove("max_block_time");        }        if(props.size() > 0) {            log.error("FC.setProperties(): the following properties are not recognized: " + props);            return false;        }        max_credits_constant=new Long(max_credits);        return true;    }    public void start() throws Exception {        super.start();//        synchronized(mutex) {//            running=true;//            insufficient_credit=false;//            lowest_credit=max_credits;//        }        lock.acquire();        try {            running=true;            insufficient_credit=false;            lowest_credit=max_credits;        }        finally {            lock.release();        }    }    public void stop() {        super.stop();//        synchronized(mutex) {//            running=false;//            mutex.notifyAll();//        }        if(Util.acquire(lock)) {            try {                running=false;                mutex.broadcast(); // notify all threads waiting on the mutex that we are done            }            finally {                Util.release(lock);            }        }    }    /**     * We need to receive view changes concurrent to messages on the down events: a message might blocks, e.g.     * because we don't have enough credits to send to member P. However, if member P crashed, we need to unblock !     * @param evt     */    protected void receiveDownEvent(Event evt) {        if(evt.getType() == Event.VIEW_CHANGE) {            View v=(View)evt.getArg();            Vector mbrs=v.getMembers();            handleViewChange(mbrs);        }        super.receiveDownEvent(evt);    }    public void down(Event evt) {        switch(evt.getType()) {        case Event.MSG:            handleDownMessage(evt);            return;        }        passDown(evt); // this could potentially use the lower protocol's thread which may block    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人片在线观看| 欧美三级乱人伦电影| 99久久精品久久久久久清纯| 欧美日韩国产一级二级| 国产日产欧美一区二区三区| 一区二区三区欧美激情| 国产精品18久久久久久vr| 欧美日韩国产另类一区| 国产精品欧美一区二区三区| 秋霞成人午夜伦在线观看| 在线中文字幕不卡| 国产精品午夜春色av| 国产成人免费网站| 精品国产a毛片| 首页亚洲欧美制服丝腿| 欧洲色大大久久| 亚洲欧美日韩国产综合| 国产寡妇亲子伦一区二区| 日韩一区二区在线观看视频播放 | av成人免费在线| 欧美videos大乳护士334| 午夜精品免费在线| 欧美性生活久久| 一区二区久久久久久| 99热在这里有精品免费| 中文字幕乱码亚洲精品一区| 国产成人亚洲综合a∨猫咪| 精品人在线二区三区| 日产精品久久久久久久性色| 欧美色男人天堂| 亚洲一级二级三级| 欧美私模裸体表演在线观看| 综合久久久久久久| 色偷偷88欧美精品久久久| 亚洲三级久久久| 91久久精品一区二区三| 一区二区三区欧美视频| 在线精品亚洲一区二区不卡| 亚洲一区二区三区激情| 欧美日韩一区二区不卡| 五月天激情小说综合| 91精品久久久久久久99蜜桃 | 欧美日韩成人在线一区| 亚洲mv在线观看| 日韩亚洲欧美成人一区| 极品少妇一区二区三区精品视频| 日韩久久久久久| 国产成人午夜99999| 国产精品福利一区二区三区| 在线一区二区观看| 五月综合激情网| 久久综合久久99| av一区二区三区| 亚洲成人高清在线| 日韩欧美色综合网站| 国产一区二区三区免费看| 国产精品久线在线观看| 欧美午夜寂寞影院| 久久99蜜桃精品| 欧美国产一区在线| 欧美日韩一区 二区 三区 久久精品| 日韩中文字幕麻豆| 国产欧美日韩卡一| 日本高清不卡一区| 欧美96一区二区免费视频| 国产精品色婷婷久久58| 欧美午夜精品久久久久久超碰| 久久99热这里只有精品| 亚洲欧洲国产专区| 欧美一级搡bbbb搡bbbb| av在线播放成人| 欧美aaa在线| 亚洲精品成人在线| 精品国产一区二区三区久久久蜜月| 成人三级在线视频| 亚洲午夜免费视频| 国产婷婷精品av在线| 欧美日韩成人一区| 国产999精品久久久久久| 亚洲mv大片欧洲mv大片精品| 国产日韩精品视频一区| 这里只有精品视频在线观看| 成人aa视频在线观看| 蜜臀av一区二区在线观看| 国产精品久久久久一区二区三区共| 91精品国产91久久综合桃花| 91视频在线观看| 国产尤物一区二区在线| 日韩在线观看一区二区| 亚洲视频电影在线| 久久久夜色精品亚洲| 91精品在线观看入口| 91偷拍与自偷拍精品| 国产一区二区在线看| 免费视频一区二区| 亚洲一区在线观看视频| 国产精品你懂的在线欣赏| 欧美一级日韩不卡播放免费| 欧美日韩一区二区在线观看视频| 99久久99久久久精品齐齐| 国产成人综合亚洲网站| 国产制服丝袜一区| 老色鬼精品视频在线观看播放| 亚洲成人资源在线| 一区二区三区在线免费| 日韩久久一区二区| 国产精品久久久久三级| 国产午夜精品美女毛片视频| 久久蜜桃av一区二区天堂 | 91免费视频网址| 丁香六月久久综合狠狠色| 激情欧美一区二区| 精品在线免费观看| 六月丁香婷婷久久| 理论片日本一区| 久久精品二区亚洲w码| 日本不卡免费在线视频| 日韩电影一区二区三区四区| 日本欧美一区二区| 视频一区视频二区在线观看| 五月激情丁香一区二区三区| 午夜精品久久久久久久久久| 丝袜美腿亚洲一区二区图片| 日韩中文字幕亚洲一区二区va在线 | 亚洲午夜影视影院在线观看| 亚洲一区二区三区四区的| 亚洲一区在线免费观看| 天天操天天综合网| 日本91福利区| 国产一区二区三区最好精华液| 国产精品99久久久久久久vr| 处破女av一区二区| 91视频免费播放| 欧美日韩专区在线| 日韩一级完整毛片| 国产欧美日韩综合| 亚洲综合色网站| 美国一区二区三区在线播放| 国产乱妇无码大片在线观看| 99riav久久精品riav| 欧美区在线观看| 久久久99精品免费观看| 中文字幕五月欧美| 日韩中文字幕91| 国产成人av一区二区三区在线观看| 97精品久久久午夜一区二区三区| 欧美日韩一区二区三区高清 | 欧美不卡一区二区三区| 久久综合999| 亚洲另类春色国产| 久久国产剧场电影| 97aⅴ精品视频一二三区| 欧美丰满高潮xxxx喷水动漫| 久久久不卡影院| 亚洲综合色网站| 国产精品66部| 欧美日韩在线直播| 国产日产亚洲精品系列| 午夜激情综合网| 成人黄色在线看| 欧美一区二区在线视频| 国产精品久久久久久久久搜平片 | 欧美一级片在线看| 国产精品国产三级国产普通话三级 | 56国语精品自产拍在线观看| 国产免费久久精品| 免费在线观看成人| 色欧美88888久久久久久影院| 欧美mv日韩mv国产网站| 亚洲曰韩产成在线| 国产69精品一区二区亚洲孕妇| 在线播放中文一区| 亚洲人成网站精品片在线观看| 久久国产精品一区二区| 欧美日韩精品一区二区在线播放| 国产精品久久久久一区二区三区| 美女脱光内衣内裤视频久久影院| 91精品办公室少妇高潮对白| 久久久精品人体av艺术| 日韩中文欧美在线| 欧美日韩一级视频| 夜夜精品浪潮av一区二区三区| 成熟亚洲日本毛茸茸凸凹| 久久日一线二线三线suv| 日本午夜精品一区二区三区电影| 99久久精品久久久久久清纯| 中国av一区二区三区| 国产精品99久| 国产欧美一区在线| 国产成人免费网站| 国产亚洲一二三区| 国产精品自拍在线| 久久亚洲精华国产精华液| 六月丁香婷婷色狠狠久久| 日韩一区二区精品在线观看| 日韩精彩视频在线观看| 7777精品伊人久久久大香线蕉经典版下载| 一区二区三区成人| 精品视频免费在线| 日日夜夜免费精品视频|