成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

spiderman2 源碼解讀

harriszh / 2694人閱讀

摘要:先上一張架構(gòu)圖的事件傳遞的主要通過(guò)通道也就是圖中的這三個(gè)是阻塞隊(duì)列。

先上一張架構(gòu)圖

spiderman2的事件傳遞的主要通過(guò)queue通道也就是圖中的DQ,EQ,RQ;這三個(gè)是阻塞隊(duì)列。Worker來(lái)消費(fèi)隊(duì)列,Manager來(lái)處理任務(wù)流向哪個(gè)隊(duì)列

public static void main(String[] args) {
    final String xml = "xiaomibbs.xml";
    final Config conf = new XMLConfBuilder(xml).build();// 解析xml配置文件通過(guò)XMLBuilder構(gòu)建CONF對(duì)象
    new Spiderman(conf).go();//啟動(dòng),別忘記看控制臺(tái)信息哦,結(jié)束之后會(huì)有統(tǒng)計(jì)信息的
}

創(chuàng)建一個(gè)Spiderman

public Spiderman(Config config) {//將配置文件初始化到上下文
    this.context = new Context(config); 
    final Properties params = context.getParams(); 
    this.scheduler = Executors.newSingleThreadScheduledExecutor();
    this.managers = context.getManagers();
    this.managers.forEach(m -> {
        m.addListener(() -> { 
            counter.plus(); 
        });
    });
    this.threads = Executors.newFixedThreadPool(managers.size());
    duration = K.convertToMillis(params.getString("duration", "0")).longValue();
    counter = new Counter(managers.size(), duration);
}

開(kāi)始執(zhí)行抓取

public Spiderman go() {
    logger.debug("開(kāi)始行動(dòng)...");
    // 啟動(dòng)各個(gè)工頭,啟動(dòng)所有的downloadWorker,extractWorker,resultWorker,開(kāi)始等待阻塞隊(duì)列的數(shù)據(jù)
    this.managers.forEach(m -> threads.execute(m));
    // 調(diào)度, 固定一段時(shí)間清除種子和一些中間過(guò)程任務(wù),重新將種子放入任務(wù)隊(duì)列
    final InitialSeeds initSeeds = new InitialSeeds();
    final String cron = context.getParams().getString("scheduler.cron");
    if (K.isNotBlank(cron)) {
        // quartz
        
    } else {
        final long period = K.convertToMillis(context.getParams().getString("scheduler.period", "0")).longValue();
        if (period > 0) {
            this.scheduler.scheduleAtFixedRate(initSeeds, 5000, period, TimeUnit.MILLISECONDS);
        } else {
            //開(kāi)始處理種子請(qǐng)求,將種子請(qǐng)求初始化成DownloadTask對(duì)象并塞到DQ
            initSeeds.execute();
        }
    }

    Thread thread = new Thread(() -> {
        // 阻塞等待計(jì)數(shù)器歸0
        try {
            this.counter.await();
        } finally {
            if (this.counter.isTimeout()) {
                // 若是超時(shí)退出,先關(guān)閉manager
                logger.warn("運(yùn)行時(shí)間["+this.counter.getCost()+"]已經(jīng)達(dá)到或超過(guò)設(shè)置的最大運(yùn)行時(shí)間[duration="+this.duration+"],將強(qiáng)行停止行動(dòng)");
                this.stop();
            } else {
                logger.warn("當(dāng)前采集的結(jié)果數(shù)["+this.counter.get()+"]已經(jīng)達(dá)到或超過(guò)設(shè)置的最大數(shù)量[worker.result.limit="+this.counter.getLimit()+"],將強(qiáng)行停止行動(dòng)");
            }
            this._stop();
        }
    });
    thread.start();
    
    return this;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69200.html

相關(guān)文章

  • React 源碼深度解讀(三):首次 DOM 元素渲染 - Part 3

    摘要:在學(xué)習(xí)源碼的過(guò)程中,給我?guī)椭畲蟮木褪沁@個(gè)系列文章,于是決定基于這個(gè)系列文章談一下自己的理解。到此為止,首次渲染就完成啦總結(jié)從啟動(dòng)到元素渲染到頁(yè)面,并不像看起來(lái)這么簡(jiǎn)單,中間經(jīng)歷了復(fù)雜的層級(jí)調(diào)用。 前言 React 是一個(gè)十分龐大的庫(kù),由于要同時(shí)考慮 ReactDom 和 ReactNative ,還有服務(wù)器渲染等,導(dǎo)致其代碼抽象化程度很高,嵌套層級(jí)非常深,閱讀其源碼是一個(gè)非常艱辛的過(guò)...

    U2FsdGVkX1x 評(píng)論0 收藏0
  • React 源碼深度解讀(六):依賴(lài)注入

    摘要:依賴(lài)注入和控制反轉(zhuǎn),這兩個(gè)詞經(jīng)常一起出現(xiàn)。一句話表述他們之間的關(guān)系依賴(lài)注入是控制反轉(zhuǎn)的一種實(shí)現(xiàn)方式。而兩者有大量的代碼都是可以共享的,這就是依賴(lài)注入的使用場(chǎng)景了。下一步就是創(chuàng)建具體的依賴(lài)內(nèi)容,然后注入到需要的地方這里的等于這個(gè)對(duì)象。 前言 React 是一個(gè)十分龐大的庫(kù),由于要同時(shí)考慮 ReactDom 和 ReactNative ,還有服務(wù)器渲染等,導(dǎo)致其代碼抽象化程度很高,嵌套層級(jí)...

    glumes 評(píng)論0 收藏0
  • 來(lái)一打前端博客壓壓驚

    前言 本文所有內(nèi)容全部發(fā)布再個(gè)人博客主頁(yè) https://github.com/muwoo/blogs歡迎訂閱。不過(guò)最近因?yàn)槭虑楸容^多,有一段時(shí)間沒(méi)有更新了,后面打算繼續(xù)不斷學(xué)習(xí)更新,歡迎小伙伴一起溝通交流~ 最近更新 前端單測(cè)的那些事 基于virtual dom 的canvas渲染 js Event loop 機(jī)制簡(jiǎn)介 axios 核心源碼實(shí)現(xiàn)原理 JS 數(shù)據(jù)類(lèi)型、賦值、深拷貝和淺拷貝 j...

    wangbinke 評(píng)論0 收藏0
  • 來(lái)一打前端博客壓壓驚

    前言 本文所有內(nèi)容全部發(fā)布再個(gè)人博客主頁(yè) https://github.com/muwoo/blogs歡迎訂閱。不過(guò)最近因?yàn)槭虑楸容^多,有一段時(shí)間沒(méi)有更新了,后面打算繼續(xù)不斷學(xué)習(xí)更新,歡迎小伙伴一起溝通交流~ 最近更新 前端單測(cè)的那些事 基于virtual dom 的canvas渲染 js Event loop 機(jī)制簡(jiǎn)介 axios 核心源碼實(shí)現(xiàn)原理 JS 數(shù)據(jù)類(lèi)型、賦值、深拷貝和淺拷貝 j...

    villainhr 評(píng)論0 收藏0
  • 來(lái)一打前端博客壓壓驚

    前言 本文所有內(nèi)容全部發(fā)布再個(gè)人博客主頁(yè) https://github.com/muwoo/blogs歡迎訂閱。不過(guò)最近因?yàn)槭虑楸容^多,有一段時(shí)間沒(méi)有更新了,后面打算繼續(xù)不斷學(xué)習(xí)更新,歡迎小伙伴一起溝通交流~ 最近更新 前端單測(cè)的那些事 基于virtual dom 的canvas渲染 js Event loop 機(jī)制簡(jiǎn)介 axios 核心源碼實(shí)現(xiàn)原理 JS 數(shù)據(jù)類(lèi)型、賦值、深拷貝和淺拷貝 j...

    xiaoqibTn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<