摘要:先上一張架構(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
摘要:在學(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ò)...
摘要:依賴(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í)...
前言 本文所有內(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...
前言 本文所有內(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...
前言 本文所有內(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...
閱讀 1694·2019-08-30 15:54
閱讀 3346·2019-08-26 17:15
閱讀 3536·2019-08-26 13:49
閱讀 2589·2019-08-26 13:38
閱讀 2301·2019-08-26 12:08
閱讀 3065·2019-08-26 10:41
閱讀 1378·2019-08-26 10:24
閱讀 3387·2019-08-23 18:35