пятница, 8 февраля 2019 г.

Selenoid/Moon

      Раньше у людей отвечающих за QA инфраструктуру было любимое развлечение - по приходу в новую компанию руками разворачивать инфраструктуру для Selenium автотестов. Сделать это хорошо довольно сложно а времени на поддержку инфраструктурных проектов вечно не хватает. Поэтому веселье обычно растягивалось минимум на пол года. Сейчас похоже лавочку прикрыли.  С приходом кубера в широкие массы развернуть Selenoid можно не запачкав ручки - все за вас сделает Moon. По крайней мере обещает что сделает :-)

вторник, 5 февраля 2019 г.

CLR via C# by Jeffrey Richter

       Наконец-то дочитал книгу CLR via C# by Jeffrey Richter. Скажу честно - дочитал через силу. Прям заставлял себя дочитывать.  В книге очень много воды и сомнительных рекомендаций по оптимизации.  Временами автор даже сваливается в какие-то внутри мелкософтовские разборки(как например при обсуждении EAP - event based asynchronous pattern).  
      В общем из плюсов - очень много информации по .NET CLR в одном месте, объяснены некоторые интересные аспекты работы .NET CLR. Из минусов - очень много воды, объяснения очевиднейших вещей, пересказывания мануалов. В общем временами читается как инструкция к стиральной машинке. 
        Если говорить о том мнении которое я составил о C# после прочтения этой книги: C# и его runtime писались с оглядкой на Java, и они всегда старались сделать немного лучше чем сделано в Java.  Иногда это получалось, но в некоторых случаях Java выигрывает за  счет открытости платформы и того что более качественные идеи рождаются и реализуются в community. 
     Параллельное программирование на .NET никогда не будет таким же эффективным как в Golang или другими языками где идея легковесных потоков была заложена с основания языка. Причина этого не в технологиях - я уверен что в microsoft достаточно компетенции написать scheduler легковесных потоков  а в legacy - то что раньше было возможно запускать потоки операционной системы с разными контекстами (правами, приоритетами и тд). И каждый раз при переключении на другой таск ThreadPool обязан все эти огромные структуры данных копировать. Добавьте к этому поддержку иерархической системы тасков которая требует большого количества памяти и хранение не перехваченных exceptions. 
       В общем отказаться от поддержки всего этого они не могут, а без этого просто взять и вкрутить планировщик легковесных потоков в существующий runtime будет очень трудно/не возможно.