Azure 上的并行处理
Parallel Processing on Azure
我们正在尝试并行触发两个命令以尝试加快数据的 return,但看起来进程只是在排队。 运行 单独处理这些进程的累积时间等于 运行 同时处理它们。直到第一个数据集 return 编辑第二个数据集。
任何人都可以解释一下情况吗?
谢谢,
我会附上一个例子。
Thread GetResult1Thread = new Thread(new ThreadStart(GetResult1));
GetResult1Thread.IsBackground = true;
GetResult1Thread.Start();
Thread GetResult2Thread = new Thread(new ThreadStart(GetResult2));
GetResult2Thread.IsBackground = true;
GetResult2Thread.Start();
}
public void GetResult1()
{
//Blocks time untill database request is complete
//Total Execution time 1 min
DataSet ds = db.getSPDataSet("getCBRWeeklyPercentageBody", "@JobID",JobID,
"@StartDate", StartDate, "@ResourcingGradeIDs",
ResourceID, "@StaffIds", StaffIds);
}
}
public void GetResult2()
{
//Thread pending do to Result1 is not released from database
//1 min delayed response
DataSet ds = db.getSPDataSet("getCBRWeeklyPercentageHeader",
"@JobID", JobID, "@StartDate", StartDate,
"@ResourcingGradeIDs", ResourceID, "@StaffIds", StaffIds);
}
And the JS------------------------------------------
//Request 1
$.ajax({
url: "api/SaveDefaultSettings",
data: {
},
type: "POST",
cache: false,
async: true
success: function (data) {
//Default save result
//Get Active Activity List
ResourceHours = [];
GetDefaultData();
selectedRows = SaveData;
ResourceHours = data;
var spl = StartDate.split("-")
if (spl[1].length == 1) {
spl[1] = "0" + spl[1];
}
StartDate = spl[2] + "/" + spl[1] + "/" + spl[0];
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
//Request 2
$.ajax({
url: "api/GetResources",
data: { JobID: JobID, StartDate: StartDate },
type: "POST",
cache: false,
async: true
success: function (data) {
// CallProgressDialog("Processing", "Please wait while data is loading.");
Resources = [];
Resources = data;
Populate();
$(".QuantimDialog_Button0").click();
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
出于测试目的,您能否创建一个更简单的案例?至少减少 DB 依赖将消除建立 DB 连接和执行 SP 的需要,其中可能有一些内部锁定。
另请注意,浏览器对并发连接数有限制() as well as .NET application(https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=vs.110).aspx) and the server itself (Max Outgoing Socket Connections in .NET/Windows Server)
测试中的变量越少-越有可能缩小瓶颈
这是一种老式的并行处理方式。现在你可以对它们使用 Async stuff built into .Net. Just start two tasks and do an WhenAll。
我们正在尝试并行触发两个命令以尝试加快数据的 return,但看起来进程只是在排队。 运行 单独处理这些进程的累积时间等于 运行 同时处理它们。直到第一个数据集 return 编辑第二个数据集。
任何人都可以解释一下情况吗?
谢谢,
我会附上一个例子。
Thread GetResult1Thread = new Thread(new ThreadStart(GetResult1));
GetResult1Thread.IsBackground = true;
GetResult1Thread.Start();
Thread GetResult2Thread = new Thread(new ThreadStart(GetResult2));
GetResult2Thread.IsBackground = true;
GetResult2Thread.Start();
}
public void GetResult1()
{
//Blocks time untill database request is complete
//Total Execution time 1 min
DataSet ds = db.getSPDataSet("getCBRWeeklyPercentageBody", "@JobID",JobID,
"@StartDate", StartDate, "@ResourcingGradeIDs",
ResourceID, "@StaffIds", StaffIds);
}
}
public void GetResult2()
{
//Thread pending do to Result1 is not released from database
//1 min delayed response
DataSet ds = db.getSPDataSet("getCBRWeeklyPercentageHeader",
"@JobID", JobID, "@StartDate", StartDate,
"@ResourcingGradeIDs", ResourceID, "@StaffIds", StaffIds);
}
And the JS------------------------------------------
//Request 1
$.ajax({
url: "api/SaveDefaultSettings",
data: {
},
type: "POST",
cache: false,
async: true
success: function (data) {
//Default save result
//Get Active Activity List
ResourceHours = [];
GetDefaultData();
selectedRows = SaveData;
ResourceHours = data;
var spl = StartDate.split("-")
if (spl[1].length == 1) {
spl[1] = "0" + spl[1];
}
StartDate = spl[2] + "/" + spl[1] + "/" + spl[0];
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
//Request 2
$.ajax({
url: "api/GetResources",
data: { JobID: JobID, StartDate: StartDate },
type: "POST",
cache: false,
async: true
success: function (data) {
// CallProgressDialog("Processing", "Please wait while data is loading.");
Resources = [];
Resources = data;
Populate();
$(".QuantimDialog_Button0").click();
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
出于测试目的,您能否创建一个更简单的案例?至少减少 DB 依赖将消除建立 DB 连接和执行 SP 的需要,其中可能有一些内部锁定。
另请注意,浏览器对并发连接数有限制() as well as .NET application(https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=vs.110).aspx) and the server itself (Max Outgoing Socket Connections in .NET/Windows Server)
测试中的变量越少-越有可能缩小瓶颈
这是一种老式的并行处理方式。现在你可以对它们使用 Async stuff built into .Net. Just start two tasks and do an WhenAll。