• Shell Script Practice 2 Summary


      [这篇博客主要是我个人对这个任务的总结, 主要目的不是拿来和分享的, 所以难免让人感觉不知所云, 请直接忽视这篇即可.]

      处理任务为两个输入文件comfe(1,000,000行,文件结构"域名 NS 该域名的权威服务器")和iplab.txt(64万行, 文件结构

    "IP起始地址 CN 中国 地区编号 地区名称 省编号 省名称 市编号 市名称"), 要求将"权威服务器位于中国"的域名及其所在的

    省市输出.

      整个程序主要包括5个部分:

        1.得到无重复的权威域名服务器(输出结果文件名ANS);时间46秒

        2.通过多线程dig得到ANS的IP地址数值(输出结果文件名ANS-IPNum);时间288秒(4分钟多)

        3.压缩处理iplab.txt,得到不同省市对应的IP地址数值范围(输出结果文件名IPRegion);时间26秒

        4.对比IPRegion文件和ANS-IPNum文件得到权威所在的省市(输出结果文件名ANS-Region);时间1290秒(21分钟)瓶颈

        5.对比ANS-Region文件和comfe文件得到最终结果(输出结果文件名result);时间639秒(10分钟)瓶颈

      总用时2289秒(38分钟),找到的权威在国内的域名有60463个.

      两个对比的地方占用了超过3/4的时间,是程序的主要瓶颈.

      每个部分的主要工作,用下面的简单伪代码来描述如下:

        1. 处理comfe文件: sort -u $2--> ANS, 结果为8万多行

        2. 处理ANS文件: dig $0 --> ANS-IPNum(由于dig操作的对象数量较多,速度较慢,因此采用多进程), 结果为8万行左右

        3. 处理iplab.txt文件: 压缩处理,得到IPRegion文件,结构为"IP起始 IP结束 省市名称",结果为2万多行

        4. 对比ANS-IPNum和IPRegion文件,得到文件ANS-Region, 结构为"权威服务器名称 所在省市名称", 结果为2490行

        5. 对比comfe和ANS-Region文件,得到最终结果文件result, 结构为"域名 权威服务器名称 所在省市名称", 结果为

      代码略.

      整个程序要注意的地方:

        1. 要仔细分析每个输入文件的格式,对正确率和效率都有很大的影响:

          (1) 在comfe文件中不是以"."结尾的域名要加COM处理

          (2) 压缩处理iplab文件

        2. 对于每个文件的处理顺序是非常重要的, 对整个程序的效率也有很大的影响.此处详细分析:

          情况A:先对比ANS-IPNum和IPRegion得到ANS-Region,然后对比ANS-Region和comfe得到文件resultA

             对比ANS-IPNum和IPRegion得到ANS-Region: 8万行 * 2万行, 结果ANS-Region (<= 8万行)

             对比ANS-Region和comfe得到resultA: (<= 8万行) * 100万行

             粗略的估计复杂度: 8万行 * 2万行 + (<= 8万行) * 100万行 -> 8万行 * 100万行

          情况B:先对比ANS-IPNum和comfe得到NS-ANS-IPNum,然后对比IPRegion和NS-ANS-IPNum得到文件resultB

             对比ANS-IPNum和comfe得到NS-ANS-IPNum: 8万行 * 100万行, 结果 <=100万行

             对比ANS-Region和NS-ANS-IPNum得到文件resultB: <=100万行 * 2万行

             粗略的估计复杂度: 8万行 * 100万行 + (<= 100万行) * 2万行 -> 10万行 * 100万行

          尽管这两种情况,看起来差别不是很大, 但在实际运行时,时间差距还是比较大的.

      总结:

        1. 对于输入文件要仔细分析, 注意一些细节(为什么有的域名以"."结尾有的不是以"."结尾),默认缺省COM是为了减小文件的

          大小.(也算是一种压缩存储)

        2. 刚刚更改的程序的第一次运行尽量要守着观察,因为可能会有死循环或工作量很大时要及时终止任务的执行.

        3. 不要再把实验室的服务器弄死机了!

  • 相关阅读:
    (CodeForces 548B 暴力) Mike and Fun
    (BestCoder Round #64 (div.2))Array
    (2015 杭电校赛 )玩骰子
    js基础
    frame框架标签
    html
    div嵌套div标签 里层的div透明属性
    div嵌套div标签
    盒子标签div嵌套
    divspan盒子模型
  • 原文地址:https://www.cnblogs.com/lxw0109/p/shell_script_summary.html
Copyright © 2020-2023  润新知