我使用ASP.NET MVC4中的异步方法设置了这篇MSDN文章中的示例,并进行了一些基准测试,看看我会得出什么结论。
我设置了两个控制器sync
和Async
,并使用加载器工具进行了一些测试。加载器工具在一分钟内只发送50-60个常量请求。每个控制器调用相同的webservice 3次。每个代码如下:
public ActionResult Sync()
{
var g1 = GetGizmos("url1");
var g2 = GetGizmos("url2");
var g3 = GetGizmos("url3");
return Content("");
}
public object GetGizmos(string uri)
{
using (WebClient webClient = new WebClient())
{
return JsonConvert.DeserializeObject(
webClient.DownloadString(uri)
);
}
}
public async Task<ActionResult> Async()
{
var g1 = GetGizmosAsync("url1");
var g2 = GetGizmosAsync("url2");
var g3 = GetGizmosAsync("url3");
var a1 = await g1;
var a2 = await g2;
var a3 = await g3;
return Content("");
}
public async Task<object> GetGizmosAsync(string uri)
{
using (HttpClient httpClient = new HttpClient())
{
var response = await httpClient.GetAsync(uri);
return (await response.Content.ReadAsAsync<object>());
}
}
System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
webClient.DownloadString(uri)
到
var response = await httpClient.GetAsync(uri);
return (await response.Content.ReadAsAsync<object>());
也许你可以试试
webclient.DownloadStringAsync(uri)
您可以优化异步代码以
await Task.Run(() => {
// just run your sync code here
var g1 = GetGizmos("url1");
var g2 = GetGizmos("url2");
var g3 = GetGizmos("url3");
return Content("");
});
问题内容: 由于Servlet 3.0 支持异步处理。使用始终异步处理会更好吗?或者在什么情况下同步处理更好? 问题答案: 异步Servlet带来的最大好处是HTTP push ,在该服务器中,服务器可以在选择时向客户端发送信息,而不是在客户端请求时将信息发送回客户端。在异步Servlet之前,这将需要长时间运行的HTTP连接,每个HTTP连接都会束缚服务器线程,这是非常低效的。这个新模型使服务器
主要内容:同步时钟,实例,实例,异步时钟关键词: 同步,异步 由第 3 章可知,当触发器输入端的数据和触发器的时钟不相关时,很容易导致电路时序不满足。本章主要解决模块间可导致时序 violation 的异步问题。 关于异步与同步的定义,许多地方都有介绍,细节上也有所差异。本章主要的关注点是解决异步问题的方法,而不关心为什么会出现异步时钟,也不关心异步电路的具体结构,仅从异步时钟的时序结果去分析解决问题。 同步时钟 数字设计中,一般认为,
异步控制(Sync Controller) 概述 众所周知,在分布式计算系统中,由于多个计算节点计算进度不可能完全一致,会导致了在汇总结果时需要等待那些计算速度较慢的节点,即慢节点会拖慢整个计算任务的进度,浪费计算资源。 考虑到机器学习的特殊性,系统其实可以适当放宽同步限制,没有必要每一轮都等待所有的计算节点完成计算,部分跑得快的Worker,其实完全可以先把训练好的增量Push上去,然后进行下一
一个问题是,我必须使整个ActionMethod异步,我不确定这会有什么影响。当前同步的基本模式如下: 有什么想法吗?
在我看来,将myObject序列化为JSON和f的Spring代码将同时尝试在get()返回时访问myObject。除了返回MyObject的深度副本之外,还有什么方法可以防止这种情况发生吗?
根据我的测试计划,如果我的理解正确,那么第一个用户将登录,请求将继续发送到User1的“if controller”。在这里,请求将等待,直到5个请求按照同步计时器中的设置排队,所有5个请求将一次性发送到服务器。然后第二个用户将登录,第二个用户的请求将被处理,依此类推。 如果未使用同步计时器,则上述测试计划将成功执行。一旦我使用了同步计时器,我的测试计划就会无限期地继续执行。 根据我对同步计时器的