其他分享
首页 > 其他分享> > 大量的低延迟http请求的异步与线程

大量的低延迟http请求的异步与线程

作者:互联网

我需要执行大量HTTP(对于金融应用,主机没有提供更好的API)请求(每秒约800个)并以低延迟(仅反序列化并比较一些请求)处理它们的响应(在JSON中,通常不超过1kb)值)以最终根据响应发出另一个请求(响应和下一个请求之间的时间不应超过1-2毫秒).

目前,我将传统的线程与同步请求一起使用,其中大约50%的线程仅在40-60秒后才执行请求,而其他50%的线程总是在请求
虽然这种方法可以很好地处理每秒约50-100个请求,但我体验到每秒响应800个请求到线程的下一个请求之间的时间太长(通常为50-200ms).

我想解决的问题是:
1.异步操作是否是更好的方法?
阅读有关Asyncs的可伸缩性和响应性的大量内容,但不确定其对低延迟的好处(上下文切换,任务创建等).
2.我可以调整线程方法吗? (独立于任务1)我在想一些事情,例如在当前处理响应时为线程赋予更高的优先级(高于.ThreadPriority),但这并没有真正奏效/也许在处理过程中完全停止了其他线程的执行
(3.我应该使用哪个HTTP请求的类/库?)当前正在使用HttpWebRequests,它比测试中的HttpClient更快一些,还是应该使用其他东西?

任何帮助将不胜感激

解决方法:

我仔细研究并解决了这个确切的问题(用于从服务器并行下载许多XML文件),根据我的经验,使用Async的速度大约快20%-50%,具体取决于文件的大小.

不幸的是,这是几个月前的事,但是我在每个请求中都使用了WebClient并只是执行了WebClient.DownloadString,因此,如果这是您的用例,则可能对您有用.

真正的答案是:尝试两者并对其进行配置.在这两者之间切换并不难!

标签:multithreading,asynchronous,http,synchronous,c
来源: https://codeday.me/bug/20191121/2051386.html