$30 off During Our Annual Pro Sale. View Details »

Thinktecture Webinar: Web-API mit Turbo: Deep-dive in async/await für Backend-APIs

Thinktecture Webinar: Web-API mit Turbo: Deep-dive in async/await für Backend-APIs

Slides for my webinar.

Sebastian Gingter

February 16, 2022
Tweet

More Decks by Sebastian Gingter

Other Decks in Programming

Transcript

  1. View Slide

  2. 2
    Deep-dive in async/await bei Backend-APIs
    ▪ 🐻💬







    ▪ Twitter:

    View Slide

  3. 3





    Deep-dive in async/await bei Backend-APIs

    View Slide

  4. 4






    Deep-dive in async/await bei Backend-APIs

    View Slide

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

    View Slide

  6. 6
    Deep-dive in async/await bei Backend-APIs

    View Slide

  7. 7







    Deep-dive in async/await bei Backend-APIs

    View Slide

  8. 8
    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

    View Slide

  9. 9








    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…

    View Slide

  10. 10










    Deep-dive in async/await bei Backend-APIs

    View Slide

  11. 11
    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

    View Slide

  12. 12









    Deep-dive in async/await bei Backend-APIs

    View Slide

  13. 13
    Deep-dive in async/await bei Backend-APIs
    ALU & FPU
    Registers 0
    Registers 1
    CPU Core with
    Hyper-Threading
    Classic CPU Core

    View Slide

  14. 14
    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

    View Slide

  15. 15
    Deep-dive in async/await bei Backend-APIs



    Quelle: “Systems Performance: Enterprise and the Cloud“, 2013, Brendan Gregg, Pearson Verlag

    View Slide

  16. 16
    Deep-dive in async/await bei Backend-APIs






    View Slide

  17. 17
    Deep-dive in async/await bei Backend-APIs

    View Slide

  18. 18





    ▪ ⏳



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

    View Slide

  19. 19





    ▪ ⏳

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

    View Slide

  20. 20
    Deep-dive in async/await bei Backend-APIs

    View Slide

  21. 21
    Deep-dive in async/await bei Backend-APIs

    • IAsyncResult BeginSomething()
    • EndSomething(result)

    • DoSomethingAsync()
    • event SomethingCompleted

    • Task[] DoSomethingAsync()
    P

    View Slide

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

    View Slide

  23. 23





    • .ContinueWith()

    Deep-dive in async/await bei Backend-APIs

    View Slide

  24. 24
    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

    View Slide

  25. 25




    • 🤯


    Deep-dive in async/await bei Backend-APIs

    View Slide

  26. 26
    Deep-dive in async/await bei Backend-APIs

    View Slide

  27. 27

    • async Task<> MyMethodAsync()


    • await OtherMethodAsync()

    • await




    Deep-dive in async/await bei Backend-APIs
    E

    View Slide

  28. 28
    Deep-dive in async/await bei Backend-APIs

    View Slide

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

    View Slide

  30. 30

    • task.GetAwaiter().GetResult() → ❌
    • Thread.Sleep() → ❌
    • await Task.Delay() → ✔
    • Thread.SpinWait()
    • → ❌
    • → ✔
    Deep-dive in async/await bei Backend-APIs

    View Slide

  31. 31

    • var task1 = DoSomethingAsync();
    var task2 = DoSomethingElseAsync();
    await Task.WhenAll(task1, task2);


    • Task.Factory.StartNew(…, TaskCreationOptions.LongRunning);



    Deep-dive in async/await bei Backend-APIs

    View Slide

  32. 32




    Deep-dive in async/await bei Backend-APIs

    View Slide

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

    View Slide

  34. 34






    Deep-dive in async/await bei Backend-APIs

    View Slide

  35. 35





    😉
    Deep-dive in async/await bei Backend-APIs
    P

    View Slide

  36. View Slide