Last active
December 22, 2015 09:38
-
-
Save JeremyMorgan/6452791 to your computer and use it in GitHub Desktop.
Parallel Task demonstration - A demonstration of multithreading with the .Net Parallel Task Library
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.Diagnostics; | |
using System.Threading; | |
using System.Threading.Tasks; | |
class stringGen | |
{ | |
private readonly Random _rng = new Random(); | |
private const string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; | |
public void buildDummyFile(string fileName) | |
{ | |
string inputtext = RandomString(100000000); | |
writeFile(fileName, inputtext); | |
} | |
public string RandomString(int size) | |
{ | |
char[] buffer = new char[size]; | |
for (int i = 0; i < size; i++) | |
{ | |
buffer[i] = _chars[_rng.Next(_chars.Length)]; | |
} | |
return new string(buffer); | |
} | |
private void writeFile(string filename, string inputtext) | |
{ | |
TextWriter tw = new StreamWriter(filename); | |
tw.WriteLine(inputtext); | |
tw.Close(); | |
} | |
} | |
class threadTest | |
{ | |
public static void Main(string[] args) | |
{ | |
// start a timer | |
var watch = Stopwatch.StartNew(); | |
// create string generator object | |
stringGen sg1 = new stringGen(); | |
if (args.Length == 0) | |
{ | |
Console.WriteLine("\n\nUsage: threadtest [n]\n\nn = number of threads (1,2,4,8)\n"); | |
} | |
else | |
{ | |
int threads = Convert.ToInt32(args[0]); | |
switch (threads) | |
{ | |
case 1: | |
Console.WriteLine("Writing with a single thread"); | |
Console.WriteLine("Writing File 1"); | |
sg1.buildDummyFile("test1.txt"); | |
Console.WriteLine("Writing File 2"); | |
sg1.buildDummyFile("test2.txt"); | |
Console.WriteLine("Writing File 3"); | |
sg1.buildDummyFile("test3.txt"); | |
Console.WriteLine("Writing File 4"); | |
sg1.buildDummyFile("test4.txt"); | |
Console.WriteLine("Writing File 5"); | |
sg1.buildDummyFile("test5.txt"); | |
Console.WriteLine("Writing File 6"); | |
sg1.buildDummyFile("test6.txt"); | |
Console.WriteLine("Writing File 7"); | |
sg1.buildDummyFile("test7.txt"); | |
Console.WriteLine("Writing File 8"); | |
sg1.buildDummyFile("test8.txt"); | |
break; | |
case 2: | |
Console.WriteLine("Writing with 2 Threads"); | |
Parallel.Invoke(() => | |
{ | |
Console.WriteLine("Writing File 1"); | |
sg1.buildDummyFile("test1.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 2"); | |
sg1.buildDummyFile("test2.txt"); | |
}); | |
Parallel.Invoke(() => | |
{ | |
Console.WriteLine("Writing File 3"); | |
sg1.buildDummyFile("test3.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 4"); | |
sg1.buildDummyFile("test4.txt"); | |
}); | |
Parallel.Invoke(() => | |
{ | |
Console.WriteLine("Writing File 5"); | |
sg1.buildDummyFile("test5.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 6"); | |
sg1.buildDummyFile("test6.txt"); | |
}); | |
Parallel.Invoke(() => | |
{ | |
Console.WriteLine("Writing File 7"); | |
sg1.buildDummyFile("test7.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 8"); | |
sg1.buildDummyFile("test8.txt"); | |
} | |
); | |
break; | |
case 4: | |
Console.WriteLine("Writing with 4 Threads"); | |
Parallel.Invoke(() => | |
{ | |
Console.WriteLine("Writing File 1"); | |
sg1.buildDummyFile("test1.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 2"); | |
sg1.buildDummyFile("test2.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 3"); | |
sg1.buildDummyFile("test3.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 4"); | |
sg1.buildDummyFile("test4.txt"); | |
}); | |
Parallel.Invoke(() => | |
{ | |
Console.WriteLine("Writing File 5"); | |
sg1.buildDummyFile("test5.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 6"); | |
sg1.buildDummyFile("test6.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 7"); | |
sg1.buildDummyFile("test7.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 8"); | |
sg1.buildDummyFile("test8.txt"); | |
} | |
); | |
break; | |
case 8: | |
Console.WriteLine("Writing with 8 Threads"); | |
Parallel.Invoke(() => | |
{ | |
Console.WriteLine("Writing File 1"); | |
sg1.buildDummyFile("test1.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 2"); | |
sg1.buildDummyFile("test2.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 3"); | |
sg1.buildDummyFile("test3.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 4"); | |
sg1.buildDummyFile("test4.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 5"); | |
sg1.buildDummyFile("test5.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 6"); | |
sg1.buildDummyFile("test6.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 7"); | |
sg1.buildDummyFile("test7.txt"); | |
}, | |
() => | |
{ | |
Console.WriteLine("Writing File 8"); | |
sg1.buildDummyFile("test8.txt"); | |
} | |
); | |
break; | |
} | |
} | |
// stop timer | |
watch.Stop(); | |
Console.WriteLine("\n\nExecution Time: " + watch.ElapsedMilliseconds + " ms"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment