• Можно ли восстановить данные с SSD?

    @Drno
    самому восстановить врят ли.
    данные взять из бэкапа
    Ответ написан
    1 комментарий
  • Почему скорость разных языков разная?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Допустим нам нужно сложить два числа - 2 и 3

    На ассемблере:
    Кладем 2 в регистр ax, 3 - в регистр bx, выполняем команду сложения регистров - в результате у нас в ax ответ.
    Грубо говоря - у нас выполнились всего 3 команды на уровне процессора.

    На С:
    Сохранили значения регистров, сделали инициализации, выполнили 3 предыдущих команды сложения - восстановили значения регистров. Потратили уже как минимум на несколько команд больше на регистры/инициализацию.

    Некий высокоуровневый язык с динамической типизацией:
    Взяли переменную, преобразовали в число. Взяли вторую переменную - преобразовали в число. Вызвали некий класс, который умеет складывать целые числа, числа с плавающей точкой, конкатенировать строки и т.п. Передали эти две наши переменные. Помимо собственно складывания чисел выполняются явные и неявные преобразования, выполняются проверки на исключения, вызываются методы классов, которые умеют делать много операций, и прочее, выполняются первоначальные инициализации, оптимизации на лету, сохранение регистров и т.п...
    То есть для задачи складывания чисел используется уже на порядок больше команд процессора.
    Ответ написан
    Комментировать
  • Почему не завершается процесс?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    По существу вашего вопроса:

    Как вы думаете, если на телефоне вы набрали номер, а с той стороны была поднята трубка, то когда завершиться звонок?

    если еще не догадались

    звонок завершиться не раньше чем вы или тот кому вы звоните повесит трубку. Поэтому погуглите
    redis client.quit

    и
    redis client.end

    ну или почитайте тут

    ну и напоследок напомню, что иногда полезно читать документацию https://www.npmjs.com/package/redis
    Ответ написан
    2 комментария
  • Очень быстро лить в БД 1 млн. строк в секунду и настолько же быстро читать их. Как лучше осуществить?

    @Yury093
    Конечно может, вопрос в железе. И микроскопом можно забить гвоздь.
    Но на слова "хочу быстро вставлять и быстро читать потоком" так и хочется ответить "а зачем тебе БД?"

    Поэтому хотелось бы уточнить у автора: а вот кроме описанного "вставить миллион, считать миллион" - что предполагается делать с данными? Менять их построчно? Искать по какому-то ключу? это все надо? Если нет - я бы все же рекомендовал не использовать БД.

    Тут следует понимать что любая нормальная БД это [почти] всегда двойная запись на диск: вы пишите в таблицу И в лог базы данных. Именно поэтому файл или Kafka или иной MQ будет всегда быстрее.

    Ну а если БД все равно нужно - ну тогда BULK режимы вам в помощь. Обычно они используются для пакетной инициализирующей загрузки. В некоторых БД они на время своей работы могут отключать какие-то фичи или даже логирование в лог транзакций.
    ----------------------------
    Вообще по всем признакам в вашем случае идеальным будет вариант писать в MQ (RabbitMQ или Kafka или см аналоги), а уже из нее в БД. "Все так делают", по крайней мере в крупных компаниях это довольно типовое решение для подобных вашей задач. Причем БД в этой истории нужна только если вам потом нужно хранить и селектить. Если после первой операции данные вам более не нужны, либо нужен только бэкап, то БД не нужна - пишите в файл, пакуйте в zip (в энтерпрайзе - кидайте файлы в Hadoop в каком нибудь Parquet формате).
    Ответ написан
    1 комментарий
  • Как разбить числа по группам так, чтобы в группах находились близкие по значению числа?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Надо ввести какую-то метрику - какая-то числовая оценка, которая говорила бы вам, почему [[1,2],[3,4],[5,6]] лучше чем [[1,2,3,4],[5],[6]]. Например, можно взять максимальную разность двух чисел в любой группе. Или сумму квадратов расстояний от всех чисел до среднего в их группе. Или минимальное расстояние между числами в разных группах (это надо максимизировать).

    Потом можно применять какой-то из известных методов кластеризации, в зависимости от выбранной метрики. В случае одного измерения, как у вас (просто числа) можно еще применить и динамическое программирование. Этот метод работает для практически любой вменяемой метрики. Считайте функцию F(n,k) - лучшая возможная метрика если первые n чисел разбить на k групп. Для пересчета надо перебрать, сколько чисел идет в последнюю группу (i), и пересчитать метрику на основе F(n-i, k-1). из всех вариантов выбрать лучший.
    Ответ написан
    Комментировать
  • Как построить архитектуру приложения?

    @dmshar
    Дело в том, что если сейчас (как я понял, после аж полугода изучения программирования) вы начнете что-то читать по архитектуре программных систем - 90% информации, которую вы найдете вы просто не поймете.
    Ну например:
    https://habr.com/ru/post/276593/
    https://www.rea.ru/ru/publications/AttachmentsLibr...
    https://martinfowler.com/architecture/
    https://www.amazon.com/Fundamentals-Software-Archi...
    И это не ваша вина. Просто проектирование архитектуры - это не то, чем занимаются юниор-программисты. Для того, что-бы нормально спроектировать архитектуру мало знать язык программирования - надо знать еще очень много чего "вокруг". От баз данных до особенностей сценариев взаимодействия компонентов типа Peer-to-peer, Клиент-серверной и прочих (коих десятки) , от умения работать с требованиями до навыков написания технического проекта, от умения обосновать выбор (одной из многих) технологий реализации проекта до умения оценки качества программного продукта, от алгоритмизации до многопоточности, соответствующие инструменты (нотации) и очень много чего еще. Этому всему люди учатся годами. Даже в универах, на соответствующих специальностях вводный курс архитектуры ПО часто читают уже магистрам, и все равно этот курс весьма обзорный и ознакомительный. Поэтому не торопитесь. Займитесь пока усовершенствования своих базовых программистских навыков. И самообразованием в области компьютерных технологий. И наработкой практики. Вот когда вы это все освоите - вот тогда и можно будет задуматься о решении архитектурных задач.
    Ответ написан
    Комментировать
  • Почему у меня AMD Ryzen 3970 в 2-3 раза медленее Core i9 10850K?

    @thecove Автор вопроса
    Update Вопрос решен!
    С проблемой за 12 часов секаса удалось разобраться.
    В проекте использовалась самописная либа для ГСЧ на базе mt19937 и человек писавший ее лет 5 назад сделал ее потокобезопасной. Понапихав во все вызовы
    std::lock_guard guard(mMutex);

    Не знаю почему AMD на этих вызовах "отдыхал" дольше чем Intel но факт остается фактом. В два раза больше проц от красных терял времени чем синие. В итоге у синих 100% загрузка проца а у красных около 50.
    Как временное решение ( пока старую либу не переписали ) я в каждый поток добавил свой собственный класс Random на базе стандартного rand() / srand() из C++
    __declspec(thread) Random* random= nullptr;
    это решение на коленке. Но главное причина найдена и точность рассчетов не пострадала
    class Random
    {
    public:
    Random()
    {
     _rand_state = 0;
    }
    void srand(unsigned int const seed)
    {
        _rand_state = seed;
    }
    uint16_t rand()
    {
        _rand_state = _rand_state * 214013 + 2531011;
        return (_rand_state >> 16) & RAND_MAX;
    }
    private:
    uint32_t _rand_state; 
    }


    в итоге результат.
    Вот было:
    4 млн. итераций AMD 32 потока = 4,05 сек. Загрузка CPU 45%
    4 млн. итераций AMD 64 потока = 3,61 сек. Загрузка CPU 47%
    4 млн. итераций Intel 10 потоков = 4,01 сек. Загрузка CPU 75%
    4 млн. итераций Intel 20 потока = 2,61 сек. Загрузка CPU 100%


    после исправлений стало:
    4 млн. итераций AMD 32 потока = 1,25 сек. Загрузка CPU 60% ( 1 поток на физическое ядро )
    4 млн. итераций AMD 64 потока = 0,71 сек. Загрузка CPU 100% ( 1 поток на физическое ядро + HP )
    4 млн. итераций Intel 10 потоков = 2,8 сек. Загрузка CPU 70% ( 1 поток на физическое ядро )
    4 млн. итераций Intel 20 потока = 2,1 сек. Загрузка CPU 100% ( 1 поток на физическое ядро + HP )


    Как видно из нового теста AMD как и предсказывали все известные бенчмарки примерно в 3 раза производительнее чем Intel при полном использовании всех ядер.
    Тесты при загрузке на одно ядро у меня показывали что Intel на 15-20 процентов шустрее чем AMD
    Ответ написан
    Комментировать
  • Можно ли средствами Go (и его библиотек) отследить интернет трафик?

    Перехват трафика можно делать с помощью пакета https://github.com/google/gopacket
    Он основа на libpcap
    Ответ написан
    Комментировать
  • Почему массивы выводятся именно так?

    0xD34F
    @0xD34F
    Через запятую указываются не конкретные индексы, а задаётся интервал индексов. Первое число - начальный индекс, второе - сколько элементов надо взять. Читайте документацию.
    Ответ написан
    Комментировать
  • Ограничие asyncio task по памяти?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Задача совсем несложная, используйте очереди! https://docs.python.org/3/library/asyncio-queue.html
    Ответ написан
  • Как удобней работать с WCF из Delphi?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Ответ написан
    Комментировать
  • Как писать нормальный код на Го?

    axifive
    @axifive
    Software Engineer
    Ответ написан
    Комментировать
  • Какие есть алгоритмы упаковки прямоугольников?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Это классическая "задача о рюкзаке" https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D...
    Так же посмотри "2-Dimensional Strip Packing, 2DSP"
    https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D...
    https://en.wikipedia.org/wiki/Bin_packing_problem
    Ответ написан
    1 комментарий
  • Почему парсинг на Golang тратит больше времени для выполнения работы, чем парсинг на Python?

    @kirillinyakin
    Судя по коду на голанге вы посещаете каждую страницу, а на питоне вы просто получаете атрибут href
    Ответ написан
    1 комментарий
  • Как категоризировать набор слов?

    @imageman
    Я так понимаю, что категории у тебя собственные, не такие, как у авторов нейросетей?

    Мне кажется (могу ошибаться) тебе следует набрать ключевые слова для каждой категории. По этим ключевым словам получаем вектор на предобученной модели (запоминать среднеарифметический вектор?). Не исключено, что придется какие-то категории разбить на подкатегории (для более однородных векторов ключевых слов).

    Для искомого слова также получаем вектор, затем вычисляем расстояние (эвклидово, косинусное и т.п.). С какой категорией расстояние минимально - то наше.

    В fastText есть возможность классифицировать текст или перевести слова в вектор.
    https://gosha20777.github.io/tutorial/2018/04/12/f... вроде там вполне доходчиво. Как я вижу там нужно самому учить классификатор (я так понимаю ты хочешь использовать что-то предобученное?). Ну и ещё почитать https://sysblok.ru/nlp/kak-rabotaet-fasttext-i-gde...

    И если ничего не получается, то ищем автора https://habr.com/ru/post/489474/
    Ответ написан
    Комментировать
  • Почему при больших данных виснет asyncio?

    Vindicar
    @Vindicar
    RTFM!
    Ты грузишь весь миллион адресов в память, дважды.
    Первый раз, когда делаешь f.read(), потом в рамках .splitlines() создаётся копия (разбитая по кусочкам-строкам).
    Ну и да, миллион индивидуальных тасков - это тоже дохрена. asyncio ведь надо проверить, может ли тот или иной таск продолжить работу.

    Я бы сделал фиксированного размера пул тасков-воркеров , и заставил каждого воркера в цикле делать f.readline() самостоятельно, чтобы получить url для загрузки. И весь список в памяти хранить не надо, и контроль над количеством тасков получше.
    Ответ написан
    2 комментария
  • Как синхронизировать горутины?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Горутины синхронизировать/обмениваться данными можно при помощи каналов.
    У вас не очень удачный пример для обучения.
    Обычно есть горутина или несколько, которые получают данные и пишут их в канал и есть горутина или несколько, которые будут читать из канала.
    Читающие горутины будут получать данные из канала в той последовательности, в которой они туда попали.
    Ближе к реальности пример будет выглядеть вот так.
    Одна горутина пишет данные в канал, а две горутины по очереди извлекают данные.
    package main
    
    import (
        "fmt"
        "sync"
        "time"
    )
    
    func main() {
        var wg sync.WaitGroup
    
        num := make(chan int, 1000) // 1000 - размер буффера канала
    
        wg.Add(1)
        go func() {
            for i := 0; i < 1000; i++ {
                num <- i
                fmt.Printf("write to channel: %d\n", i)
                // задержка нужна только на время теста
                time.Sleep(100 * time.Microsecond)
            }
            close(num)
            wg.Done()
        }()
    
        wg.Add(1)
        go func() {
            for {
                val, ok := <-num
                if !ok {
                    break
                }
                fmt.Printf("goroutine 1 got: %d\n", val)
            }
            wg.Done()
        }()
    
        wg.Add(1)
        go func() {
            for {
                val, ok := <-num
                if !ok {
                    break
                }
                fmt.Printf("goroutine 2 got: %d\n", val)
            }
            wg.Done()
        }()
    
        wg.Wait()
    }
    Ответ написан
    7 комментариев