[Mono-list] Fwd: Threading and IO problem

Yanko Hernández Álvarez yhdezalvarez at gmail.com
Fri Mar 7 09:27:32 EST 2008


>  later today I will Test with 8 processes instead of 8 threads. That
>  way, a process garbage collection won't affect the 7 others. If I'm
>  right  the processor usage should be 100% on all processors. Let see

done :-)

MultipleReader.cs
--------------
using System;
using System.Diagnostics;
using System.Threading;

namespace MultipleReader
{
	class Program
	{
		static void Main(string[] args)
		{
			Thread[] Threads = new Thread[Environment.ProcessorCount];
			for (int Idx = 0; Idx < Threads.Length; Idx++)
			{
				MyThread T = new MyThread(args[0]);
				Threads[Idx] = new Thread(new ThreadStart(T.ThreadEntry));
			}
			foreach (Thread T in Threads)
				T.Start();
			foreach (Thread T in Threads)
				T.Join();
		}
	}

	class MyThread
	{
		private string FileName;

		public MyThread(string FileName)
		{
			this.FileName = FileName;
		}

		public void ThreadEntry()
		{
			Process myProcess = new Process();
			// pe-format installed, no need to call mono directly
			myProcess.StartInfo.FileName = "Reader.exe";
			myProcess.StartInfo.Arguments = FileName;
			myProcess.StartInfo.UseShellExecute = false;
			myProcess.Start();
			myProcess.WaitForExit();
		}
	}
}
--------------
Reader.cs
--------------
using System.IO;

namespace Reader
{
	class Program
	{
		static void Main(string[] args)
		{
			string Str;
			using (StreamReader SR = new StreamReader(args[0]))
				while ((Str = SR.ReadLine()) != null)
					;
		}
	}
}
--------------

Top output (3 samples)
--------------
top - 09:17:44 up 9 days, 19:30,  4 users,  load average: 3.02, 1.92, 1.42
Tasks:   9 total,   8 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s): 95.5%us,  4.5%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4002052k total,  2157076k used,  1844976k free,      592k buffers
Swap:  4000176k total,      188k used,  3999988k free,  1390592k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
22745 root      20   0 41700 6480 3152 R  104  0.2   0:16.41
Reader.exe
22749 root      20   0 41700 6480 3148 R  101  0.2   0:17.07
Reader.exe
22746 root      20   0 41700 6488 3152 R   98  0.2   0:16.80
Reader.exe
22750 root      20   0 41700 6492 3152 R   98  0.2   0:16.80
Reader.exe
22751 root      20   0 41700 6484 3152 R   98  0.2   0:17.04
Reader.exe
22752 root      20   0 41700 6492 3152 R   95  0.2   0:16.84
Reader.exe
22747 root      20   0 41700 6496 3152 R   88  0.2   0:16.12
Reader.exe
22748 root      20   0 41700 6496 3152 R   85  0.2   0:16.27
Reader.exe
22733 root      20   0  506m 9108 3556 S    0  0.2   0:00.18
MultipleReader.


top - 09:17:45 up 9 days, 19:30,  4 users,  load average: 3.02, 1.92, 1.42
Tasks:   9 total,   8 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s): 95.1%us,  4.9%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4002052k total,  2157076k used,  1844976k free,      592k buffers
Swap:  4000176k total,      188k used,  3999988k free,  1390592k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
22750 root      20   0 41700 6484 3152 R  104  0.2   0:17.12
Reader.exe
22746 root      20   0 41700 6480 3152 R  101  0.2   0:17.11
Reader.exe
22752 root      20   0 41700 6484 3152 R  101  0.2   0:17.15
Reader.exe
22745 root      20   0 41700 6492 3152 R   98  0.2   0:16.71
Reader.exe
22749 root      20   0 41700 6492 3148 R   98  0.2   0:17.37
Reader.exe
22751 root      20   0 41700 6496 3152 R   98  0.2   0:17.34
Reader.exe
22748 root      20   0 41700 6484 3152 R   85  0.2   0:16.53
Reader.exe
22747 root      20   0 41700 6492 3152 R   82  0.2   0:16.37
Reader.exe
22733 root      20   0  506m 9108 3556 S    0  0.2   0:00.18
MultipleReader.


top - 09:17:45 up 9 days, 19:30,  4 users,  load average: 3.02, 1.92, 1.42
Tasks:   9 total,   8 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s): 94.7%us,  5.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4002052k total,  2157108k used,  1844944k free,      592k buffers
Swap:  4000176k total,      188k used,  3999988k free,  1390592k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
22745 root      20   0 41700 6492 3152 R  101  0.2   0:17.02
Reader.exe
22751 root      20   0 41700 6504 3152 R  101  0.2   0:17.65
Reader.exe
22746 root      20   0 41700 6492 3152 R   98  0.2   0:17.41
Reader.exe
22747 root      20   0 41700 6488 3152 R   98  0.2   0:16.67
Reader.exe
22750 root      20   0 41700 6496 3152 R   98  0.2   0:17.42
Reader.exe
22752 root      20   0 41700 6496 3152 R   98  0.2   0:17.45
Reader.exe
22749 root      20   0 41700 6496 3148 R   88  0.2   0:17.64
Reader.exe
22748 root      20   0 41700 6488 3152 R   85  0.2   0:16.79
Reader.exe
22733 root      20   0  506m 9108 3556 S    0  0.2   0:00.18
MultipleReader.
--------------

Top is showing some artifacts  when is measuring the individual CPU
time (that's normal).

look at the aggregated CPU usage (3rd row on each sample): 0.0%id

Ok, then there is one question left: is there any way to program this
using threads without the GC interfering? any ideas?

Best regards
        Yanko


More information about the Mono-list mailing list