我已经做了一些使用Apache Bench来分析我的代码响应时间的实验,但它并没有为我生成正确的数据类型.我希望这里的好人有想法.
具体来说,我需要一个工具
我知道ab -e,它将数据打印到文件.问题是这只打印了分位数据,这很有用,但不是我需要的.该ab -g选项可以工作,除了它不打印亚秒数据,这意味着我没有我需要的分辨率.
我写了几行Python来做,但是httplib非常低效,结果没用.一般来说,我需要比纯Python更精确的精度.如果有人对Python可以使用的库有建议,我会全力以赴.
我需要一些高性能,可重复且可靠的东西.
我知道,我的一半回答将是"互联网延迟使得那种详细的测量毫无意义".在我的特定用例中,这不是真的.我需要高分辨率时序细节.实际使用我的HPET硬件的东西会很棒.
由于答案和观点数量较少,因此在这里投入了赏金.
由于服务器和客户端之间的地理距离,网络延迟可能会有很大差异.所以我想获得"纯粹"的要求.处理没有网络延迟的服务时间.
我希望将网络延迟作为TCP连接时间.据我所知,这个时间在很大程度上取决于网络.
主要想法是计算:
我将TCP连接除以2,因为事实上有2个请求 - 响应(3次握手).
我有两个问题:
PS:作为一个工具,我使用Erlang的gen_tcp.我可以显示代码.
我有一个处理一些查询的方法A().这个方法,从开括号到返回语句之前,时间为+/- 70ms.其中50%来自打开连接,大约20%来自实际查询,5-10%用于某些内存访问,其余(可能)用于处理连接,命令和阅读器.
虽然用于处理连接的这一大块时间足够烦人,但更让我困扰的是当我从方法B()调用A()时:
B()
{
var timer = Stopwatch.Startnew()
A();
timer.Stop(); // elapsed: +/- 250ms
Debugger.Break();
}
Run Code Online (Sandbox Code Playgroud)
又增加了180毫秒的延迟,我似乎无法弄清楚原因.我已经尝试过A返回null,它什么都没改变.
唯一的磁盘I/O和网络发生在A中.我认为从磁盘和网络到本地内存的传输应该发生在A中,因此从B调用A不应该受此影响,但显然这不是案子?这是我遇到的网络延迟吗?如果是这样,那么为什么当我让B返回null时也会发生这种情况呢?
我目前没有其他解释......
A大致如下实现,就像访问数据库的任何简单方法一样.这是设计,但显示了基本的想法和流程:
A()
{
var totalTimer = Stopwatch.StartNew();
var stuff = new Stuffholder();
using(connection)
{
using(command)
{
using(reader)
{
// fill 'stuff'
}
}
}
totalTimer.Stop(); // elapsed: +/- 70ms
return stuff;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在测试来自黑客高兴书籍的divs10函数吞吐量,在我的jdk 1.7 64位版本21和i7 intel盒式处理器上用java编码:7 vendor_id:GenuineIntel cpu系列:6型号:26型号名称:Intel(R)Core(TM)i7 CPU 920 @ 2.67GHz
我想知道为什么默认的java运算符/比黑客的喜悦书中的divs10函数更快,结果显示divs10比"/"运算符慢3倍,令我惊讶.
任何人都可以告诉我,是否有任何花哨的内在jvm可以使用?
源代码如下.
public class div10 {
public static final int divs10(int n) {
int q, r;
n = n + (n >> 31 & 9);
q = (n >> 1) + (n >> 2);
q += q >> 4;
q += q >> 8;
q += q >> 16;
q = q >> 3;
r = n - ((q << 3) + (q << 1));
return q + ((r …Run Code Online (Sandbox Code Playgroud) 问题
我有一个系统(使用C++ 11)与不规则事件的生产者:( P例如,它可能是UI事件,或者它可能通过TCP/IP套接字接收金融交易数据等).每个事件都附带一个小数据包.
然后,我有一个数字"工蜂"的:B1,B2,B3,...每一种确实的事件的自己加工P饲料他们.他们的处理可能很快,但可能需要很长时间,这就是为什么计划是在自己的线程中运行每个工蜂.此外,每个工蜂需要每N秒运行一次不同的功能(例如N = 60,但它也可能因工蜂而异).此常规处理应始终与事件处理串行完成,永远不要在不同的线程上完成.
最后,一些工蜂也可能会从其他生产活动(P2,P3等),但如果复杂的事情,我总是可以有P1,P2等喂到中央P,他们的工作是将所有事件发送到工蜂.
问题
这种系统的最佳设计是什么?低延迟和高效率是最佳的主要标准.可靠性也很重要:每个B事件都必须接收每个事件(即使它们是批量生成的,因为它当时很忙),如果一个B事件崩溃,它不应该影响其他事件.
如果重要:假设1-64个工蜂,4-8个硬件线程,事件之间的平均时间为10秒,事件之间的最短时间为0.2秒,典型的常规功能是每秒N=60.但如果理想的设计对任何这些标准都敏感,我想了解如何.
注意:如果工蜂可以保证永远不会抛出异常,那是否会改变最佳设计的选择?(感觉这将是无关的,但我想我会把它提起来.)
注意:蜜蜂可能比硬件线程更多; 假设这是另一个问题.(例如,延迟可能对某些工蜂很重要,并且可能会给他们自己的线程,而其他人可能会被告知共享一个线程.)
想法一:等到事件或超时
每个P都有互斥和条件.当它获得新数据时,它会发出信号.
每个工蜂使用theCondition.wait_until(lock,timeout)这里timeout是下一个需要醒来做定期处理的时间.它检查返回值以查看它是否已发出信号或超时.
这里的缺点似乎是它只是一个信号,没有数据.所以我需要每个B人获得另一个锁,以便对数据队列进行读访问.通常他们都希望同时做到这一点,所以这变得很难看.
我也不清楚如果B需要花费很长时间处理某些事情并在它wait_until再次调用之前错过了几个事件会发生什么.
想法二:每个工人的数据队列
这里每个B都有一个带锁的队列.P获取写锁定,并添加数据项.B获得一个读锁定,以便在准备好时关闭每个项目.B因为有新数据,我仍然需要一些知道醒来的方法.
这里的缺点似乎是P线程需要循环遍历每个B以给它们数据.这会引入延迟,并且也会感到脆弱(例如,如果其中一个工蜂表现不佳).
想法三:期货
这个问题感觉非常适合未来. P创建一个std::promise,然后每个B …
我目前正在使用Java服务器端和as3客户端.我想知道是否有一个银弹来同步他们之间的时钟.在可变延迟和可变时钟速度之间,似乎每个数据包都需要一个时间戳.
谢谢!
我需要制作低延迟服务器,其中原始数据吞吐量不如处理数千个同时连接的能力重要.我不知道使用什么语言.Java更简单,开发将更快,更好的接口,我需要的所有+良好的网络支持(JAVA NIO和选择器类).但实际上我对java在编程方面没有多少经验,所以即使我读过java这样的东西今天不比原生C/C++慢,但仍然对性能有些怀疑,因为c/c ++被编译成二进制代码,但是java .class文件被解释,因此在翻译中必须有开销.
编辑:应用程序将是服务器实时支持Web应用程序(如聊天等)
我正在开始一个通过蓝牙进行无线MIDI连接的项目.据我所知,BT规范中没有定义MIDI配置文件.
我想知道你们中的一些人是否有兴趣分享关于使用MIDI而不是BT的最佳方式的经验,特别是关于延迟问题.
我的项目基于BT低能耗(BTLE),我现在正在尝试找到最好的BT配置文件,可能是串口RFCOMM现有配置文件,还是新的自定义配置文件?
任何提示将不胜感激.最好的杰罗姆
我想确认一下我是否正确理解这一点.当我在Chrome地址栏中输入"google.com"时遇到严重的延迟问题,但在我在其他浏览器中执行相同操作时却没有.我还下载了Canary,并在那里遇到同样的问题.我认为其他浏览器可能会重写URL客户端,避免前两个301和302错误.似是而非?
"待定"是否意味着该请求尚未得到满足?并且"(来自缓存)"是否意味着浏览器正在我的PC上查找该文件?
为"google.com"请求返回301错误需要21秒,然后返回302秒并将最终重定向返回到完整网址.这是否意味着处理此类请求的服务器真的负担过重?
为什么这些图片需要很长时间才能获取?59秒,还在等待?

google-chrome latency http-status-code-301 http-status-code-302
许多低延迟开发指南讨论了在特定地址边界上对齐内存分配:
https://github.com/real-logic/simple-binary-encoding/wiki/Design-Principles#word-aligned-access
http://www.alexonlinux.com/aligned-vs-unaligned-memory-access
但是,第二个链接是从2008年开始的.在2019年,在地址边界上调整内存是否仍能提高英特尔CPU的性能?我认为英特尔CPU不再会因访问未对齐地址而导致延迟损失?如果没有,在什么情况下应该这样做?我应该对齐每个堆栈变量吗?类成员变量?
有没有人有任何例子表明他们在调整内存方面取得了显着的性能提升?
latency ×10
java ×3
c ×2
c++ ×2
tcp ×2
apachebench ×1
benchmarking ×1
bluetooth ×1
c# ×1
c++11 ×1
events ×1
future ×1
http ×1
intrinsics ×1
math ×1
midi ×1
networking ×1
performance ×1
profiling ×1
python ×1
rfcomm ×1
sql-server ×1
x86 ×1