我在具有8 GB RAM的macOS上具有4个内核(8线程超线程)的Intel i7并行生成大约400,000,000(4亿)个随机数.
但是,我也在DigitalOcean服务器上生成400,000,000个随机数,Debian上有20个内核,64 GB RAM.
这是代码:
import multiprocessing
import random
rangemin = 1
rangemax = 9
def randomGenPar_backend(backinput):
return random.randint(rangemin, rangemax)
def randomGenPar(num):
pool = multiprocessing.Pool()
return pool.map(randomGenPar_backend, range(0, num))
randNum = 400000000
random.seed(999)
randomGenPar(randNum)
Run Code Online (Sandbox Code Playgroud)
这些是基准测试的结果:
5,000,000 Random Numbers:
1 Core: 5.984
8 Core: 1.982
50,000,000 Random Numbers:
1 Core: 57.28
8 Core: 19.799
20 Core: 18.257
Times Benefit (20 core vs. 8 core) = 1.08
100,000,000 Random Numbers:
1 Core: 115
8 Core: 40.434
20 Core: 31.652 …Run Code Online (Sandbox Code Playgroud) python performance timing multiprocessing python-multiprocessing
我是一个新手,但我正在编写一个在C#中处理字符串的小程序,我注意到如果我做了一些不同的事情,代码执行得更快.
所以我想知道,你如何计算代码的执行速度?有没有(免费)公用事业?您是否采用System.Timer的老式方式自行完成?
C#中是否有任何地方以亚毫秒精度执行定时操作?我将时间码放在我的软件中,所有内容都以0ms的形式返回.我想知道是否有一种方法可以获得更精细的粒度.
附录:这是获得亚毫秒时序的正确代码吗?
timeSpan.TotalMilliseconds / 10
Run Code Online (Sandbox Code Playgroud)
经历的时间我仍然是0
如果有人在主VCL线程和后台线程上运行时间代码有很多经验,我想得到一个意见.我有一些代码在主线程上的Delphi 6应用程序中运行一些繁重的字符串处理.每次运行操作时,每个操作的时间在i5 Quad内核的单个线程上徘徊大约50 ms.让我真正怀疑的是,我在旧Pentium 4上运行的相同代码显示了同样的操作时间,因为通常我看到Pentium 4上运行的代码比Quad Core慢4倍.我开始怀疑代码是否可能消耗的时间远远少于50毫秒但是主要的VCL线程,可能是Windows消息处理或执行Windows API调用,正在为操作创建一个人为的"底层".注意,如果重要,则由套接字上的传入请求触发操作,但是在完全接收数据之前不会进行时间测量.
在我开始将所有代码移到后台线程进行测试之前,我想知道是否有人对此领域有任何一般知识?您在主VCL线程上运行代码的经历是什么?注意,当测试期间绝对没有用户触发的活动时,正在进行定时测量.
我也想知道如果将线程的优先级提高到实时性以下是否会有任何好处.在尝试使用这些标志时,我的运行时间从未见过太多改进.
- roschler
我们有一个从红色到白色混合的彩色动画.目前,这是线性淡化.我们知道我们可以使用Storyboard类的BeginTime等,但这只会延迟整个动画的开始.我们还研究了易用性/易用性方面,但它们似乎也没有用.
具体来说,我们希望保持红色值一秒钟,然后在下一个点亮红色变为白色.可以在纯XAML中完成吗?如果没有,可以在代码隐藏中手动设置故事板吗?...或者我们是否必须使用两个单独的故事板并按顺序播放它们?
所以我一直认为使用"+"运算符将Strings附加到单行上就像使用StringBuilder一样高效(并且在眼睛上肯定更好).今天虽然我在使用追加变量和字符串的Logger遇到了一些速度问题,但它使用的是"+"运算符.所以我做了一个快速的测试用例,我惊讶地发现使用StringBuilder更快!
基础是我使用每个附加数量的平均20次运行,有4种不同的方法(如下所示).
结果,时间(以毫秒为单位)
# of Appends
10^1 10^2 10^3 10^4 10^5 10^6 10^7
StringBuilder(capacity) 0.65 1.25 2 11.7 117.65 1213.25 11570
StringBuilder() 0.7 1.2 2.4 12.15 122 1253.7 12274.6
"+" operator 0.75 0.95 2.35 12.35 127.2 1276.5 12483.4
String.format 4.25 13.1 13.25 71.45 730.6 7217.15 -
百分比图表与最快算法的差异.

我检查了字节码,每种字符串比较方法都不同.
这是我正在使用的方法,你可以在这里看到整个测试类.
public static String stringSpeed1(float a, float b, float c, float x, float y, float z){
StringBuilder sb = new StringBuilder(72).append("[").append(a).append(",").append(b).append(",").append(c).append("][").
append(x).append(",").append(y).append(",").append(z).append("]");
return sb.toString(); …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种简单的方法(可能是一个库)来编写Python中的常量时间程序.特别是,我希望能够指定if-else流必须始终持续if条件为True或的相同时间False.
例如:
if condition:
foo1()
else:
foo2()
foo3()
Run Code Online (Sandbox Code Playgroud)
恒定时间的想法是,在执行中,直到它命中所f3()花费的时间应该与评估结果无关地花费相同的时间condition.这将防止时间泄漏作为侧通道以揭示其他信息(参见定时攻击).
下列:
timeit print("foo")
Run Code Online (Sandbox Code Playgroud)
返回类似于:100000 loops, best of 3: 2.35 µs per loop.我猜这100000与number论证有关timeit.我不明白什么是best of 3手段,什么是使用的时间单位?在这种情况下它可能是微秒,但我也看到us和ns作为单位; 但是,我在文档中找不到解释.
我目前正在尝试了解Lamport时间戳.考虑两个过程P1(产生事件a1,a2,...)和P2(产生事件b1,b2,......).设C(e)表示与事件e相关的Lamport时间戳.我为维基百科关于Lamport时间戳的文章中描述的每个事件创建了时间戳:

根据维基百科,以下关系适用于所有事件e1,e2:
如果e1发生在e2之前,那么C(e1)<C(e2).
我们来看看a1和b2.显然a1发生在b2之前,并且由于 C(a1)= 1且C(b2)= 3,因此关系成立:C(a1)<C(b2).
问题:对于b3和a3,这种关系不适用.显然,b3发生在a3之前.但是,C(b3)= 4,C(a3)= 3.因此,C(B3)<C(A3),并不能适用.
我误解了什么?非常感谢帮助!
魔术命令%timeit非常适合以交互方式测量代码执行时间.但是,我想得到结果,%timeit以便绘制结果.timeit.timeit允许这样做,但没有迭代次数的自动缩放和结果的规范化%timeit.
是否有一个内置函数可以计算一段代码,它还会自动调整它执行的迭代次数,并返回一个标准化结果?