Witam,
Kod jest taki:
class Program
{
static StreamWriter file = new StreamWriter("plik.txt");
static void Main(string[] args)
{
Parallel.For(0, 100, new ParallelOptions() {MaxDegreeOfParallelism = 100 }, i => AddText(i));
Console.WriteLine("Zamykam plik");
file.Close();
}
static void AddText(int i)
{
Thread.Sleep(1000);
lock (file)
{
file.WriteLine("Zapisałem: " + i.ToString());
}
Console.WriteLine(i);
}
}
Pytanie: dlaczego wykonyują się jednocześnie tylko 3 zadania? Dam ograniczenie do 1 - mam odopwiednik zwykłego for, ograniczenie do 2 - 2 zadania jednocześnie. Natomiast więcej niż 3 się nie da. Czy jest to jakieś odgórne ograniczenie i muszę sam obsłużyć tworzenie wątków w celu zwiększenia tego limitu?
Według dokumentacji, powinno tu być 100 zadań jednocześnie, a kod ma się wykonać w 1 sekundę + narzut.
[edit]
Hm doczytałem gdzieś, że to zależy od liczby rdzeni procesora. Jak więc wymusić większą liczbę wątków (oprócz tworzenia własnego TaskShedulera) ?