Save 37% off PRO during our Black Friday Sale! »

BASTA! 2021 - Deep Dive in async/await bei Backend-APIs

BASTA! 2021 - Deep Dive in async/await bei Backend-APIs

Slides zu meinem Vortrag auf der BASTA! 2021.

Ebeb5d8fd081058ba8df73d378bf83d7?s=128

Sebastian P.R. Gingter

September 21, 2021
Tweet

Transcript

  1. Thinktecture AG | Consultant

  2. 3 Deep-dive in async/await bei Backend-APIs

  3. 4 Deep-dive in async/await bei Backend-APIs ▪ ▪ ▪ ▪

    ▪ ▪ ▪ ▪ ▪ Twitter:
  4. 5 ▪ ▪ ▪ ▪ ▪ Deep-dive in async/await bei

    Backend-APIs
  5. 6 ▪ ▪ ▪ ▪ ▪ ▪ Deep-dive in async/await

    bei Backend-APIs
  6. 7 Deep-dive in async/await bei Backend-APIs Nein, aber effizienter!

  7. 8 Deep-dive in async/await bei Backend-APIs

  8. 9 ▪ ▪ ▪ ▪ ▪ ▪ ▪ Deep-dive in

    async/await bei Backend-APIs
  9. 10 Deep-dive in async/await bei Backend-APIs Kern 1 Kern 2

    Kern 3 Kern 4 P2 T1 P2 T2 P3 T1 P1 T2 P3 T2 OS Scheduler P1 T1
  10. 11 • • • ▪ ▪ ▪ ▪ ▪ Deep-dive

    in async/await bei Backend-APIs * Zahlen für Windows, Quelle: “Windows Internals“, Solomin, Russinovich et al. Jeffrey Richter sagt hingegen: 30 ms in Windows, Linux hat andere Zeiten…
  11. 12 • • • • • • • • •

    • Deep-dive in async/await bei Backend-APIs
  12. 13 Deep-dive in async/await bei Backend-APIs Kern 1 Kern 2

    Kern 3 Kern 4 P2 T1 P2 T2 P3 T1 P1 T1 P3 T2 P1 T2 Kontext- Wechsel Kontext- & Prozess- Wechsel
  13. 14 • • • • • • • • •

    Deep-dive in async/await bei Backend-APIs
  14. 15 Deep-dive in async/await bei Backend-APIs ALU & FPU Registers

    0 Registers 1 CPU Core with Hyper-Threading Classic CPU Core
  15. 16 Deep-dive in async/await bei Backend-APIs Kern 1 Kern 2

    Kern 3 Kern 4 P2 T1 P2 T2 MyProc T1 P1 T2 P1 T1 MyProc T2 MyProc T3 MyProc T4 MyProc T5 MyProc T7 MyProc T6
  16. 17 Deep-dive in async/await bei Backend-APIs • • • Quelle:

    “Systems Performance: Enterprise and the Cloud“, 2013, Brendan Gregg, Pearson Verlag
  17. 18 Deep-dive in async/await bei Backend-APIs • • • •

    • •
  18. 19 Deep-dive in async/await bei Backend-APIs

  19. 20 • • • • • • .ContinueWith() • Deep-dive

    in async/await bei Backend-APIs
  20. 21 Deep-dive in async/await bei Backend-APIs Task Task-Liste Threadpool T1

    Threadpool T2 Kern 1 Kern 3 Kern 2 Kern 4 Threadpool T3 Threadpool T4 Threadpool Management Jeder Pool-Thread arbeitet Tasks in einer Endlosschleife ab Completed Tasks
  21. 22 • • • • • 🤯 Deep-dive in async/await

    bei Backend-APIs
  22. 23 Deep-dive in async/await bei Backend-APIs

  23. 24 ▪ ▪ ▪ ▪ ▪ ▪ ⏳ ▪ ▪

    ▪ Deep-dive in async/await bei Backend-APIs ReadFile API: https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfile
  24. 25 ▪ ▪ ▪ ▪ ▪ ▪ ⏳ ▪ Deep-dive

    in async/await bei Backend-APIs ReadFile API: https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfile
  25. 26 Deep-dive in async/await bei Backend-APIs • • IAsyncResult BeginSomething()

    • EndSomething(result) • • DoSomethingAsync() • event SomethingCompleted • • Task[<T>] DoSomethingAsync()
  26. 27 Deep-dive in async/await bei Backend-APIs

  27. 28 • • async Task<> MyMethodAsync() • • • await

    OtherMethodAsync() • • await • • • • Deep-dive in async/await bei Backend-APIs
  28. 29 Deep-dive in async/await bei Backend-APIs

  29. 30 Deep-dive in async/await bei Backend-APIs

  30. 31 • • task.GetAwaiter().GetResult() → ❌ • Thread.Sleep() → ❌

    • await Task.Delay() → ✔ • Thread.SpinWait() • → ❌ • → ✔ Deep-dive in async/await bei Backend-APIs
  31. 32 • • var task1 = DoSomethingAsync(); var task2 =

    DoSomethingElseAsync(); await Task.WhenAll(task1, task2); • • • Task.Factory.StartNew(…, TaskCreationOptions.LongRunning); • • • Deep-dive in async/await bei Backend-APIs
  32. 33 • • • • Deep-dive in async/await bei Backend-APIs

  33. 34 Deep-dive in async/await bei Backend-APIs

  34. 35 ▪ ▪ ▪ ▪ ▪ ▪ Deep-dive in async/await

    bei Backend-APIs
  35. 36 ▪ ▪ ▪ ▪ ▪ 😉 Deep-dive in async/await

    bei Backend-APIs
  36. None