public static CustomThreadPool CreatePool(PoolType type,ThreadPoolSettings config, CancellationToken tk) { switch (type) { case PoolType.Custom1: return new CustomThreadPool1(config, tk); case PoolType.Custom2: return new CustomThreadPool2(config, tk); case PoolType.Custom3: return new CustomThreadPool3(config, tk); default: return new DefaultThreadPool(config, tk); } }
public PoolWorker(ThreadPoolSettings settings, CancellationToken cancelToken) { _settings = settings; _cancelToken = cancelToken; Name = Guid.NewGuid().ToString(); _status = PoolWorkerStatus.Ready; _timer = new System.Timers.Timer() { AutoReset = true, Enabled = true, }; _timer.Interval = settings.ThreadIdleTimeout.TotalMilliseconds; _timer.Elapsed += OnIdleTimeoutCheckEvent; StartThread(); }
/// <summary> /// Creates new threadpool with given settings and cancel token values /// </summary> /// <param name="settings">thread pool runtime settings</param> /// <param name="cancelToken">cancel token to indicate or send stop event to the pool</param> public CustomThreadPool3(ThreadPoolSettings settings, CancellationToken cancelToken) : base(settings, cancelToken) { _settings = settings; _linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cancelToken); this._poolStopToken = _linkedCts.Token; _tokenRegister = _poolStopToken.Register(OnPoolCancelRequested); //start minimum required threads immediately _mThreads = new Thread[_settings.MaxThreads]; _mThreadLocalQueues = new ThreadLocalStealQueue<ThreadPoolWorkItem>[_settings.MaxThreads]; for (int i = 0; i < _settings.MinThreads; i++) { StartNewThread(true); } EtwLogger.Log.PoolStarted(Name, _settings.MinThreads, _settings.MaxThreads); }
public CustomThreadPool2(ThreadPoolSettings settings, CancellationToken cancelToken) : base(settings, cancelToken) { if (settings == null) throw new ArgumentNullException("settings"); this._settings = settings; _workerKeys = new List<string>(settings.MaxThreads); //initialize min threads immediately for (int i = 0; i < settings.MinThreads; i++) { var w = AllocDelegate(); w.IsPermenant = true; _workerThreads.TryAdd(w.Name, w); _workerKeys.Add(w.Name); } _linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cancelToken); this._poolStopToken = _linkedCts.Token; _tokenRegister = _poolStopToken.Register(OnPoolCancelRequested); EtwLogger.Log.PoolStarted(Name, _settings.MinThreads, _settings.MaxThreads); }
/// <summary> /// Creates custom worker thread pool with default name and given settings. /// </summary> protected CustomThreadPool(ThreadPoolSettings settings, CancellationToken cancelToken) { this.Name = string.Format(CultureInfo.InvariantCulture, "ThreadPool-{0}", Guid.NewGuid()); }