示例#1
0
        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);
            }
        }
示例#2
0
        // 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);
            }
        }
示例#3
0
        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);
        }
示例#4
0
 public void startSplit(IMap map, string filename, WorkStruct job)
 {
     new Thread(() => keepWorkingThread(map, filename, job)).Start();
 }