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

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

?? fc.java.txt

?? JGRoups源碼
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
// $Id: FC.java.txt,v 1.1 2005/08/16 12:58:58 belaban Exp $package org.jgroups.protocols;import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;import org.jgroups.*;import org.jgroups.stack.Protocol;import org.jgroups.util.BoundedList;import org.jgroups.util.CondVar;import org.jgroups.util.Streamable;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(). * @author Bela Ban * @version $Revision: 1.1 $ */public class FC extends Protocol {    /** My own address */    Address local_addr=null;    /** 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);    /** We cache the membership */    final Vector members=new Vector(11);    /** List of members from whom we expect credits */    final Vector creditors=new Vector(11);    /** Max number of bytes to send per receiver until an ack must     * be received before continuing sending */    private long max_credits=50000;    /** 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)) */    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;    /** Current blocking. True if blocking, else false */    private final CondVar blocking=new CondVar("blocking", Boolean.FALSE);    static final String name="FC";    private long start_blocking=0, stop_blocking=0;    private int num_blockings=0, num_replenishments=0, num_credit_requests=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 String getName() {        return name;    }    public void resetStats() {        super.resetStats();        num_blockings=num_replenishments=num_credit_requests=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;    }    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() {        Object obj=blocking.get();        return obj != null && obj instanceof Boolean && ((Boolean)obj).booleanValue();    }    public int getNumberOfBlockings() {        return num_blockings;    }    public long getTotalTimeBlocked() {        return total_time_blocking;    }    public double getAverageTimeBlocked() {        return num_blockings == 0? num_blockings : total_time_blocking / num_blockings;    }    public int getNumberOfReplenishmentsReceived() {        return num_replenishments;    }    public int getNumberOfCreditRequests() {        return num_credit_requests;    }    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_replenishments));        return retval;    }    public String showLastBlockingTimes() {        return last_blockings.toString();    }    public void unblock() {        unblockSender();    }    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;        }        return true;    }    public void stop() {        super.stop();        unblock();    }    /**     * 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    }    private synchronized void handleDownMessage(Event evt) {        if(Boolean.TRUE.equals(blocking.get())) { // blocked            waitUntilEnoughCreditsAvailable();        }        else {            // not blocked            boolean rc;            synchronized(sent) { // 'sent' is the same lock as blocking.getLock()...                rc=decrMessage((Message)evt.getArg());                if(rc == false) {                    if(trace)                        log.trace("blocking due to insufficient credits");                    blocking.set(Boolean.TRUE);                    start_blocking=System.currentTimeMillis();                    num_blockings++;                }            }            if(rc == false) {                waitUntilEnoughCreditsAvailable();            }        }        passDown(evt);    }    public void up(Event evt) {        switch(evt.getType()) {            case Event.SET_LOCAL_ADDRESS:                local_addr=(Address)evt.getArg();                break;            case Event.VIEW_CHANGE:                handleViewChange(((View)evt.getArg()).getMembers());                break;            case Event.MSG:                Message msg=(Message)evt.getArg();                FcHeader hdr=(FcHeader)msg.removeHeader(name);                if(hdr != null) {                    switch(hdr.type) {                    case FcHeader.REPLENISH:                        num_replenishments++;                        handleCredit(msg.getSrc());                        break;                    case FcHeader.CREDIT_REQUEST:                        num_credit_requests++;                        Address sender=msg.getSrc();                        if(trace)                            log.trace("received credit request from " + sender + ": sending credits");                        received.put(sender, new Long(max_credits));                        sendCredit(sender);                        break;                    default:                        log.error("header type " + hdr.type + " not known");                        break;                    }                    return; // don't pass message up                }                else {                    adjustCredit(msg);                }                break;        }        passUp(evt);    }    private void handleCredit(Address sender) {        if(sender == null) return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲日产国码二区| 欧美激情综合五月色丁香小说| 成人午夜av影视| 国产成人精品免费视频网站| 久久精品国产成人一区二区三区| 日韩国产精品大片| 日韩精品每日更新| 日韩va亚洲va欧美va久久| 亚洲国产aⅴ天堂久久| 亚洲国产精品一区二区久久| 一区二区欧美国产| 午夜伦理一区二区| 免费成人在线播放| 国产精品一区二区三区四区| 国产麻豆欧美日韩一区| 粉嫩aⅴ一区二区三区四区| 99久久国产综合精品麻豆| 日本精品一级二级| 欧美日韩国产小视频在线观看| 欧美日韩一区二区三区高清| 欧美日韩dvd在线观看| 日韩视频一区在线观看| 久久久久久电影| 国产精品毛片高清在线完整版| 亚洲欧美日韩人成在线播放| 午夜精品123| 国产激情偷乱视频一区二区三区| 97久久超碰国产精品| 欧美日韩在线不卡| 久久综合色8888| 亚洲精品日韩一| 蜜桃视频第一区免费观看| 国产成人鲁色资源国产91色综| 91浏览器在线视频| 欧美成人猛片aaaaaaa| 亚洲欧美在线观看| 看电影不卡的网站| 色综合色狠狠天天综合色| 欧美精品vⅰdeose4hd| 日本一区二区不卡视频| 青青草原综合久久大伊人精品 | 亚洲精品网站在线观看| 日韩成人精品在线| 99在线精品视频| 精品成人在线观看| 一级做a爱片久久| 成人免费av资源| 欧美一区二区三区四区五区 | 亚洲18女电影在线观看| 国产高清成人在线| 欧美精品自拍偷拍| 国产精品久久免费看| 蜜桃av噜噜一区| 色婷婷久久综合| 中文字幕乱码久久午夜不卡| 日本不卡在线视频| 欧美性一二三区| 国产精品进线69影院| 精品一区二区三区香蕉蜜桃| 欧美巨大另类极品videosbest| 国产精品免费免费| 国产精品一级黄| 日韩午夜在线观看| 日韩中文字幕麻豆| 欧美这里有精品| 亚洲欧洲日本在线| 不卡的av电影| 国产精品卡一卡二| 丁香婷婷综合激情五月色| 精品国产在天天线2019| 人人狠狠综合久久亚洲| 欧美日韩一区二区电影| 亚洲自拍偷拍网站| 在线亚洲一区观看| 亚洲美女视频在线观看| 91麻豆swag| 综合婷婷亚洲小说| 成人黄色av电影| 成人欧美一区二区三区黑人麻豆| 国产精品1区2区3区| 精品国产精品网麻豆系列| 日本成人在线看| 精品国产一区二区三区四区四| 麻豆精品视频在线观看视频| 日韩你懂的电影在线观看| 蜜桃精品视频在线观看| 日韩精品自拍偷拍| 韩日精品视频一区| 国产亚洲欧美中文| eeuss国产一区二区三区| 最新高清无码专区| 欧美探花视频资源| 免费观看日韩av| 亚洲精品在线一区二区| 国产真实乱对白精彩久久| 国产视频一区在线观看| 97久久超碰精品国产| 一区二区三区蜜桃| 制服视频三区第一页精品| 日本在线不卡一区| 国产亚洲一二三区| 色综合久久中文综合久久97| 悠悠色在线精品| 91麻豆精品国产91久久久久久久久 | 一区二区三区加勒比av| 678五月天丁香亚洲综合网| 久久精品国产成人一区二区三区 | 国产精品18久久久久久久网站| 国产精品久久久久天堂| 欧美视频精品在线| 麻豆成人综合网| 国产精品沙发午睡系列990531| 在线观看亚洲精品| 久久 天天综合| 综合激情网...| 51精品国自产在线| 成人小视频免费在线观看| 亚洲国产aⅴ成人精品无吗| 欧美成人福利视频| 色哦色哦哦色天天综合| 久久国产夜色精品鲁鲁99| 1000部国产精品成人观看| 欧美日韩国产一二三| 成人污污视频在线观看| 日本中文字幕一区二区视频| 国产精品久久看| 日韩精品专区在线影院观看| 91视频com| 国产福利91精品一区二区三区| 亚洲午夜免费视频| 欧美高清在线精品一区| 91精品国产入口在线| 不卡视频在线看| 国产综合久久久久影院| 一区二区三区四区亚洲| 国产性做久久久久久| 日韩欧美三级在线| 欧美日韩成人综合在线一区二区| 粉嫩av亚洲一区二区图片| 蜜桃av一区二区| 日韩综合小视频| 亚洲美女在线一区| 中文一区一区三区高中清不卡| 日韩欧美亚洲国产另类| 欧美午夜电影一区| 色婷婷狠狠综合| 风间由美一区二区三区在线观看 | 亚洲综合小说图片| 国产精品第五页| 国产婷婷色一区二区三区| 欧美一级一区二区| 欧美日韩高清一区二区| 91麻豆精品秘密| 成人黄色片在线观看| 国产精品白丝av| 精品综合久久久久久8888| 日产国产欧美视频一区精品| 一区二区三区在线视频免费| 综合av第一页| 亚洲人成网站在线| 成人欧美一区二区三区黑人麻豆| 中文天堂在线一区| 中文字幕一区二区三区精华液| 日本一区二区成人| 国产精品女同一区二区三区| 国产女同互慰高潮91漫画| 国产女人水真多18毛片18精品视频 | 91成人网在线| 欧美色大人视频| 欧美精品在欧美一区二区少妇| 在线观看免费一区| 欧美日韩三级视频| 日韩一区二区三区电影在线观看| 91精品国产综合久久久久久久 | 国产精品国产精品国产专区不蜜 | 久久人人爽人人爽| 国产欧美一区视频| 18欧美乱大交hd1984| 亚洲黄一区二区三区| 亚洲综合色视频| 日韩国产精品久久久久久亚洲| 久久精品国产99国产| 国产一区二区三区免费播放 | 91福利国产精品| 制服丝袜亚洲播放| 久久久国产一区二区三区四区小说 | 免费成人性网站| 国产**成人网毛片九色| 91色porny蝌蚪| 欧美一级午夜免费电影| 国产亚洲精品免费| 一区二区三区丝袜| 美国毛片一区二区三区| 不卡一卡二卡三乱码免费网站| 在线观看区一区二| 精品国产区一区| 一区二区高清免费观看影视大全| 首页欧美精品中文字幕| 国产精品亚洲专一区二区三区| 色视频成人在线观看免|