Skip to content

Instantly share code, notes, and snippets.

@JeremyMorgan
Last active December 22, 2015 09:38
Show Gist options
  • Save JeremyMorgan/6452791 to your computer and use it in GitHub Desktop.
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
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