Dreamine.Threading 1.0.1
이 패키지는 .NET ThreadPool이나 Task Parallel Library를 대체하려는 목적이 아닙니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.Threading.Services.DreamineThreadManager 클래스 참조sealed

더 자세히 ...

Dreamine.Threading.Services.DreamineThreadManager에 대한 상속 다이어그램 :
Dreamine.Threading.Services.DreamineThreadManager에 대한 협력 다이어그램:

Public 멤버 함수

 DreamineThreadManager (IThreadCoreAllocator coreAllocator, IThreadCyclePolicy cyclePolicy, IDreamineThreadScheduler scheduler, IThreadAffinityService? affinityService=null, ITimerResolutionService? timerResolutionService=null, IDreamineLogger? logger=null)
IDreamineThreadJob Register (DreamineThreadOptions options, Func< CancellationToken, ValueTask > action)
void StartAll ()
void StopAll ()
async ValueTask StopAllAsync ()
bool Start (string threadName)
bool Stop (string threadName)
async ValueTask< bool > StopAsync (string threadName)
bool Pause (string threadName)
bool Resume (string threadName)
void PauseAll ()
void ResumeAll ()
bool TryGetThread (string threadName, out IDreamineThread? thread)
IReadOnlyList< IDreamineThreadGetThreads ()
IReadOnlyList< DreamineThreadInfoGetThreadInfos ()
void Dispose ()

Private 멤버 함수

IDreamineThreadRegisterOverflowJob (IDreamineThreadJob job)
void ThrowIfDisposed ()

Private 속성

readonly object _syncRoot = new()
readonly List< IDreamineThread_threads = new()
readonly IThreadCoreAllocator _coreAllocator
readonly IThreadCyclePolicy _cyclePolicy
readonly IDreamineThreadScheduler _scheduler
readonly? IThreadAffinityService _affinityService
readonly? ITimerResolutionService _timerResolutionService
readonly? IDreamineLogger _logger
bool _disposed

상세한 설명

기본 Dreamine 작업자 스레드 관리자 구현을 제공합니다.

DreamineThreadManager.cs 파일의 15 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ DreamineThreadManager()

Dreamine.Threading.Services.DreamineThreadManager.DreamineThreadManager ( IThreadCoreAllocator coreAllocator,
IThreadCyclePolicy cyclePolicy,
IDreamineThreadScheduler scheduler,
IThreadAffinityService? affinityService = null,
ITimerResolutionService? timerResolutionService = null,
IDreamineLogger? logger = null )
inline

코어 할당, 주기 정책 및 스케줄링 서비스를 사용해 T:Dreamine.Threading.Services.DreamineThreadManager 클래스의 새 인스턴스를 초기화합니다.

매개변수
coreAllocator스레드의 CPU 코어를 할당하고 해제할 서비스입니다.
cyclePolicy작업자 실행 주기 지연 정책입니다.
scheduler오버플로 작업을 기존 작업자에 배치할 스케줄러입니다.
affinityService선택적 CPU 선호도 서비스입니다.
timerResolutionService선택적 타이머 해상도 서비스입니다.
logger선택적 진단 로거입니다.
예외
ArgumentNullExceptioncoreAllocator , cyclePolicy 또는 schedulernull일 때 발생합니다.

DreamineThreadManager.cs 파일의 163 번째 라인에서 정의되었습니다.

170 {
171 _coreAllocator = coreAllocator ?? throw new ArgumentNullException(nameof(coreAllocator));
172 _cyclePolicy = cyclePolicy ?? throw new ArgumentNullException(nameof(cyclePolicy));
173 _scheduler = scheduler ?? throw new ArgumentNullException(nameof(scheduler));
174 _affinityService = affinityService;
175 _timerResolutionService = timerResolutionService;
176 _logger = logger;
177 }

다음을 참조함 : _affinityService, _coreAllocator, _cyclePolicy, _logger, _scheduler, _timerResolutionService.

다음에 의해서 참조됨 : ThrowIfDisposed().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 함수 문서화

◆ Dispose()

void Dreamine.Threading.Services.DreamineThreadManager.Dispose ( )
inline

모든 작업자를 동기 중지·정리하고 코어 할당을 반환합니다.

모든 작업자의 join 대기가 완료될 때까지 호출 스레드를 차단할 수 있습니다.

DreamineThreadManager.cs 파일의 706 번째 라인에서 정의되었습니다.

707 {
708 if (_disposed)
709 {
710 return;
711 }
712
713 StopAll();
714
715 lock (_syncRoot)
716 {
717 foreach (var thread in _threads)
718 {
719 thread.Dispose();
720 _coreAllocator.Release(thread.CoreAssignment);
721 }
722
723 _threads.Clear();
724 _disposed = true;
725 }
726 }

다음을 참조함 : _coreAllocator, _disposed, _syncRoot, _threads, StopAll().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetThreadInfos()

IReadOnlyList< DreamineThreadInfo > Dreamine.Threading.Services.DreamineThreadManager.GetThreadInfos ( )
inline

모든 등록된 작업자에서 상태 스냅샷을 생성합니다.

반환값
작업자 상태 정보 배열입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 680 번째 라인에서 정의되었습니다.

681 {
682 lock (_syncRoot)
683 {
684 return _threads
685 .Select(thread => thread.GetInfo())
686 .ToArray();
687 }
688 }

다음을 참조함 : _syncRoot, _threads.

◆ GetThreads()

IReadOnlyList< IDreamineThread > Dreamine.Threading.Services.DreamineThreadManager.GetThreads ( )
inline

등록된 작업자 스레드의 스레드 안전한 배열 스냅샷을 가져옵니다.

반환값
등록된 작업자 스레드의 스냅샷입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 656 번째 라인에서 정의되었습니다.

657 {
658 lock (_syncRoot)
659 {
660 return _threads.ToArray();
661 }
662 }

다음을 참조함 : _syncRoot, _threads.

다음에 의해서 참조됨 : PauseAll(), ResumeAll(), StartAll(), StopAll(), StopAllAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Pause()

bool Dreamine.Threading.Services.DreamineThreadManager.Pause ( string threadName)
inline

이름이 일치하는 작업자 스레드를 일시 정지합니다.

매개변수
threadName일시 정지할 작업자 이름입니다.
반환값
작업자를 찾아 일시 정지했으면 true입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 512 번째 라인에서 정의되었습니다.

513 {
514 if (!TryGetThread(threadName, out var thread) || thread is null)
515 {
516 return false;
517 }
518
519 thread.Pause();
520 return true;
521 }

다음을 참조함 : TryGetThread().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PauseAll()

void Dreamine.Threading.Services.DreamineThreadManager.PauseAll ( )
inline

등록된 모든 작업자 스레드를 일시 정지합니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 566 번째 라인에서 정의되었습니다.

567 {
568 foreach (var thread in GetThreads())
569 {
570 thread.Pause();
571 }
572 }

다음을 참조함 : GetThreads().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ Register()

IDreamineThreadJob Dreamine.Threading.Services.DreamineThreadManager.Register ( DreamineThreadOptions options,
Func< CancellationToken, ValueTask > action )
inline

옵션에 따라 전용 작업자 또는 기존 작업자의 오버플로 작업을 등록합니다.

매개변수
options정규화할 스레드·코어·주기 옵션입니다.
action등록할 비동기 작업 대리자입니다.
반환값
생성되어 작업자에 할당된 스레드 작업입니다.
예외
ArgumentNullExceptionoptions 또는 actionnull일 때 발생합니다.
ObjectDisposedException관리자가 이미 정리된 경우 발생합니다.

등록 실패 시 이미 얻은 코어 할당을 할당기에 반환합니다. 작업자 시작은 관리자 잠금 밖에서 수행됩니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 235 번째 라인에서 정의되었습니다.

238 {
239 ArgumentNullException.ThrowIfNull(options);
240 ArgumentNullException.ThrowIfNull(action);
241
242 lock (_syncRoot)
243 {
244 ThrowIfDisposed();
245 }
246
247 var normalized = options.Normalize();
248 var assignment = _coreAllocator.Allocate(normalized);
249
250 try
251 {
252 var jobOptions = new DreamineThreadJobOptions
253 {
254 Name = normalized.Name,
255 IntervalMs = assignment.IsOverflowPolling
256 ? normalized.OverflowPollingIntervalMs
257 : normalized.IntervalMs,
258 IsEnabled = true,
259 IsOverflowPolling = assignment.IsOverflowPolling
260 };
261
262 var job = new DreamineThreadJob(jobOptions, action);
263
264 // Worker decisions are taken under the lock; thread Start() is
265 // performed afterwards to avoid running external callbacks
266 // (logging, affinity, etc.) while holding the manager lock.
267 IDreamineThread? workerToStart = null;
268
269 lock (_syncRoot)
270 {
271 ThrowIfDisposed();
272
273 if (assignment.IsOverflowPolling)
274 {
275 workerToStart = RegisterOverflowJob(job);
276 }
277 else
278 {
279 var worker = new DreamineThread(
280 normalized,
281 assignment,
282 _cyclePolicy,
283 _affinityService,
284 _timerResolutionService,
285 _logger);
286
287 worker.AddJob(job);
288 _threads.Add(worker);
289
290 if (normalized.AutoStart)
291 {
292 workerToStart = worker;
293 }
294 }
295 }
296
297 workerToStart?.Start();
298
299 _logger?.Info(
300 $"Thread registered. Name={normalized.Name}, Core={assignment.CoreIndex}, Affinity={assignment.UseAffinity}");
301
302 return job;
303 }
304 catch
305 {
306 _coreAllocator.Release(assignment);
307 throw;
308 }
309 }

다음을 참조함 : _affinityService, _coreAllocator, _cyclePolicy, _logger, _syncRoot, _threads, _timerResolutionService, Dreamine.Threading.Models.DreamineThreadOptions.Normalize(), RegisterOverflowJob(), Dreamine.Threading.Interfaces.IDreamineThread.Start(), ThrowIfDisposed().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterOverflowJob()

IDreamineThread? Dreamine.Threading.Services.DreamineThreadManager.RegisterOverflowJob ( IDreamineThreadJob job)
inlineprivate

오버플로 폴링 작업을 기존 작업자에 배치하거나 작업자가 없으면 대체 작업자를 생성합니다.

매개변수
job배치할 오버플로 폴링 작업입니다.
반환값
새 대체 작업자가 생성되면 잠금 밖에서 시작할 작업자이며 기존 작업자가 작업을 받으면 null입니다.

오버플로 폴링 작업을 기존 작업자에 배치하거나 작업자가 없으면 대체 작업자를 생성합니다.

DreamineThreadManager.cs 파일의 760 번째 라인에서 정의되었습니다.

761 {
762 var worker = _scheduler.SelectWorker(_threads);
763 IDreamineThread? newWorker = null;
764
765 if (worker is null)
766 {
767 var fallbackOptions = new DreamineThreadOptions
768 {
769 Name = "DreamineOverflowWorker",
770 Priority = DreamineThreadPriority.Normal,
771 IntervalMs = 10,
772 CoreMode = DreamineThreadCoreMode.None,
773 AutoStart = true
774 };
775
776 var fallbackAssignment = DreamineThreadCoreAssignment.None();
777
778 newWorker = new DreamineThread(
779 fallbackOptions,
780 fallbackAssignment,
781 _cyclePolicy,
782 _affinityService,
783 _timerResolutionService,
784 _logger);
785
786 _threads.Add(newWorker);
787 worker = newWorker;
788 }
789
790 worker.AddJob(job);
791
792 _logger?.Warning(
793 $"Overflow polling job registered. Job={job.Name}, Worker={worker.Name}");
794
795 return newWorker;
796 }

다음을 참조함 : _affinityService, _cyclePolicy, _logger, _scheduler, _threads, _timerResolutionService, Dreamine.Threading.Interfaces.IDreamineThread.AddJob(), Dreamine.Threading.Models.DreamineThreadCoreAssignment.None().

다음에 의해서 참조됨 : Register().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Resume()

bool Dreamine.Threading.Services.DreamineThreadManager.Resume ( string threadName)
inline

이름이 일치하는 작업자 스레드를 재개합니다.

매개변수
threadName재개할 작업자 이름입니다.
반환값
작업자를 찾아 재개했으면 true입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 547 번째 라인에서 정의되었습니다.

548 {
549 if (!TryGetThread(threadName, out var thread) || thread is null)
550 {
551 return false;
552 }
553
554 thread.Resume();
555 return true;
556 }

다음을 참조함 : TryGetThread().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ResumeAll()

void Dreamine.Threading.Services.DreamineThreadManager.ResumeAll ( )
inline

등록된 모든 작업자 스레드를 재개합니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 582 번째 라인에서 정의되었습니다.

583 {
584 foreach (var thread in GetThreads())
585 {
586 thread.Resume();
587 }
588 }

다음을 참조함 : GetThreads().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ Start()

bool Dreamine.Threading.Services.DreamineThreadManager.Start ( string threadName)
inline

이름이 일치하는 작업자 스레드를 시작합니다.

매개변수
threadName시작할 작업자 이름입니다.
반환값
작업자를 찾아 시작했으면 true입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 399 번째 라인에서 정의되었습니다.

400 {
401 if (!TryGetThread(threadName, out var thread) || thread is null)
402 {
403 return false;
404 }
405
406 thread.Start();
407 return true;
408 }

다음을 참조함 : TryGetThread().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ StartAll()

void Dreamine.Threading.Services.DreamineThreadManager.StartAll ( )
inline

등록된 모든 작업자 스레드의 스냅샷을 순회해 시작합니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 319 번째 라인에서 정의되었습니다.

320 {
321 foreach (var thread in GetThreads())
322 {
323 thread.Start();
324 }
325 }

다음을 참조함 : GetThreads().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ Stop()

bool Dreamine.Threading.Services.DreamineThreadManager.Stop ( string threadName)
inline

이름이 일치하는 작업자 스레드를 동기 중지합니다.

매개변수
threadName중지할 작업자 이름입니다.
반환값
작업자를 찾아 중지했으면 true입니다.

작업자의 join 대기 동안 호출 스레드가 차단될 수 있습니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 442 번째 라인에서 정의되었습니다.

443 {
444 if (!TryGetThread(threadName, out var thread) || thread is null)
445 {
446 return false;
447 }
448
449 thread.Stop();
450 return true;
451 }

다음을 참조함 : TryGetThread().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ StopAll()

void Dreamine.Threading.Services.DreamineThreadManager.StopAll ( )
inline

등록된 모든 작업자 스레드를 순서대로 동기 중지합니다.

각 작업자의 join 대기 동안 호출 스레드가 차단될 수 있습니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 343 번째 라인에서 정의되었습니다.

344 {
345 foreach (var thread in GetThreads())
346 {
347 thread.Stop();
348 }
349 }

다음을 참조함 : GetThreads().

다음에 의해서 참조됨 : Dispose().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StopAllAsync()

async ValueTask Dreamine.Threading.Services.DreamineThreadManager.StopAllAsync ( )
inline

등록된 모든 작업자 스레드를 순서대로 비동기 중지합니다.

반환값
모든 작업자의 순차 중지 작업입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 367 번째 라인에서 정의되었습니다.

368 {
369 foreach (var thread in GetThreads())
370 {
371 await thread.StopAsync().ConfigureAwait(false);
372 }
373 }

다음을 참조함 : GetThreads().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ StopAsync()

async ValueTask< bool > Dreamine.Threading.Services.DreamineThreadManager.StopAsync ( string threadName)
inline

이름이 일치하는 작업자 스레드를 비동기 중지합니다.

매개변수
threadName중지할 작업자 이름입니다.
반환값
작업자를 찾아 중지했는지를 나타내는 비동기 결과입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 477 번째 라인에서 정의되었습니다.

478 {
479 if (!TryGetThread(threadName, out var thread) || thread is null)
480 {
481 return false;
482 }
483
484 await thread.StopAsync().ConfigureAwait(false);
485 return true;
486 }

다음을 참조함 : TryGetThread().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ThrowIfDisposed()

void Dreamine.Threading.Services.DreamineThreadManager.ThrowIfDisposed ( )
inlineprivate

스레드 관리자가 아직 정리되지 않았는지 확인합니다.

예외
ObjectDisposedException관리자가 이미 정리된 경우 발생합니다.

DreamineThreadManager.cs 파일의 814 번째 라인에서 정의되었습니다.

815 {
816 if (_disposed)
817 {
818 throw new ObjectDisposedException(nameof(DreamineThreadManager));
819 }
820 }

다음을 참조함 : _disposed, DreamineThreadManager().

다음에 의해서 참조됨 : Register().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ TryGetThread()

bool Dreamine.Threading.Services.DreamineThreadManager.TryGetThread ( string threadName,
out IDreamineThread? thread )
inline

대소문자를 구분하는 이름으로 등록된 작업자 스레드를 찾습니다.

매개변수
threadName찾을 작업자 이름입니다.
thread성공 시 찾은 작업자를 받습니다.
반환값
유효한 이름의 작업자를 찾았으면 true입니다.

Dreamine.Threading.Interfaces.IDreamineThreadManager를 구현.

DreamineThreadManager.cs 파일의 622 번째 라인에서 정의되었습니다.

623 {
624 thread = null;
625
626 if (string.IsNullOrWhiteSpace(threadName))
627 {
628 return false;
629 }
630
631 lock (_syncRoot)
632 {
633 thread = _threads.FirstOrDefault(item =>
634 string.Equals(item.Name, threadName, StringComparison.Ordinal));
635
636 return thread is not null;
637 }
638 }

다음을 참조함 : _syncRoot, _threads.

다음에 의해서 참조됨 : Pause(), Resume(), Start(), Stop(), StopAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _affinityService

readonly? IThreadAffinityService Dreamine.Threading.Services.DreamineThreadManager._affinityService
private

affinity Service 값을 보관합니다.

DreamineThreadManager.cs 파일의 70 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DreamineThreadManager(), Register(), RegisterOverflowJob().

◆ _coreAllocator

readonly IThreadCoreAllocator Dreamine.Threading.Services.DreamineThreadManager._coreAllocator
private

core Allocator 값을 보관합니다.

DreamineThreadManager.cs 파일의 43 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : Dispose(), DreamineThreadManager(), Register().

◆ _cyclePolicy

readonly IThreadCyclePolicy Dreamine.Threading.Services.DreamineThreadManager._cyclePolicy
private

cycle Policy 값을 보관합니다.

DreamineThreadManager.cs 파일의 52 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DreamineThreadManager(), Register(), RegisterOverflowJob().

◆ _disposed

bool Dreamine.Threading.Services.DreamineThreadManager._disposed
private

disposed 값을 보관합니다.

DreamineThreadManager.cs 파일의 97 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : Dispose(), ThrowIfDisposed().

◆ _logger

readonly? IDreamineLogger Dreamine.Threading.Services.DreamineThreadManager._logger
private

logger 값을 보관합니다.

DreamineThreadManager.cs 파일의 88 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DreamineThreadManager(), Register(), RegisterOverflowJob().

◆ _scheduler

readonly IDreamineThreadScheduler Dreamine.Threading.Services.DreamineThreadManager._scheduler
private

scheduler 값을 보관합니다.

DreamineThreadManager.cs 파일의 61 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DreamineThreadManager(), RegisterOverflowJob().

◆ _syncRoot

readonly object Dreamine.Threading.Services.DreamineThreadManager._syncRoot = new()
private

sync Root 값을 보관합니다.

DreamineThreadManager.cs 파일의 25 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : Dispose(), GetThreadInfos(), GetThreads(), Register(), TryGetThread().

◆ _threads

readonly List<IDreamineThread> Dreamine.Threading.Services.DreamineThreadManager._threads = new()
private

threads 값을 보관합니다.

DreamineThreadManager.cs 파일의 34 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : Dispose(), GetThreadInfos(), GetThreads(), Register(), RegisterOverflowJob(), TryGetThread().

◆ _timerResolutionService

readonly? ITimerResolutionService Dreamine.Threading.Services.DreamineThreadManager._timerResolutionService
private

timer Resolution Service 값을 보관합니다.

DreamineThreadManager.cs 파일의 79 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : DreamineThreadManager(), Register(), RegisterOverflowJob().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: