On Monday, 3 April 2023 at 22:24:18 UTC, Steven Schveighoffer
wrote:
So for example, if you have:
```d
foreach(i; iota(0, 2_000_000).parallel)
{
runExpensiveTask(i);
}
```
The foreach is run on the main thread, gets a `0`, then hands
off to a task thread `runExpensiveTask(0)`. Then it gets a `1`,
and hands off to a task thread `runExpensiveTask(1)`, etc. The
iteration is not expensive, and is not done in parallel.
On the other hand, what you *shouldn't* do is:
```d
foreach(i; iota(0, 2_000_000).map!(x =>
runExpensiveTask(x)).parallel)
{
}
```
as this will run the expensive task *before* running any tasks.
I don't understand what `foreach()` does :)
```d
import std.range, std.algorithm : map;
import std.stdio, std.parallelism;
//import sdb.sequences : RowlandSequence_v2;/*
struct RowlandSequence_v2 {
import std.numeric : gcd;
long b, r, a = 3;
enum empty = false;
auto front() => a;
void popFront() {
long result = 1;
while(result == 1) {
result = gcd(r++, b);
b += result;
}
a = result;
}
}//*/
enum BP : long {
// s, f, r, b = 7, /* <- beginning
s = 178, r = 1993083484, b = 5979250449,//*/
len = 190
}
void main()
{
with(BP) {
long[len] arr;
auto range = RowlandSequence_v2(b, r);
s.iota(len)
.map!((a){
range.popFront();
return arr[a] = range.front();
}
)
.parallel
.writeln;
}
} /* PRINTS:
ParallelForeach!(MapResult!(__lambda3,
Result))(std.parallelism.TaskPool, [5, 3, 73, 157, 7, 5, 3, 13,
3986167223, 3, 7, 73], 1)
*/
```
Is it necessary to enclose the code in `foreach()`? I invite Ali
to tell me! Please explain why parallel isn't running.
"Ben anlamıyor, foreach ne yapıyor 😀 Kodu `foreach()` içine almak
şart mı? Ali'yi davet ediyorum, bana anlatması için! Paralel()
niye çalışmıyor, lütfen açıklayın hocam. Mümkünse Türkçe!" in
Turkish.
SDB@79