Задать вопрос
  • Как повторять цикл в дочернем потоке с заданным интервалом для последних актуальных данных?

    @TicSo Автор вопроса
    Дмитрий Беляев, спасибо. Ваша информация на пользу. Думал у меня реализовано дергать канал, как в примере выше, - не чаще одного раза в 10 - 20 секунд при вводе данных, а главное хотел реализовать этот режим отдельного потока так, чтобы при отсутствии изменения данных вектора, - этот отдельный поток работал с последним актуальным набором данных. Может, передавать флаг, - что изменений нет.

    Я не против Arc, просто привёл код, что делал ранее и на чём забуксовал.

    Не смог подружить требуемую логику работы потоков между собой.
    Буду Вам очень благодарен, если приведёте пример кода. Спасибо.
    Написано
  • Как повторять цикл в дочернем потоке с заданным интервалом для последних актуальных данных?

    @TicSo Автор вопроса
    Дмитрий Беляев, опыта нет спасибо, думал что вариант через каналы будет всегда выигрывать по времени выполнения при правильном подходе, поэтому оба варианта интересны ... пытаюсь.

    в отдельный поток имеет смысл выносить не вывод состояния вектора, а ввод из stdin

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

    @TicSo Автор вопроса
    Может `развязывать` два режима работы не нужно, а сохранять результат работы отдельного потока в структуру, выводить в файл? Мне этот вывод в консоль нужен только, чтобы убедиться в правильности работы отдельного потока по заданным требованиям.
    Написано
  • Как задать переменной тип с данными в зависимости от условия?

    @TicSo Автор вопроса
    historydev,
    даже в названиях структур логические ошибки

    вы можете показать эти ошибки
    и
    тестовый рабочий пример?
    Написано
  • Как задать переменной тип с данными в зависимости от условия?

    @TicSo Автор вопроса
    В функции create_user приложения AXUM
    получаю данные в формате json так:
    async fn create_user(
       State(state): State<AppState>, 
       // Json(json): Json<Submission>,
       Json(json): Json<Value>, 
    ) -> (StatusCode, Json<User>) {
    // ...

    Т.к. принимаю json с разными данными, то под них есть соответствующие структуры,
    которые и хочу в зависимости от конкретного типа json в этой функции подставлять.
    Написано
  • Как внести данные из приложения AXUM в вектор?

    @TicSo Автор вопроса
    понятно, спасибо.
    Написано
  • Как внести данные из приложения AXUM в вектор?

    @TicSo Автор вопроса
    да, накосячил. Спасибо.
    Написано
  • Как вставить в примечание к ячейке текст из буфера обмена?

    @TicSo Автор вопроса
    Refguser, я так сразу пробовал, знаю про "Ctrl+Shift+V", но не работает. Как только курсором фокус попадает на поле примечания - эффект выделенной курсивом области, которую скопировал, - СРАЗУ пропадает. Ну и не вставляет уже никакими командами ...
    Написано
  • Как вставить в примечание к ячейке текст из буфера обмена?

    @TicSo Автор вопроса
    Да, через блокнот получилось, спасибо. Жаль, что сам интерфейс не даёт,
    там выбор `Параметры вставки` не активно:
    674ef1b1efa12766977501.png
    Написано
  • Как вставить в примечание к ячейке текст из буфера обмена?

    @TicSo Автор вопроса
    Я не совсем понял Ваш совет.
    У меня получается, если все строки преобразовать в одну строку, например онлайн. Но не знаю какой разделитель выбрать, чтобы получить в примечании
    опять строки. Типа <бр> ... Вот спрашиваю. Спасибо.
    Написано
  • Как в код сервера axum внести счётчик ответов на запросы клиента из браузера?

    @TicSo Автор вопроса
    Дмитрий Беляев Дмитрий Беляев, спасибо большое, работает как нужно.
    Написано
  • Как удалить таблицу из базы postgresql, подставляя имя из переменной?

    @TicSo Автор вопроса
    По имени таблицы понятно.
    У меня не получается через параметр передать: имя поля и тип поля.
    Вот так не работает:
    let _ = &client.query("CREATE TABLE IF NOT EXISTS public.test_01 ($1 $2, CONSTRAINT test_01_pkey PRIMARY KEY ($3))", &[&name_column[0], &column_datatype[0], &name_column[0]]).await?;

    и так:
    let _ = &client.query("CREATE TABLE IF NOT EXISTS public.test_01 ($1::TEXT smallserial, CONSTRAINT test_01_pkey PRIMARY KEY (id_test_01))", &[&"id_test_01"]).await?;
    Написано
  • Как удалить таблицу из базы postgresql, подставляя имя из переменной?

    @TicSo Автор вопроса
    Ivan Ustûžanin, понятно .. спасибо
    по Вашей рекомендации так работает:
    let x: &str = &("DROP TABLE IF EXISTS".to_string() + " " + &name_schema_tb);
       let _ = &client.query(x, &[]).await?;
    Написано
  • Как поправить код, чтобы улучшить расхождения времени его выполнения?

    @TicSo Автор вопроса
    Василий Банников, так я на трёхстах повторениях и получил расхождение большое, о чем исходный вопрос и задал ...
    Написано
  • Как поправить код, чтобы улучшить расхождения времени его выполнения?

    @TicSo Автор вопроса
    Тогда я неправильно измеряю время каждого повторения, т.е. внешней итерации вот этого всего цикла:
    внешний цикл
    loop {
          if j == RING {break};
          let start = Instant::now();
          //
          loop {
             if i == len_01 {break};
             if vec_01[i] % 2 == 0 {
                vec_chet.push(vec_01[i]);
                count_chet = count_chet + 1;
             }else{
                vec_nech.push(vec_01[i]);
                count_nech = count_nech + 1;
             }
             i = i + 1;
          }
          //
          i = 0;
       //
       j = j + 1;
       let duration = start.elapsed();
       // println!("{:?}. время выполнения цикла = {:?} наносек. = {:?}", j, duration, duration.subsec_nanos() as u64);
       //
       if (duration.subsec_nanos() as u64) > t01 {
          t01 = duration.subsec_nanos() as u64;
       }
       if (duration.subsec_nanos() as u64) < t02 {
          t02 = duration.subsec_nanos() as u64;
       }
       //
       }

    Потому что здесь:
    println!("{:?}. время выполнения цикла = {:?} наносек. = {:?}", j, duration, duration.subsec_nanos() as u64);

    совпадает `duration` и `duration.subsec_nanos() as u64`
    например

    Это можно видеть и в текущем коде, например, на 10 элементов массива и 8 повторений:
    vec_01 = [153, 50, 214, 252, 196, 17, 123, 20, 64, 146]
    1. время выполнения цикла = 1.5µs наносек. = 1500
    2. время выполнения цикла = 1.9µs наносек. = 1900
    3. время выполнения цикла = 1µs наносек. = 1000
    4. время выполнения цикла = 1µs наносек. = 1000
    5. время выполнения цикла = 900ns наносек. = 900
    6. время выполнения цикла = 900ns наносек. = 900
    7. время выполнения цикла = 900ns наносек. = 900
    8. время выполнения цикла = 900ns наносек. = 900
    кол-во элементов массива `vec_01`, которые обрабатываю в цикле = 10
    кол-во повторов = 8
    count_chet = 56
    count_nech = 24
    time_min = 900 time_max = 1900

    Массив на 1000 элементов 30 повторений тоже считает правильно,
    второй цикл из 30 дал минимальное время и 24-й цикл - максимальное:
    30 на 1000

    1. время выполнения цикла = 31.8µs наносек. = 31800
    2. время выполнения цикла = 31.6µs наносек. = 31600
    3. время выполнения цикла = 31.7µs наносек. = 31700
    4. время выполнения цикла = 33.3µs наносек. = 33300
    5. время выполнения цикла = 44.2µs наносек. = 44200
    6. время выполнения цикла = 43.9µs наносек. = 43900
    7. время выполнения цикла = 44.5µs наносек. = 44500
    8. время выполнения цикла = 42.7µs наносек. = 42700
    9. время выполнения цикла = 42.5µs наносек. = 42500
    10. время выполнения цикла = 42.5µs наносек. = 42500
    11. время выполнения цикла = 43.1µs наносек. = 43100
    12. время выполнения цикла = 42.5µs наносек. = 42500
    13. время выполнения цикла = 33.5µs наносек. = 33500
    14. время выполнения цикла = 42.9µs наносек. = 42900
    15. время выполнения цикла = 33.2µs наносек. = 33200
    16. время выполнения цикла = 34µs наносек. = 34000
    17. время выполнения цикла = 32.1µs наносек. = 32100
    18. время выполнения цикла = 33.2µs наносек. = 33200
    19. время выполнения цикла = 33.4µs наносек. = 33400
    20. время выполнения цикла = 32.6µs наносек. = 32600
    21. время выполнения цикла = 31.6µs наносек. = 31600
    22. время выполнения цикла = 33.2µs наносек. = 33200
    23. время выполнения цикла = 43.4µs наносек. = 43400
    24. время выполнения цикла = 50.5µs наносек. = 50500
    25. время выполнения цикла = 32.7µs наносек. = 32700
    26. время выполнения цикла = 31.6µs наносек. = 31600
    27. время выполнения цикла = 32.1µs наносек. = 32100
    28. время выполнения цикла = 33.6µs наносек. = 33600
    29. время выполнения цикла = 33.1µs наносек. = 33100
    30. время выполнения цикла = 35.9µs наносек. = 35900
    кол-во элементов массива `vec_01`, которые обрабатываю в цикле = 1000
    кол-во повторов = 30
    count_chet = 15210
    count_nech = 14790

    time_min = 31600 time_max = 50500
    Написано
  • Как поправить код, чтобы улучшить расхождения времени его выполнения?

    @TicSo Автор вопроса
    Василий Банников,
    1. Бенчмаркать нужно на одном и том же наборе данных.
    В примере кода делаю 300 повторений над одним и тем же набором данных.
    Написано
  • Как поправить код, чтобы улучшить расхождения времени его выполнения?

    @TicSo Автор вопроса
    Например, если вектор на 100к элементов:
    статистика

    кол-во элементов массива `vec_01`, которые обрабатываю в цикле = 100000
    кол-во повторов = 300
    count_chet = 14976300
    count_nech = 15023700
    time_min = 2955500 time_max = 8525500

    кол-во элементов массива `vec_01`, которые обрабатываю в цикле = 100000
    кол-во повторов = 300
    count_chet = 15050100
    count_nech = 14949900
    time_min = 2956200 time_max = 8764100

    кол-во элементов массива `vec_01`, которые обрабатываю в цикле = 100000
    кол-во повторов = 300
    count_chet = 14978700
    count_nech = 15021300
    time_min = 2957000 time_max = 7772900

    кол-во элементов массива `vec_01`, которые обрабатываю в цикле = 100000
    кол-во повторов = 300
    count_chet = 15069600
    count_nech = 14930400
    time_min = 2960400 time_max = 8574400

    кол-во элементов массива `vec_01`, которые обрабатываю в цикле = 100000
    кол-во повторов = 300
    count_chet = 15016500
    count_nech = 14983500
    time_min = 2958300 time_max = 7579600
    Написано