CLRium # 7: Reports, Practice, Mentors

April 18, 2020 in St. Petersburg and May 16 in Moscow will pass 7th .NET CLRium # 7 Mini-Conference. This time we will both talk about the practice of multi-threaded code, and we will deal with the practice. Like last time, all reports will adhere to a single line of storytelling: in the sixth CLRium, we became more advanced in theory and learned a lot about the thread scheduler, locks and non-blocking algorithms. In the .NET platform, we studied synchronization contexts, task schedulers, how the tasks themselves work, async / await and typical errors when using it … We studied everything in general to confidently start working in multi-threaded scripts.

IN CLRium # 7 we will go to practice. Our program is ready: reports can be found on the website. But the point is not even in them: in addition to reports optional practical work will be given, in the framework of which you will gain experience working on tasks together: in groups of several people (controlled by a coordinator).

When planning the seminar, we decided to go on an experiment: introduce a full-fledged practice. After all, you can talk for a long time about how to deal with parallelization of algorithms, but never start doing it. On the one hand, it’s scary, and on the other, there were no problems so that there was an understanding whether it could be parallelized or not. Therefore, the line of our workshop will be as follows:

Architectural block of reports:

  1. We will start at the highest level.: system architecture in general. From a bird’s eye view we will learn to make decisions at the highest level. What – parallelize with well-known solutions like RabbtMQ, and what – on their own. We will solve issues from the point of view of architecture;
  2. Next we will learn to predict code performance if we still decide to make the code multi-thread. Agree: it is important to have an accurate idea of ​​the final result before rushing to do something;
  3. After we developed our algorithms, need to gain an understanding of what we got: analyze the performance of our code. Test it out. We will study this as part of the third report;
  4. The next question is learn to see the solution in the problem. Those. by the task itself, we’ll already roughly understand how we will parallelize our code. This can be achieved by studying a number of existing solutions: in a sense, templates, with which you can easily get a ready-made solution from the statement of the problem;

Synchronization Report Block

  1. Having dealt with architectural issues, we will begin to dive into developing lock strategies. Locks are important and understanding them will lead you to high-performance code;
  2. The practice of developing and analyzing non-blocking algorithms Is our next topic. Working in pairs, blocking and non-blocking algorithms will give you maximum processor load with the most useful calculations;


  1. In the report “Work in the async / await model: fully and partially asynchronous code“we will answer many questions that frighten the developer: how to start async / await code architecturally? If the library or some code uses async / await, what should the caller do? Do all callers do async? How to stop it? And many others.
  2. Also we we will reveal the issues of using the Rx.NET library: linq-like library for processing streaming data (for example, processing messages. Including from the UI). A powerful library that in inexperienced hands becomes a weapon of mass destruction of code … But in the hands of those who know it, it’s super-toolkit, which allows solving problems in a very short time.
  3. And the last topic is finally library released JetBrains.Lifetimes. I talked a little about this earlier. But now you can tell firstly much more, and secondly – in a multi-threaded environment.

The program of the seminar turned out to be completed, and given the practice, it actually became a training course on the topic of multithreading in the .NET environment.


Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *