Многопоточность

Поддержка
  • Есть вот такой вот проект:
    e1d329ca-eb60-4158-b909-ea452b734df6-image.png
    Вот лог:
    [942612856] [01:00:39] Поток №1 : 2
    [942612856] [01:00:39] Поток №2 : 2
    [942612856] [01:00:39] Поток №3 : 2
    [942612856] [01:00:39] Поток №4 : 2
    [942612856] [01:00:39] Поток №5 : 2
    [942612856] [01:00:42] Поток №1 : 3
    [942612856] [01:00:42] Поток №2 : 3
    [942612856] [01:00:42] Поток №3 : 3
    [942612856] [01:00:42] Поток №4 : 3
    [942612856] [01:00:42] Поток №5 : 3
    [942612856] [01:00:45] Поток №1 : 4
    [942612856] [01:00:45] Поток №2 : 4
    [942612856] [01:00:45] Поток №3 : 4
    [942612856] [01:00:45] Поток №4 : 4
    [942612856] [01:00:45] Поток №5 : 4

    Как мне сделать, чтобы потоки выводили числа по порядку?

  • @gr34ka said in Многопоточность:

    Есть вот такой вот проект:
    Вот лог:
    [942612856] [01:00:39] Поток №1 : 2
    [942612856] [01:00:39] Поток №2 : 2
    [942612856] [01:00:39] Поток №3 : 2
    [942612856] [01:00:39] Поток №4 : 2
    [942612856] [01:00:39] Поток №5 : 2
    [942612856] [01:00:42] Поток №1 : 3
    [942612856] [01:00:42] Поток №2 : 3
    [942612856] [01:00:42] Поток №3 : 3
    [942612856] [01:00:42] Поток №4 : 3
    [942612856] [01:00:42] Поток №5 : 3
    [942612856] [01:00:45] Поток №1 : 4
    [942612856] [01:00:45] Поток №2 : 4
    [942612856] [01:00:45] Поток №3 : 4
    [942612856] [01:00:45] Поток №4 : 4
    [942612856] [01:00:45] Поток №5 : 4

    Как мне сделать, чтобы потоки выводили числа по порядку?

    Используйте ресурсы

  • Глобальная переменная ? не а ?
    Ну то есть можно сделать глобальную переменную, а в потоках ее увеличивать и выводить например. Запуск потоков лучше сделать с небольшой задержкой.
    Получаем номер потока и кратно увеличиваем задержку.
    Но скорее всего все равно собьется, так как время выполнения каждого потока изменится.

  • @Fox said in Многопоточность:

    Используйте ресурсы

    Ресурсы гарантируют атомарность операций? Но даже если они это и гарантируют и в каждом потоке выводится в лог переменная, не факт, что потоки будут ее выводить в том же порядке, что и взяли данные из ресурса. Или я не прав?

  • @sergerdn said in Многопоточность:

    @Fox said in Многопоточность:

    Используйте ресурсы

    Ресурсы гарантируют атомарность операций? Но даже если они это и гарантируют и в каждом потоке выводится в лог переменная, не факт, что потоки будут ее выводить в том же порядке, что и взяли данные из ресурса. Или я не прав?

    ресурсы это по сути просто объект в глобальной видимости с блокировкой на время использования, в нём есть параметры успехных и неуспешных использований, времени повторного использования и т.д.

  • @Fox said in Многопоточность:

    @sergerdn said in Многопоточность:

    @Fox said in Многопоточность:

    Используйте ресурсы

    Ресурсы гарантируют атомарность операций? Но даже если они это и гарантируют и в каждом потоке выводится в лог переменная, не факт, что потоки будут ее выводить в том же порядке, что и взяли данные из ресурса. Или я не прав?

    ресурсы это по сути просто объект в глобальной видимости с блокировкой на время использования, в нём есть параметры успехных и неуспешных использований, времени повторного использования и т.д.

    Ясно, гарантируют. Но каждый поток же не будет гарантированно выводить данные из ресурса в лог, в том же порядке, что потоки взяли? Особенно после sleep?

    P.S.
    Вопрос основан на том, что sleep в Javascript гарантирует, что будет "бездействие" в течении минимум определенного времени. То есть если спать три секунды - можно проспать и сильно больше(можно и пять), но точнее не менее трех. Или я ошибаюсь?

    P.P.S.
    Я думаю, что задача топикастера невыполнима простым способом - выводить данные в лог в том же порядке, в котором потоки их получили без каких-то костылей с синхронизацией.

  • @sergerdn said in Многопоточность:

    Ясно, гарантируют. Но каждый поток же не будет гарантированно выводить данные из ресурса в лог, в том же порядке, что потоки взяли? Особенно после sleep?

    Эмм.. разумеется нет, иначе это было бы некорректная работа кода

    Вопрос основан на том, что sleep в Javascript гарантирует, что будет "бездействие" в течении минимум определенного времени. То есть если спать три секунды - можно проспать и сильно больше(можно и пять), но точнее не менее трех. Или я ошибаюсь?

    BAS проверяет время сна раз в 10 или в 100мс, так что пять секунд вместо трёх проспать точно не получится

    Я думаю, что задача топикастера невыполнима простым способом - выводить данные в лог в том же порядке, в котором потоки их получили без каких-то костылей с синхронизацией.

    если между взятием данных из ресурса и выводом их в лог не будет каких нибудь действий, которые могут иметь разное время работы для разных потоков (например "Загрузить" или "Спать" со случайным временем) то выводится в лог данные будут в точно таком же порядке, в каком были взяты.

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

  • Не понимаю, как можно решить задачу ресурсами.

    Есть действие "Случайная строка" 1234 по 4 и действие "Лог", которое выводит полученные цифры. Как решить задачу:

    Если число ранее выводилось в лог, необходимо перегенерировать его и если его не было в логе вывести

  • @gr34ka не понимаю для чего вам этот порядковый лог, но без ошибок это не реализовать, рано или поздно два потока сработает одновременно и выдадут одинаковые цифры либо скрипт выплюнет ошибку.