• 利用位操作符加速程序的运行


    众所周知,位操作是cpu里面最快速的操作之一。但是以前在程序中,一直没有使用,可能是害怕异或是别的什么原因。可是最近在写一个小的爬虫,但是却需要爬取百万级数据,这时候想到了位操作符。

    先来2个程序对比一下:

    程序1:

     1 #coding:utf-8
     2 
     3 import time
     4 import datetime
     5 
     6 pagesNum = 0
     7 
     8 def getLinks():
     9     global pagesNum
    10     for i in range(0,0xfffffff):
    11         pagesNum += 1
    12         if pagesNum & 0xfff == 1:
    13             pass
    14 
    15         
    16 print('Begin:',datetime.datetime.now())
    17 
    18 for i in range(10):
    19    getLinks()
    20 print('End:',datetime.datetime.now())
    运行结果如下:

    Begin: 2016-08-03 10:50:13.694231
    End: 2016-08-03 10:58:46.796579

    程序2:

     1 #coding:utf-8
     2 import time
     3 import datetime
     4 
     5 pagesNum = 0
     6 
     7 def getLinks():
     8     global pagesNum
     9     for i in range(0,0xfffffff):
    10         pagesNum += 1
    11         if pagesNum % 4095 == 1:
    12             pass
    13             
    14 
    15 print('Begin:',datetime.datetime.now())
    16 
    17  for i in range(10):
    18      getLinks()
    19 print('End:',datetime.datetime.now())

    运行结果:

    Begin: 2016-08-03 09:42:40.624409
    End: 2016-08-03 09:52:50.405286

    事实证明,位运算比除法运算确实快不少。在循环中,从时间上进行直观分析,效率大概提升了12%。

    Tips:

    1.除法和乘法是最容易进行位运算的,%模运算也可以考虑替换为位运算。

    每当乘以2的指数倍的时候,相当于<<指数位,即:num * (2^x) == num << x

    每当除以2的指数倍的时候,相当于>>指数位,即:num * (2^x) == num >> x

    2.程序,除了追求正确性和鲁棒性之外,就是效率!!!

    ************************************
    给我一个支点,我可以改变整个世界!
  • 相关阅读:
    chkconfig命令
    PHP中的WebService
    MySQL 中联合查询效率分析
    javascript中json对象长度
    Replace Pioneer
    c++ 调用matlab程序
    ubuntu 安装 sublime
    一些地址收藏
    学习笔记草稿
    Redis Cluster 集群使用(3)
  • 原文地址:https://www.cnblogs.com/flyinghorse/p/5732222.html
Copyright © 2020-2023  润新知