【分享】VB6里面使用多线程提高穷举速度(VB6代码)

嗷嗷叫的老马 2009-07-04 03:47:05
加精
VB6里面使用多线程提高穷举速度

刚刚几个我论坛里的小同学在群里讨论已知位数密码穷举提速的方案,我也参与了一下.

我想了想,最简单的提速,就是真正的并行执行,即物理多线程,这需要至少两个CPU的硬件支持.

而我正好是双核CPU,于是就做了这个简单的例子(代码在后面下载).

代码没有多少,但却花了点时间调试.

对于多线程的调试技术,我还非常生疏,而且经常遇到IDE与编译后结果不一致的情况,很是烦人.

不过呢,终于是整好了.

程序要解决的一个假设题是从1开始,一个一个地跑到40000000(4千万),如何提高速度.

我的做法是,简单地将目标拆分为两部分,分别扔给两个线程去执行,这样速度当然就是一倍啦!

实际测试结果也确实是这样,双线程约8秒,单线程约16秒.而将代码放到虚拟机里测试的结果,却是双

线程慢于单线程(18.X秒与17.X秒,虚拟机中是单核).看来,在只能执行一个物理线程的硬件系统中,这种

穷举使用多线程,在CPU进行逻辑线程调度时消耗的时间那还真的不少.

由于手里没有支持超线程的CPU,所以没办法测试超线程功能是啥情况.不过从超线程原理来看,貌似

只是把线程的调度从软件上改成了硬件上,本质上还是只能同时执行一个物理线程,估计也差不多....有

支持超线程CPU的朋友帮忙测试一下吧:)

扯点题外话,其实物理并行处理,我觉得并不是CPU的强项....去年在软件开发大会上看到了NVIDIA的

CUDA技术演示,那才叫牛B,由于GPU本身物理结构上的优势,它可以轻松拥有上百个物理线程并行处理的能

力....可惜NVIDIA送的那套光碟放在陈辉家里忘带走了,还有CSDN的那个包包...呃,对,那个包包已经是

莫依的了...

不过呢......我的本本是INTEL的GMA3100.....与CUDA是无缘的了- -!

扯远了.....还是把代码先发上来吧,不然还没等到各位看完,我脑袋上估计都堆了很多块砖了= =|||

源代码在此下载:

点击下载此文件

BY 嗷嗷叫的老马

紫水晶工作室
http://www.m5home.com/
2009-07-04
...全文
2651 105 打赏 收藏 转发到动态 举报
写回复
用AI写文章
105 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2011-06-11
  • 打赏
  • 举报
回复
可能如前面所说,没有成功将两个线程分别绑定到两个核心吧.....
kaka999 2011-06-10
  • 打赏
  • 举报
回复
酷睿2双核2.9GHZ,试了多次,双线程2.9多一点,单线程6多一点。
但是有一段时间不知道抽什么风了,双线程达到了12秒,最多16秒。。。。。。。绝对没有其他占用很多CPU的程序。
嗷嗷叫的老马 2011-06-04
  • 打赏
  • 举报
回复
你的CPU很NB...
K897414566 2011-06-04
  • 打赏
  • 举报
回复
哈哈,我的双线程只要3秒!!!
嗷嗷叫的老马 2011-05-14
  • 打赏
  • 举报
回复
自己翻个页...........
嗷嗷叫的老马 2011-05-14
  • 打赏
  • 举报
回复
100楼.
julian1997 2011-03-10
  • 打赏
  • 举报
回复
终于看到了!
  • 打赏
  • 举报
回复

  支持老马

  留个名 晚上回去测试
WTY0302020206 2010-05-14
  • 打赏
  • 举报
回复
看晕了 学习学习
嗷嗷叫的老马 2009-09-02
  • 打赏
  • 举报
回复
我晕!!!!

机器是越来越强悍了啊~~~~~~~

8核的话,你就建8个线程.....

对任务进行除8分配,就是每个线程类处理1/8的数据.
ChengFei_Net 2009-08-31
  • 打赏
  • 举报
回复
我有个八核的机器,不知道怎么改代码……
ChengFei_Net 2009-08-31
  • 打赏
  • 举报
回复
我的电脑测试 单线程:8.5秒,双线程:4.25秒
HuWenjin 2009-08-28
  • 打赏
  • 举报
回复
我测了一下
双核 T5500 1.6G HP
xp sp3

双线程:第一次 5900 第二次 6409 第三次 6334
单线程:12438ms

我试一下你说的方法,绑定到指定的核
嗷嗷叫的老马 2009-08-24
  • 打赏
  • 举报
回复
准备结帖........
shenboo 2009-08-15
  • 打赏
  • 举报
回复
不知道,学习下
神-气 2009-08-11
  • 打赏
  • 举报
回复
双线程约6秒,单线程越为12秒 笔记本..
嗷嗷叫的老马 2009-08-11
  • 打赏
  • 举报
回复
囧啊..............都比我的机器性能好.................

这台用坏了我另外买台牛B的机器囧......
嗷嗷叫的老马 2009-08-10
  • 打赏
  • 举报
回复
MSDN里说,"VB6中提供多线程支持的方式是进程外部件(即ActiveX EXE)".

我觉得这就是VB6里多线程的官方方案了.......
wozhidaode 2009-08-09
  • 打赏
  • 举报
回复
进来学习
Saingel 2009-08-09
  • 打赏
  • 举报
回复
并非多线程,而是多进程 - -
加载更多回复(84)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧