public void submitJob(IMap map, string filename, int numSplits, int numberOfLines) { slaves.Add(((IWorker)Activator.GetObject(typeof(IWorker), "tcp://localhost:8086/tracker"))); int step = numberOfLines / numSplits; for (int i = 0, index = 0; i < numSplits; i++, index += step) { WorkStruct ws = new WorkStruct(); ws.id = i; ws.lower = index; ws.higher = index + step; queue.Enqueue(ws); } foreach (IWorker slave in slaves) { slave.startSplit(map, filename, (WorkStruct)queue.Dequeue()); } while (queue.Count != 0) { Thread.Sleep(1000); } }
// Main function for threads. public void ThreadGetWork() { WorkStruct work = null; while (true) { lock (this) { while (requestedTask.Count == 0) { Monitor.Wait(this); } work = requestedTask.Dequeue(); } work.CallbackFunction(work.CallbackArgument); } }
public void keepWorkingThread(IMap map, string filename, WorkStruct job) { ISet <KeyValuePair <String, String> > megaList = new HashSet <KeyValuePair <String, String> >(); String[] splits; do { megaList.Clear(); splits = client.getSplit(job.lower, job.higher); foreach (String s in splits) { megaList.UnionWith(map.Map(s)); } client.storeSplit(megaList, job.id); job = ((IJobTracker)Activator.GetObject(typeof(IJobTracker), "tcp://localhost:8086/tracker")).hazWorkz(); } while (job.id != -1); }
public void startSplit(IMap map, string filename, WorkStruct job) { new Thread(() => keepWorkingThread(map, filename, job)).Start(); }