Pull to refresh
114
0
Никита Цуканов @kekekeks

Гуру велосипедостроения

Send message

Так он расплодится в неимоверных количествах и пожрет весь борщевик. Закончится борщевик, не будет яда.

Ошибка перевода, "tank" — это ещё и контейнер для жидкостей/газов.

Это очень распространено на рынках расходных материалов, таких как картриджи для принтеров. Злоумышленники создают чип, который повторяет интерфейсы и функционал оригинального, с целью продажи «совместимого» чипа.


Не знаю как у вас, производителей принтеров, но в остальном мире этих людей "злоумышленниками" никто не считает.


Восстанавливающих электронику "злоумышленниками" тоже считают в основном конторы типа Apple.

Как и ожидалось, при вычислении числа π в один поток количество ядер никак не помогает. Тем не менее, при компиляции больших проектов ситуация изменяется.

Я правильно понимаю, что вы компилировали под архитектуру хоста? То есть, у вас бенчмаркались разные задачи.

Это кто вам такую глупость сказал?

Песков.


https://tass.ru/ekonomika/8097635


"Цель предстоящей недели — минимизировать контакты между людьми в рамках санитарно-эпидемиологических превентивных мер, а не прекратить процесс образования, процесс обучения и так далее. И те, кто до этого уже начал работу в удаленном формате, или обучение в режиме телеконференции, — продолжение этого будет приветствоваться", — заявил Песков.

Представитель администрации президента разъяснил, что в Кремле исходят из того, что "те, кто работал до сих пор на удаленке, будут продолжать работать, как и работали, на следующей неделе". "Речь не идет о выходных или праздничных днях в классическом понимании этого слова. Этот режим нерабочих дней введен для того, чтобы снизить контакты по максимуму, контакты между людьми", — подчеркнул он.

Вы точно в курсе, как работает Ажура и местная система оплаты? Или ничего кроме "VPS 2 гигабайта RAM за $1!" никогда в жизни не видели?


На Azure единственная гарантия, что виртуалку вам дадут — это то, что она уже запущена. Если вы хотите сэкономить и не платить — можете выключить (и тогда деньги не списываются), но потом может получиться так, что придётся ждать своей очереди на включение обратно, т. к. они не выделяют мощностей больше чем есть.

Оверселлинг — это когда на одном физическом хосте VPS-ок запущено больше, чем на нём есть для них памяти. Соответственно, когда эту память всё же пытаются использовать, всё это дело улетает в своп и начинает тормозить.


Ажура оверселлингом не занимается, но может дать отказ в создании или запуске виртуальной машины, если под неё нет свободного физического сервера.

В риме лучше заказывать сразу много как юрлицо/ИП и забирать самовывозом. Иначе ждать будете ну очень долго, это всё-таки оптовая компания, а не интернет-магазин.


Когда у них был на складе 18-го числа, в наличии было много чего, включая десятки ящиков с противогазами.

0) Как что-то плохое

Ну просто почему-то выходит, что компиляторы все плохие, апологеты все хорошие, а код в итоге всё равно тормозит.

О, классический аргумент апологетов ФП: "это не наш код тормозит, это компилятор плохой".

по Парето 80/20: только 20% кода требуют оптимизации, которые принесут 80% производительности.

В случае с бездумным использованием LINQ на ряде проектов это просто не работает. В профайлере видна картина, когда нет конкретного места, которое тормозит. И это очень и очень дорого потом исправлять.

Меньше чем на последующие выяснения и исправления "а какого хрена у нас система на 100 пользователях проводит 99% времени в blocking GC". Пушто в профайлере мы увидим так называемую смерть от тысячи порезов, когда аллоцирует и притормаживает вообще всё.


Но если вы на проект пришли на год, а потом сбежите на следующую работу, то можно и не "оптимизировать", да.

После замены ToList.ForEach на рукописный ForEach<T>:


|     Method |     Mean |     Error |    StdDev |  Gen 0 | Allocated |
|----------- |---------:|----------:|----------:|-------:|----------:|
|     Normal | 1.315 us | 0.0244 us | 0.0251 us | 0.2441 |    1.5 KB |
| Functional | 2.393 us | 0.0476 us | 0.0683 us | 0.2785 |   1.71 KB |

Чтобы красиво и функционально вызвать у List<T> функцию высшего порядка ForEach.

Да, но паттерн-матчинг — это совсем не про функциональную парадигму, это про более удобный switch. Тормозят-то тут как раз функциональные элементы в виде функций высшего порядка (передача FizzBuzz в Select).


Т. е. в данном конкретном примере кода мы теряем на:
1) аллокация энумератора для Enumerable.Range
2) виртуальный вызов MoveNext у энумератора Enumerable.Range
3) вызов метода FizzBuzz через делегат
4) аллокация энумератора у Select
5) виртуальный вызов MoveNext у энумератора Select
6) аллокация списка в ToList
7) вызов Console.WriteLine через делегат из ToList


Эти все вещи жрут производительность. Причём не так страшно, что именно чистую производительность (тут потери могут быть мизерными), как memory traffic.

Скрытый текст
    [MemoryDiagnoser]
    public class FizzBuzz
    {

        static void WriteLine(string s)
        {

        }

        [Benchmark]
        public void Normal()
        {
            for (var c = 1; c <= 100; c++)
            {
                if (c % 3 == 0)
                {
                    if(c%5==0)
                        WriteLine("FizzBuzz");
                    else
                        WriteLine("Fizz");
                }
                else if(c%5==0)
                    WriteLine("Buzz");
                else
                    WriteLine(c.ToString());
            }
        }

        [Benchmark(Baseline = true)]
        public void Functional()
        {
            string FizzBuzz(int x) => 
                (x % 3 == 0, x % 5 == 0) switch
                {  
                    (true, true) => "FizzBuzz", 
                    (true, _) => "Fizz", 
                    (_, true) => "Buzz", 
                    _ => x.ToString()
                };

            Enumerable.Range(1, 100 ) 
                .Select(FizzBuzz).ToList() 
                .ForEach(WriteLine); 
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run<FizzBuzz>();
            Console.WriteLine(summary);
        }
    }
просто позвольте ему это

Спасибо, но нет. Аналогичный код в "классическом" исполнении не занимается лишними аллокациями и вызовами через делегаты, что даёт существенно лучшую скорость и существенно меньшую нагрузку на GC:


|     Method |     Mean |     Error |    StdDev |  Gen 0 | Gen 1 | Gen 2 | Allocated |
|----------- |---------:|----------:|----------:|-------:|------:|------:|----------:|
|     Normal | 1.344 us | 0.0261 us | 0.0382 us | 0.2441 |     - |     - |    1.5 KB |
| Functional | 2.005 us | 0.0401 us | 0.0588 us | 0.4120 |     - |     - |   2.55 KB |

(результаты приведены при замене Console.WriteLine на заглушку)

Фреймы надо уметь готовить. Есть методика, позволяющая фреймом наложить на форму ввода прозрачные текстовые поля с уведомлением сайта мерчанта об их фокусе и валидности. Таким образом мерчант получает возможность стилизовать всю форму самостоятельно при этом не нуждаясь в аудите PCI DSS.

У Payment Request API есть серьёзный недостаток в виде невозможности использования его через iframe, что ведёт к необходимости держать форму на сайте мерчанта (вместо того чтобы встроить виджет от процессинга).
Получаем привет в виде необходимости магазину проходить аудит PCI DSS.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity