Tag: 性能

什么是Docker容器的运行时性能成本

我想全面了解Docker容器的运行时性能成本。 我发现参考networking轶事慢〜100μs 。 我还发现引用运行时成本是“微不足道”和“接近于零”,但我想更确切地知道这些成本是什么。 理想情况下,我想知道Docker是以抽象的性能成本抽象出来的,还是抽象出没有性能成本的东西。 networking,CPU,内存等 而且,如果有抽象成本,是否有办法绕过抽象成本。 例如,也许我可以直接在Docker上装载一个磁盘。

在循环之前或循环中声明variables之间的区别?

我一直想知道,一般来说,在循环之前是否声明一个抛出variables,而不是在循环内部重复,会产生任何(性能)​​差异? Java中的一个(相当无意义的)例子: a)循环之前的声明: double intermediateResult; for(int i=0; i < 1000; i++){ intermediateResult = i; System.out.println(intermediateResult); } b)循环内声明(重复): for(int i=0; i < 1000; i++){ double intermediateResult = i; System.out.println(intermediateResult); } 哪一个更好, a或b ? 我怀疑重复的variables声明(例子b ) 在理论上造成了更多的开销,但是编译器足够聪明以至于无关紧要。 示例b具有更紧凑的优点,并将variables的范围限制在使用位置。 不过,我倾向于按照例子编码。 编辑:我特别感兴趣的Java案例。

为什么有些浮点<整数比较比其他四倍慢?

当将浮点数与整数相比较时,某些值对需要比其他类似的值更长的时间才能被评估。 例如: >>> import timeit >>> timeit.timeit("562949953420000.7 < 562949953421000") # run 1 million times 0.5387085462592742 但是,如果浮点数或整数大于或等于一定值,则比较运行速度要快得多: >>> timeit.timeit("562949953420000.7 < 562949953422000") # integer increased by 1000 0.1481498428446173 >>> timeit.timeit("562949953423001.8 < 562949953421000") # float increased by 3001.1 0.1459577925548956 更改比较运算符(例如,使用==或> )不会以明显的方式影响时间。 这并不仅仅与数量有关,因为select更大或更小的值可能会导致更快的比较,所以我怀疑是不幸的,这些比特排列起来。 显然,比较这些值对于大多数用例而言足够快。 我只是好奇,为什么Python似乎与其他一些值的斗争更多的价值。

性能惊喜与“为”和可为空的types

我只是修改了C#深入处理可空types的第4章,我添加了一个关于使用“as”运算符的部分,它允许您编写: object o = …; int? x = o as int?; if (x.HasValue) { … // Use x.Value in here } 我认为这是非常简洁的,它可以提高C#1的性能,使用“is”后跟一个cast – 毕竟,这样我们只需要dynamictypes检查一次,然后进行简单的值检查。 但是,这似乎并非如此。 我已经在下面包含了一个示例testing应用程序,它基本上总结了一个对象数组中的所有整数 – 但是数组包含了大量的空引用和string引用以及盒装整数。 该基准测量了您在C#1中使用的代码,使用“as”运算符的代码,以及用于踢LINQ解决scheme的代码。 令我惊讶的是,在这种情况下,C#1代码速度提高了20倍 – 即使是LINQ代码(由于涉及到迭代器,我预计它会更慢)比“as”代码更胜一筹。 可执行文件isinst的.NET实现是否真的很慢? 是额外的unbox.any导致问题吗? 有没有另外的解释呢? 目前感觉就像在性能敏感的情况下,我将不得不包含使用这个警告。 结果: 演员:10000000:121 如:10000000:2211 LINQ:10000000:2143 码: using System; using System.Diagnostics; using System.Linq; class Test { const int Size = 30000000; […]

转换设置为列表而不创build新的列表

我正在使用此代码将一个Set转换为一个List : Map<String, List> mainMap = new HashMap<String, List>(); for(int i=0; i<something.size(); i++){ Set set = getSet(…); //return different result each time List listOfNames = new ArrayList(set); mainMap.put(differentKeyName,listOfNames); } 我想避免在循环的每个迭代中创build一个新的列表。 那可能吗?

为什么(a * b!= 0)在Java中比(a!= 0 && b!= 0)快?

我正在用Java编写一些代码,在某些情况下,程序stream由两个intvariables“a”和“b”是否非零来确定(注意:a和b从不是负数,从不在整数溢出范围内)。 我可以用它来评估它 if (a != 0 && b != 0) { /* Some code */ } 或者, if (a*b != 0) { /* Some code */ } 因为我希望那段代码每次运行数百万次,所以我想知道哪一个会更快。 我通过在一个巨大的随机生成的数组上进行比较来做实验,我也很好奇数组的稀疏性(数据分数= 0)如何影响结果: long time; final int len = 50000000; int arbitrary = 0; int[][] nums = new int[2][len]; for (double fraction = 0 ; fraction <= 0.9 […]

Fortran比C更容易优化计算吗?

我不时读到Fortran是或可以比C更快的计算。 这是真的吗? 我必须承认,我几乎不了解Fortran,但是到目前为止我看到的Fortran代码并没有表明这个语言具有C没有的特性。 如果是这样,请告诉我为什么。 请不要告诉我什么语言或库对数字处理有好处,我不打算写一个应用程序或库来做到这一点,我只是好奇。

确定整数是否在具有已知值集的两个整数(包含)之间的最快方法

在C或C ++中是否有比x >= start && x <= end更快的方法来testing整数是否在两个整数之间? 更新 :我的具体平台是iOS。 这是一个框模糊函数的一部分,它将像素限制在给定的正方形中的一个圆圈。 更新 :尝试接受的答案后 ,我得到了一个数量级的加速在一个代码行,正常的x >= start && x <= end方式。 更新 :这里是来自XCode的汇编程序之前和之后的代码: 新方法 // diff = (end – start) + 1 #define POINT_IN_RANGE_AND_INCREMENT(p, range) ((p++ – range.start) < range.diff) Ltmp1313: ldr r0, [sp, #176] @ 4-byte Reload ldr r1, [sp, #164] @ 4-byte Reload ldr […]

程序员(或计算机科学家)应该知道什么统计数据?

我是一名程序员,在math和计算机科学方面有着不错的背景。 我研究了可计算性,图论,线性代数,抽象代数,algorithm,以及在本科水平上的一些概率和统计(通过几个CS类)。 不过,我觉得我对统计数据不够了解。 统计学在计算中越来越有用,统计自然语言处理有助于为search和机器翻译中的一些Googlealgorithm提供帮助,对硬件,软件和networking的性能分析需要适当的统计基础,这些都是可信的,而生物信息学每天更普遍。 我已经阅读了关于“Google如何使用if语句使用贝叶斯过滤的方式” ,并且我知道Paul Graham的“垃圾邮件和更好的贝叶斯过滤 计划”中的问题,甚至是相当天真的,简单的统计方法,但我知道,我想超越这个。 我试图研究更多的统计数据,但是我已经有点失落了。 维基百科的文章有一长串的相关话题,但我不确定我应该看看。 我觉得从我所看到的情况来看,很多统计数字都假设一切都是线性组合的因素,加上一些高斯分布的随机噪声, 我想知道除了线性回归还有什么我应该学习的东西,或者我应该花时间去真正理解,然后再转向其他技术。 我发现了几本很长的书, 我应该从哪里开始? 所以我想知道从哪里去。 学什么,在哪里学习。 特别是,我想知道: 编程,软件工程和计算机科学中的哪些问题是非常适合的统计方法? 我将在哪里获得最大的回报? 我应该花些时间学习什么样的统计方法? 我应该使用什么资源来学习? 书籍,报纸,网站。 我希望能够讨论每本书(或其他资源)是什么,以及为什么它是相关的。 为了澄清我在寻找什么,我感兴趣的是程序员通常需要处理哪些问题可以从统计方法中受益,以及哪种统计工具是有用的。 例如: 程序员经常需要处理大型的自然语言文本数据库,并帮助分类,分类,search和处理。 什么统计技术在这里有用? 更一般地说,人工智能已经从分散的,符号的方法转向统计技术。 什么样的统计人工智能方法现在最能提供给工作程序员(而不是正在进行的研究,可能会也可能不会提供具体的结果)? 程序员经常被要求生产高性能的系统,在负载下可以很好地扩展。 但是除非你能测量,否则你不能谈论性能。 你需要用什么样的实验devise和统计工具来自信地说出结果是有意义的? 物理系统(如计算机graphics学)的模拟通常涉及随机方法。 程序员经常遇到的其他问题是否会受益于统计方法?

为什么比list()更快?

我最近比较了[]和list()的处理速度,并惊讶地发现[]比list()运行速度快三倍以上。 我用{}和dict()进行了相同的testing,结果几乎相同: []和{}都花费了大约0.128秒/百万个周期,而list()和dict()花费了大约0.428秒/百万个周期。 为什么是这样? list() , dict() , tuple() , str() )的时候, []和{} (也许是()和'' )会立即传回一些空的库存文字的副本。完全去创造一个对象,不pipe他们是否真的有元素? 我不知道这两种方法有什么不同,但我很想知道。 我无法在文档或SO上find答案,而search空括号的结果却比我预期的更成问题。 我通过调用timeit.timeit("[]")和timeit.timeit("list()") , timeit.timeit("{}")和timeit.timeit("dict()")比较列表和字典,分别。 我正在运行Python 2.7.9。 我最近发现“ 为什么如果True比1更慢? ”,它比较了if True和if 1的性能,似乎涉及类似的文字与全局情景; 也许这也值得考虑。