07.system-programming-windowsНова папка 07.system-programming-windows. Модуль 06 ігнорується (буде видалений). 20 файлів, 5 блоків. Фокус: багатопоточність та асинхронність від А до Я.
01.how-os-works.md — Як Працює Операційна Система02.processes-in-dotnet.md — Процеси в .NETProcess.GetCurrentProcess() — поточний процесProcess.GetProcesses(), GetProcessesByName(), GetProcessById()Id, ProcessName, StartTime, WorkingSet64, Threads, ModulesProcess.Start(), ProcessStartInfoFileName, Arguments, WorkingDirectoryUseShellExecute vs direct executionVerb (RunAs для адміністратора)RedirectStandardInput/Output/ErrorOutputDataReceived eventWaitForExit(), ExitCodeping і парсинг результатівdotnet build з відображенням прогресуKill(), CloseMainWindow() — graceful vs forcefulHasExited, EnableRaisingEvents, Exited eventNamedPipeServerStream, NamedPipeClientStreamMemoryMappedFile03.appdomains-assemblies.md — Application Domains та ЗбіркиAssemblyLoadContext.DefaultAssemblyLoadContext, collectible contexts04.thread-fundamentals.md — Потоки: ОсновиThreadStart — делегат без параметрівParameterizedThreadStart — передача object?int i в циклі!)thread.Start(), new Thread() — створення vs запускTask<T> (preview: буде детально в темі 11)IsBackground = trueThreadState flags enum: Unstarted → Running → WaitSleepJoin → StoppedSuspend, Resume, Abort → чому CancellationTokenThreadPriority enum: Lowest → HighestThread.Sleep(ms) — призупинення; Sleep(0) vs Yield()Thread.Join() — очікування з timeoutThread.CurrentThread — поточний потікthread.Name — для debugging05.shared-state-problems.md — Проблеми Спільного Стану ⚠️КЛЮЧОВА ТЕМА. Без розуміння проблем — синхронізація не має сенсу.
i++ — НЕ атомарна операція! (Read → Modify → Write)long/double — не atomic на x86-3206.synchronization-fundamentals.md — Синхронізація: Основиlock Statementprivate readonly object _lock = new() — золотий стандартlock(this), ❌ lock("string"), ❌ lock(typeof(...))Monitor.Enter/Exit + try/finallytry/finally — гарантія звільнення при exceptionsMonitor.TryEnter(timeout) — неблокуюча спробаMonitor.Wait() / Monitor.Pulse() / Monitor.PulseAll() — signalingwhile замість if перед Wait() (spurious wakeup)System.Threading.Lock (C# 13/.NET 9)Lock.EnterScope() — ref struct з usingobject lock (таблиця)Monitor.TryEnter), lock hierarchy07.synchronization-advanced.md — Синхронізація: Kernel-Level та AdvancedWaitOne(), ReleaseMutex(), AbandonedMutexExceptionSemaphoreSlim(initialCount, maxCount)WaitAsync() — async support (preview: деталі в темі 16)Set(), Reset(), WaitOne() / Wait()Signal(), Wait(), AddCount()SignalAndWait(), post-phase callbackEnterReadLock(), EnterWriteLock(), EnterUpgradeableReadLock()LockRecursionPolicy08.interlocked-volatile-lockfree.md — Atomic Operations та Lock-FreeInterlocked Class: Атомарні ОпераціїIncrement, Decrement, AddExchange — atomic swapCompareExchange — CAS (Compare-And-Swap): фундамент lock-freeRead — atomic read для 64-bit на 32-bitCMPXCHG)volatile Keywordi++volatile int counter; counter++ — це НЕ thread-safe!Thread.MemoryBarrier()SpinLock.Enter(), SpinLock.Exit() — для дуже коротких critical sectionsSpinWait.SpinOnce(), SpinWait.SpinUntil() — adaptive spinningInterlocked.CompareExchange09.thread-pool.md — ThreadPoolnew Thread() vs ThreadPool.QueueUserWorkItem()ThreadPool.SetMinThreads(), SetMaxThreads()ThreadPool.ThreadCount, PendingWorkItemCountThreadPool.QueueUserWorkItem(callback) — без стануThreadPool.QueueUserWorkItem(callback, state, preferLocal) — зі станомThreadPool.UnsafeQueueUserWorkItem — без ExecutionContext flowThreadPool.RegisterWaitForSingleObject() — ефективне очікуванняThread.Sleep() в ThreadPoolPendingWorkItemCount10.concurrent-collections.md — Concurrent та Immutable CollectionsList<T> + два потоки = corruptionDictionary<K,V> + конкурентний доступ = exceptionGetOrAdd, AddOrUpdate, TryAdd, TryRemove, TryUpdateTryDequeue, TryPop, TryTakeAdd() (blocks if full), Take() (blocks if empty)CompleteAdding(), GetConsumingEnumerable()ImmutableList<T>, ImmutableDictionary<K,V>, ImmutableStack<T>ImmutableList.CreateBuilder<T>()11.tpl-parallel-plinq.md — TPL, Parallel та PLINQTask.Run() (рекомендовано), Task.Factory.StartNew() (LongRunning, DenyChildAttach)new Task() + Start() — чому не рекомендуєтьсяTaskStatus enum, lifecycle діаграма.Result, .GetAwaiter().GetResult() — блокуюче очікуванняTask.WhenAll(), Task.WhenAny(), Task.WhenEach() (.NET 9)Task.Delay(), Task.FromResult(), Task.CompletedTaskContinueWith (legacy) — проблеми з SynchronizationContextCancellationTokenSource, CancellationTokenThrowIfCancellationRequested(), IsCancellationRequestedtoken.Register(callback), linked tokens, timeoutAggregateException, Flatten(), Handle()TaskScheduler.UnobservedTaskExceptionParallel.For(), Parallel.ForEach(), Parallel.Invoke()ParallelOptions: MaxDegreeOfParallelism, CancellationTokenBreak() vs Stop()Parallel.ForEachAsync() (.NET 6+)AsParallel(), AsOrdered(), WithDegreeOfParallelism(N)WithCancellation(), WithExecutionMode(), WithMergeOptions()ForAll(), Aggregate(), partitioning strategies12.async-fundamentals.md — Async/Await: ФундаментBeginRead/EndRead (legacy), BackgroundWorker (legacy)async та await: Синтаксисasync — що робить (і чого НЕ: не робить метод паралельним!)await — точка "призупинення" та повернення потокуTask, Task<T>, ValueTask, ValueTask<T>, voidAsync суфіксIAsyncStateMachine interfaceawait — точка зупинки (стан автомата)await автоматично unwrap AggregateExceptionTask.WhenAll — перший + .Exceptionasync void — exceptions "втрачаються"!!13.async-context-configureawait.md — SynchronizationContext та ConfigureAwaitSynchronizationContext.Current, Post(), Send()ConfigureAwait(false): продовжити на будь-якому потоціConfigureAwait(false) в бібліотечному кодіConfigureAwait(true) у UI-коді.Result → deadlock (повний розбір із діаграмою).Result → deadlock.Result/.Wait() в sync contextAsyncLocal<T> — "thread-local" для async (передається через await)14.async-advanced.md — Async: Просунуті Паттерниyield return в async контекстіawait foreach + WithCancellation()[EnumeratorCancellation] attributeawait using.Result до completionasync void — тільки для event handlers.Result/.Wait() — deadlockTask.Run() в ASP.NET (fake async)ConfigureAwait(false) в бібліотекахValueTask для hot paths.Result / .GetAwaiter().GetResult())_ = DoWorkAsync()Lazy<Task<T>> — lazy async initGetAwaiter() pattern, ICriticalNotifyCompletion15.channels.md — System.Threading.ChannelsBlockingCollection не підходить для async (блокує потоки)Channel.CreateBounded<T>(capacity), CreateUnbounded<T>()ChannelWriter<T>: WriteAsync, TryWrite, CompleteChannelReader<T>: ReadAsync, ReadAllAsync, WaitToReadAsyncBoundedChannelFullMode: Wait, DropNewest, DropOldest, DropWriteSingleReader, SingleWriter — performance optimizationsBlockingCollection vs ConcurrentQueue + SemaphoreSlim16.async-synchronization.md — Асинхронна Синхронізаціяlock Не Можна з awaitawait inside locknew SemaphoreSlim(1, 1) = async-compatible mutexawait semaphore.WaitAsync() + try/finally { Release() }Task.WhenAny(task, Task.Delay(timeout)) — manual timeoutCancellationTokenSource.CancelAfter() — auto timeoutAsyncLock, AsyncAutoResetEvent, AsyncManualResetEventAsyncCollection<T>, AsyncLazy<T>17.unsafe-code.md — Unsafe Code та Вказівникиunsafe контекст, AllowUnsafeBlocksint*, byte*, void*, операції &, *, ->fixed statement (pinning)stackalloc + Span<T>, sizeof, Marshal.SizeOfdelegate*, C# 9+)18.pinvoke-winapi.md — P/Invoke та Windows API[DllImport] vs [LibraryImport] (.NET 7+)SafeHandle, Marshal class19.windows-registry.md — Реєстр WindowsregeditMicrosoft.Win32.Registry API: read/write/delete/monitorRegNotifyChangeKeyValue20.windows-hooks-services.md — Hooks, Hotkeys та ServicesSetWindowsHookEx, WH_KEYBOARD_LL, WH_MOUSE_LLRegisterHotKey/UnregisterHotKey, message loopBackgroundService, sc.exe, Event LogNotifyIcon, context menu| # | Файл | Блок | Залежить від |
|---|---|---|---|
| 01 | How OS Works | A | — |
| 02 | Processes in .NET | A | 01 |
| 03 | AppDomains & Assemblies | A | 02 |
| 04 | Thread Fundamentals | B | 01 |
| 05 | Shared State Problems ⚠️ | B | 04 |
| 06 | Synchronization Fundamentals | B | 05 |
| 07 | Synchronization Advanced | B | 06 |
| 08 | Interlocked, Volatile, Lock-Free | B | 05 |
| 09 | ThreadPool | B | 04, 06 |
| 10 | Concurrent Collections | B | 06, 08 |
| 11 | TPL, Parallel, PLINQ | B | 09 |
| 12 | Async Fundamentals | C | 11 |
| 13 | SyncContext & ConfigureAwait | C | 12 |
| 14 | Async Advanced Patterns | C | 12 |
| 15 | Channels | C | 12, 14 |
| 16 | Async Synchronization | C | 07, 12 |
| 17 | Unsafe Code | D | 01 |
| 18 | P/Invoke & WinAPI | E | 17 |
| 19 | Windows Registry | E | 18 |
| 20 | Windows Hooks & Services | E | 18, 12 |