Beispiel #1
0
 internal CPUWorkUnit(int coreNumber, int sliceNumber, CPUWorkUnit previous, int slicesPerCore)
 {
     this.workUnitThread  = new Thread(WorkerMethod);
     this.cpuCoreNumber   = coreNumber;
     this.coreSliceNumber = sliceNumber;
     this.slicesPerCore   = slicesPerCore;
 }
Beispiel #2
0
        public void PostComponentInit(IComponentDirectory directory)
        {
            concurrencyCount = (uint)(System.Environment.ProcessorCount * workerThreadsPerCore);

            for (int i = 0; i < System.Environment.ProcessorCount; ++i)
            {
                CPUWorkUnit masterWorkUnit = null;

                for (int j = 0; j < workerThreadsPerCore; ++j)
                {
                    IComponentConfiguration config = new StandardConfiguration();
                    config.Values["CoreNumber"]  = new Simple(i);
                    config.Values["SliceNumber"] = new Simple(j);
                    if (masterWorkUnit != null)
                    {
                        config.Values["Previous"] = new Simple(masterWorkUnit);
                    }
                    config.Values["SlicesPerCore"] = new Simple((int)workerThreadsPerCore);

                    ConfiguredComponent component = new ConfiguredComponent(
                        typeof(CPUWorkUnit).FullName,
                        config);

                    CPUWorkUnit wu =
                        Components.ConfigureInlineComponent(component) as CPUWorkUnit;

                    this.registry.Register(wu);

                    if (j == 0)
                    {
                        masterWorkUnit = wu;
                    }
                }
            }

            controlThread = new Thread(Controller);

            controlThreadTimer =
                new Timer(Schedule, null, TimeSpan.Zero, DefaultTimeSlice);
        }