internal CPUWorkUnit(int coreNumber, int sliceNumber, CPUWorkUnit previous, int slicesPerCore) { this.workUnitThread = new Thread(WorkerMethod); this.cpuCoreNumber = coreNumber; this.coreSliceNumber = sliceNumber; this.slicesPerCore = slicesPerCore; }
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); }