import std.stdio, std.datetime, std.parallelism, core.thread;
struct cArr {
int[] Array;
void calc() {
long result = 0;
foreach (num; Array) {
Thread.sleep(dur!("msecs")(50));
result += num;
}
writeln(result);
}
}
void performMultithreading() {
auto currTime = Clock.currTime();
int[][] arr = [
[500, 500, 500],
[500, 500, 500],
[500, 500, 500],
[500, 500, 500]
];
auto datas = [cArr(arr[0]), cArr(arr[1]), cArr(arr[2]), cArr(arr[3])];
foreach (data; parallel(datas))
data.calc();
writeln("Duration with multithreading: ", Clock.currTime() - currTime);
}
void performSinglethreading() {
auto currTime = Clock.currTime();
int[][] arr = [
[500, 500, 500],
[500, 500, 500],
[500, 500, 500],
[500, 500, 500]
];
auto datas = [cArr(arr[0]), cArr(arr[1]), cArr(arr[2]), cArr(arr[3])];
foreach (data; datas)
data.calc();
writeln("Duration with singlethreading: ", Clock.currTime() - currTime);
}
void main() {
performSinglethreading();
performMultithreading();
}
aW1wb3J0IHN0ZC5zdGRpbywgc3RkLmRhdGV0aW1lLCBzdGQucGFyYWxsZWxpc20sIGNvcmUudGhyZWFkOwoKc3RydWN0IGNBcnIgewoKCWludFtdIEFycmF5OwoKCXZvaWQgY2FsYygpIHsKCgkJbG9uZyByZXN1bHQgPSAwOwoJCWZvcmVhY2ggKG51bTsgQXJyYXkpIHsKCQkJVGhyZWFkLnNsZWVwKGR1ciEoIm1zZWNzIikoNTApKTsKCQkJcmVzdWx0ICs9IG51bTsKCQl9CgoJCXdyaXRlbG4ocmVzdWx0KTsKCX0KfQoKdm9pZCBwZXJmb3JtTXVsdGl0aHJlYWRpbmcoKSB7CgoJYXV0byBjdXJyVGltZSA9IENsb2NrLmN1cnJUaW1lKCk7CgoJaW50W11bXSBhcnIgPSBbCgkJWzUwMCwgNTAwLCA1MDBdLAoJCVs1MDAsIDUwMCwgNTAwXSwKCQlbNTAwLCA1MDAsIDUwMF0sCgkJWzUwMCwgNTAwLCA1MDBdCgldOwoKCWF1dG8gZGF0YXMgPSBbY0FycihhcnJbMF0pLCBjQXJyKGFyclsxXSksIGNBcnIoYXJyWzJdKSwgY0FycihhcnJbM10pXTsKCglmb3JlYWNoIChkYXRhOyBwYXJhbGxlbChkYXRhcykpCgkJZGF0YS5jYWxjKCk7CgoJd3JpdGVsbigiRHVyYXRpb24gd2l0aCBtdWx0aXRocmVhZGluZzogIiwgQ2xvY2suY3VyclRpbWUoKSAtIGN1cnJUaW1lKTsKfQoKCnZvaWQgcGVyZm9ybVNpbmdsZXRocmVhZGluZygpIHsKCglhdXRvIGN1cnJUaW1lID0gQ2xvY2suY3VyclRpbWUoKTsKCglpbnRbXVtdIGFyciA9IFsKCQlbNTAwLCA1MDAsIDUwMF0sCgkJWzUwMCwgNTAwLCA1MDBdLAoJCVs1MDAsIDUwMCwgNTAwXSwKCQlbNTAwLCA1MDAsIDUwMF0KCV07CgoJYXV0byBkYXRhcyA9IFtjQXJyKGFyclswXSksIGNBcnIoYXJyWzFdKSwgY0FycihhcnJbMl0pLCBjQXJyKGFyclszXSldOwoKCWZvcmVhY2ggKGRhdGE7IGRhdGFzKQoJCWRhdGEuY2FsYygpOwoKCXdyaXRlbG4oIkR1cmF0aW9uIHdpdGggc2luZ2xldGhyZWFkaW5nOiAiLCBDbG9jay5jdXJyVGltZSgpIC0gY3VyclRpbWUpOwp9Cgp2b2lkIG1haW4oKSB7CgoJcGVyZm9ybVNpbmdsZXRocmVhZGluZygpOwoJcGVyZm9ybU11bHRpdGhyZWFkaW5nKCk7Cn0=