亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java 集合與隊列的插入、刪除在并發(fā)下的性能比較

2019-11-17 03:26:51
字體:
供稿:網(wǎng)友

這兩天在寫一個java多線程的爬蟲,以廣度優(yōu)先爬取網(wǎng)頁,設(shè)置兩個緩存:
•  一個保存已經(jīng)訪問過的URL:vistedUrls
•  一個保存沒有訪問過的URL:unVistedUrls

  需要爬取的數(shù)據(jù)量不大,對URL壓縮后,可以把這兩個數(shù)據(jù)結(jié)構(gòu)都放入內(nèi)存,vistedUrls很顯然用HashSet<String>實現(xiàn),因為已經(jīng)訪問的URL只會添加,不會刪除和修改,使用HashSet可以高效判斷一個URL是否已經(jīng)訪問。

  糾結(jié)unVistedUrls該用什么數(shù)據(jù)結(jié)構(gòu),如果用隊列的話,并發(fā)情況下,隊列中可能會用重復(fù)的URL,比如一個線程A爬了CSDN的一個URL1,另一個線程B爬了博客園的一個URL2,URL1和URL2的頁面都有一個相同的出鏈URL3,線程A把URL3加入到unVistedUrls的隊尾,等待下次爬取,但在URL3被爬取之前,線程B也把URL3加到隊尾,這樣隊列中就有兩個相同的URL,可能會導(dǎo)致重復(fù)爬取網(wǎng)頁,當(dāng)然可以通過其他方法來保證不會重復(fù)爬取。

  然后就想能否也用Set來保存未訪問的URL,這樣在添加新的URL時,自動去重處理了,能夠有效保證不爬取重復(fù)網(wǎng)頁。但是unVistedUrls會有大量的插入和刪除操作,我認(rèn)為對集合進(jìn)行大量的插入刪除性能會比較低,為了測試集合的插入刪除性能對比隊列低多少,我寫了一個簡單的并發(fā)測試:


復(fù)制代碼
  1 /**
  2  * 測試集合與隊列的插入與讀寫性能
  3  *
  4  * @author jiqunpeng@Gmail.com
  5  *
  6  */
  7 public class SetQueueTest {
  8     // 隨即數(shù)構(gòu)造器
  9     PRivate static Random r = new Random(10);
 10     // 控制測試線程停止的原子變量
 11     private static AtomicBoolean stop = new AtomicBoolean(false);
 12
 13     /***
 14      * 基類,供測試用
 15      *
 16      * @author jiqunpeng@gmail.com
 17      *
 18      */
 19     static abstract class Service {
 20         // 操作的計數(shù)器
 21         protected long count = 0;
 22
 23         // 添加一堆元素,并去一個元素
 24         public abstract String addAndPick(List<String> elements);
 25
 26         // 取一個元素
 27         public abstract String pickOne();
 28
 29         /**
 30          * 打印操作次數(shù)
 31          */
 32         public void tell() {
 33             System.out.println(this + " :/t" + count);
 34         }
 35     }
 36
 37     /***
 38      * 采用TreeSet的集合工具
 39      *
 40      * @author jiqunpeng@gmail.com
 41      *
 42      */
 43     static class SetService extends Service {
 44         private TreeSet<String> set = new TreeSet<String>();
 45
 46         @Override
 47         public synchronized String addAndPick(List<String> elements) {
 48             count++;
 49             set.addAll(elements);
 50             return set.pollFirst();
 51         }
 52
 53         @Override
 54         public synchronized String pickOne() {
 55             count++;
 56             return set.pollFirst();
 57         }
 58
 59     }
 60
 61     /***
 62      * 采用LinkedList的隊列工具
 63      *
 64      * @author jiqunpeng@gmail.com
 65      *
 66      */
 67     static class QueueService extends Service {
 68         private Queue<String> queue = new LinkedList<String>();
 69
 70         @Override
 71         public synchronized String addAndPick(List<String> elements) {
 72             count++;
 73             queue.addAll(elements);
 74             return queue.poll();
 75         }
 76
 77         @Override
 78         public synchronized String pickOne() {
 79             count++;
 80             return queue.poll();
 81         }
 82     }
 83
 84     /***
 85      * 測試類
 86      *
 87      * @author jiqunpeng@gmail.com
 88      *
 89      */
 90     static class Tester implements Runnable {
 91         // 綁定要測試的工具對象
 92         private Service service;
 93
 94         Tester(Service s) {
 95             this.service = s;
 96         }
 97
 98         @Override
 99         public void run() {
100             while (stop.get() == false) {
101                 List<String> elements = new ArrayList<String>();
102                 int len = r.nextInt(200) + 8;
103                 for (int i = 0; i < len; i++) {
104                     elements.add(String.valueOf(r.nextInt()));
105                 }
106                 service.addAndPick(elements);
107                 for (int i = 0; i < 104; i++)
108                     service.pickOne();
109             }
110         }
111     }
112
113     /***
114      * 多線程方式,測試一個插入、刪除工具
115      *
116      * @param service
117      * @param time
118      * @param unit
119      * @throws InterruptedException
120      */
121     private static void test(Service service, int time, TimeUnit unit)
122             throws InterruptedException {
123         ExecutorService execs = Executors.newCachedThreadPool();
124         for (int i = 0; i < 20; i++) {
125             execs.execute(new Tester(service));
126         }
127         execs.shutdown();
128         unit.sleep(time);
129         stop.compareAndSet(false, true);
130         service.tell();
131     }
132
133     public static void main(String[] args) throws InterruptedException {
134         Service setService = new SetService();
135         test(setService, 5, TimeUnit.SECONDS);
136         stop.compareAndSet(true, false);// 重置終止條件
137         Service queueService = new QueueService();
138         test(queueService, 5, TimeUnit.SECONDS);
139     }
140 }

復(fù)制代碼

  輸出的結(jié)果如下:

SetQueueTest$SetService@5e9de959 :      7149859
SetQueueTest$QueueService@11b343e0 :    24303408

 

  測試結(jié)果讓我感到吃驚,TreeSet的插入刪除效率確實比LinkedList低,20個線程跑了10秒,使用隊列,插入刪除24303408次,使用集合,插入刪除7149859次。它們之間差距并不大,隊列只比集合快2~3倍。屬于同一個數(shù)量級。于是我這個小型的爬蟲應(yīng)該放心的選擇用Set作為unVistedUrls的實現(xiàn)。

    轉(zhuǎn)載請注明出處:www.49028c.com/fengfenggirl


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
午夜精品久久一牛影视| 久久精品成人欧美大片古装| 91精品国产综合久久精品app| 欧美aaa级片| 麻豆精品传媒视频观看| 新天天拍日日拍狠狠拍| 96国产粉嫩美女| 日韩 国产 欧美| 欧美激情性做爰免费视频| 91视频福利| 男人日女人下面视频| 日韩美女在线| 三级短视频在线| 国产成人成网站在线播放青青| 日韩字幕在线观看| 午夜诱惑痒痒网| 99热一区二区| 久久精品免视看国产成人| 亚洲欧美日韩天堂| 久久久久久久久艹| 国产欧美一区二区三区在线看蜜臂| 欧美综合视频在线| 青草在线视频在线观看| 国产精品久在线观看| 日韩精品一区二区在线观看| 国产精品999| 老司机精品视频在线播放| 亚州欧美日韩中文视频| 欧美亚洲愉拍一区二区| 亚洲人成精品久久久久| ass极品水嫩小美女ass| 亚洲高清无码久久| 亚洲成人三级在线| 韩国av免费在线观看| 亚洲一区国产| 一区二区三区www污污污网站| 欧美成人高清视频| 美女喷白浆视频| 亚洲欧美综合另类| 精品91在线| 久久免费视频色| 激情深爱综合网| 国产探花在线视频| av色男福利网| 最新中文字幕av| 欧美日本在线一区| 一二三不卡视频| 亚洲欧美自偷自拍另类| 卡通动漫精品一区二区三区| 国产日本亚洲| 国产精品99久久久久久大便| 美国一区二区三区在线播放| 2023亚洲男人天堂| 中文字幕亚洲精品一区| 国产乱人视频免费播放| 国产欧美一区二区| 久久资源中文字幕| 国产精品黄页网站在线播放免费| 久久久久久久久久久久久国产| 国产天堂av| 99在线精品视频| 超碰免费97在线观看| 天天插天天射| 人妻熟女一二三区夜夜爱| 久久久久天天天天| 日韩亚洲欧美视频| 亚洲伊人春色| 日韩一区国产二区欧美三区| 亚洲一二三区精品| 美国美女黄色片| 色吊丝在线永久观看最新版本| 国产乱码77777777| 中文字幕av无码一区二区三区| 青草av在线| 欧美成人免费一级人片100| 国产a久久精品一区二区三区| 欧美日韩看片| 风流老熟女一区二区三区| 亚洲一级二级| 高清成人av| 日韩主播视频在线| 一本色道**综合亚洲精品蜜桃冫| 精品捆绑调教一区二区三区| 91精品视频在线| 亚洲精品一二三区| 性网站在线看| 国产亚洲激情在线| 一道本无吗dⅴd在线播放一区| 国产激情999| 久久91精品久久久久久秒播| 免费在线激情视频| 国产精品视频流白浆免费视频| 91九色porn| 91精品国产一区二区三区| 中文在线天堂网| www.午夜激情| 久久免费成人精品视频| 婷婷一区二区三区| 国产精品自产拍高潮在线观看| 免费毛片在线看片免费丝瓜视频| 亚洲va欧美va人人爽| 99热99这里只有精品| 色伊人久久综合中文字幕| 亚洲第一黄色| 男男视频在线观看网站| 黄色小视频免费看| 亚洲精品在线看| av女片在线| 久久久www成人免费精品| 91成人在线精品| 成人国产亚洲精品a区天堂华泰| 91视频-88av| 成人免费福利片| 香蕉人人精品| 亚洲天堂中文在线| 欧美高清videos高潮hd| 免费看欧美女人艹b| 日本黄色一级视频| 无码内射中文字幕岛国片| 国产精品三上| 一二三四中文在线| 精品少妇一区二区30p| 精品国产黄色片| 精品xxxxxbbbb欧美中文| 丰满人妻一区二区三区四区| 四虎影视精品永久在线观看| 极品国产91在线网站| 国产69精品久久久久毛片| 日本人亚洲人jjzzjjz| 一本色道久久综合亚洲二区三区| 一区二区三区四区在线免费视频| 亚洲免费999| 久久久久av| 开心快乐六月丁香婷婷| 久久精品国产亚洲高清剧情介绍| 国产成人天天5g影院在线观看| 国产精品网站在线| 免费人成视频在线播放| 综合网插菊花| 日本精品久久久久久久| 国产91白丝在线播放| 日产精品久久久久久久性色| 国精产品一区二区| 精品一区二区在线视频| 国产日韩欧美在线播放不卡| 影音先锋中文字幕一区二区| 亚洲天堂资源在线| 精品中文字幕一区二区三区四区| 国产美女明星三级做爰| 久久精品人人做人人爽电影蜜月| 亚洲一区二区图片| 欧美视频在线看| 中文在线字幕av| 亚洲一级av毛片| 国产精品盗摄久久久| 国产九一视频| 精品影片一区二区入口| 精品无码一区二区三区的天堂| 国产成人精品亚洲精品| 欧美极品少妇与黑人| 91福利在线免费观看| 中文字幕在线观看一区| 精品久久久久久久久久久久久久久久久| 伊人波多野结衣| 精品一区二区在线看| 精品福利影院| 18禁男女爽爽爽午夜网站免费| 国产专区一区二区| 中文字幕亚洲欧美在线| 国产精品高清无码| 欧美aⅴ在线观看| 美日韩黄色大片| 日韩欧美影院| 中国色在线日|韩| 国产一本一道久久香蕉| 呻吟揉丰满对白91乃国产区| 日韩一区二区三区视频| 男人亚洲天堂| 国产成人澳门| 国产伦精品一区二区三区视频网站| 美女欧美视频在线观看免费| 欧美国产综合一区二区| 久久久久久久九九九九| 九色porny在线| 视频一区视频二区中文| 欧美午夜理伦三级在线观看| 亚洲国产欧美日本视频| 暖暖视频日本免费| 免费网站成人| 亚洲天堂久久久| 亚洲图片欧美在线| 嫩草影院一区二区| 欧美三级情趣内衣| 日韩免费视频线观看| 五月天综合视频| 国产精品久久久久久影视| 国产精品一区二区三区不卡| 国产精品高潮久久久久无| 欧美性xxxx极品hd欧美风情| 波多野结衣精品在线| 亚洲国产精品毛片av不卡在线| 亚洲一区 欧美| 国产一卡2卡3卡4卡网站免费| 北条麻妃在线一区二区| 极品少妇一区二区三区| 葵司免费一区二区三区四区五区| 成人激情文学综合网| 欧洲精品久久一区二区| 国产永久免费网站| 久久99国产精品麻豆| 在线免费黄色av| 自拍视频第一页| 中文字幕网站在线观看| 不卡大黄网站免费看| 国内精品**久久毛片app| 久久一区二区免费播放| 国产成人精品免费看在线播放| 精品久久中文字幕久久av| 免费观看黄色网| 亚洲精品天堂在线| eeuss影院www在线观看免费| 久久精品国产亚洲AV熟女| 一二三区中文字幕| 免费黄网站欧美| 日韩毛片免费看| 亚洲国产成人高清精品| 欧美乱妇23p| 韩国自拍一区| 国产免费视频传媒| 激情视频一区二区三区| 日本中文字幕一区| 久久天天躁狠狠躁夜夜爽蜜月| 国产午夜精品无码一区二区| 色欧美片视频在线观看| 国产不卡精品一区二区三区| hbad中文字幕| 日韩国产欧美在线视频| 亚洲国产无线乱码在线观看| 尤蜜粉嫩av国产一区二区三区| av毛片在线免费观看| 欧美另类极品videosbestfree| 亚洲一区欧美激情| 国产伦精品一区二区三区高清| 日韩黄色免费网站| 激情另类小说区图片区视频区| 欧美电影网址| 一区精品在线| 免费成人av| 精品一区二区在线欧美日韩| 99热精品在线| 国产一区二区不卡| 一卡二卡3卡四卡高清精品视频| 日本三级久久| 国产精品久久免费观看| 日韩区国产区| 国内精品美女在线观看| 成人免费网站在线观看| 不卡的国产精品| 中文字幕欧美日韩在线不卡| 欧美日韩在线播放一区二区| 无码一区二区三区在线观看| 天天操综合520| 国产91精品久久久久久久| 99精品在免费线偷拍| 国语对白在线视频| 国模吧精品人体gogo| h在线观看视频免费网站| 欧美黄色直播| 一区二区三区毛片免费| 国产一区二区三区四区| 国产亚洲一卡2卡3卡4卡新区| 影院欧美亚洲| 一级毛片免费高清中文字幕久久网| √天堂资源在线| 97欧洲一区二区精品免费| 午夜国产一区二区三区| 日本亚洲自拍| 99久久久无码国产精品衣服| 日韩欧美精品网址| 欧美激情精品久久久久久大尺度| 亚洲精品日韩在线观看| 欧美黑人巨大| 最近日韩中文字幕| 可以免费看黄色的网站| 亚洲成人久久影院| 午夜视频在线观看网站| 欧美绝顶高潮抽搐喷水合集| 97久久中文字幕| 成人精品一区二区三区电影免费| 亚洲精品综合久久中文字幕| 91精品视频免费在线观看| xxxxx成人.com| 午夜精品福利电影| 欧美人体视频| 日本老师69xxx| 五月天激情国产综合婷婷婷| 国产人妻大战黑人20p| 欧美极品少妇xxxxⅹ免费视频| 日本精品一级二级| 97国产在线视频| 91在线免费观看| 日av在线不卡| 日韩一级二级三级精品视频| 制服丝袜亚洲网站| 欧美视频在线观看免费| 在线精品91av| 国内精品小视频| 精品免费国产二区三区| 自拍视频在线观看一区二区| 精品中文字幕av| 久草视频手机在线观看| 黄色三级视频在线| 97人摸人人澡人人人超一碰| 午夜精品久久久久久久久| 国产精品久久久久久久免费软件| www.综合网.com| 亚洲视频 欧美视频| 4438x全国最大成人| 亚洲一区 在线播放| 黑人精品xxx一区一二区| 日韩美女精品在线| 免费看污久久久| 一区二区视频欧美| 精品一区二区三区四区五区| 蜜桃久久久久久久| 粉嫩久久99精品久久久久久夜| 国产激情无套内精对白视频| 无码人妻精品一区二区三应用大全|