Многопоточное использование ресурсов-текстовых файлов как списков


  • administrators

    @out

    В БАС есть 2 фичи:

    1. Во время выполнения синхронных операций выполняется только один поток и управление не может быть передано в другой, пока не будет вызвана асинхронная.
    2. Работа с глобальными переменными, работа со списками, циклы являются синхронными(но не получение ресурсов).

    Грубо говоря, если в коде нет функции, которая заканчивается на ! sleep(1000)! load("google.com")! и т. д., то она синхронная.

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

    Вот пример - такой код всегда будет выводить 0, если бы правило 1). не работало, он бы выводил не 0 значение.

    testglobalvars.xml

    Еще в будущем будет действие "Блокировка Потока" такое как игнорировать ошибки, только оно позволит блокировать кусок кода в котором есть асинхронные функции.



  • @support said in Многопоточное использование ресурсов-текстовых файлов как списков:

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

    меня вот что беспокоило:

    • работает 100 потоков
    • поток 1 получил значение с глобальной переменной
      -- опасная зона , идут остальные действия, не касающиеся глобальной пер.
    • поток 1 начал это значение распарсивать / проверять / выбирать не важно что, он работает с этим значением, которое сейчас находится в локальной переменной.
    • после того , как поток 1 взял что ему нужно и это удалил с этих значений, он записывать в глобальную уже измененный данные.

    так вот , во время "опасной зоны" потоки другие не смогут считать значение глобальной переменной? Потому что так и нужно, они не должны иметь возможность считать ее, иначе они получат те же данные, что и поток 1.


  • administrators

    @out said in Многопоточное использование ресурсов-текстовых файлов как списков:

    так вот , во время "опасной зоны" потоки другие не смогут считать значение глобальной переменной? Потому что так и нужно, они не должны иметь возможность считать ее, иначе они получат те же данные, что и поток 1.

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



  • @support очень гуд, спасибо! Теперь все прояснилось. Эти посты надо в закладки добавить )


  • administrators

    @out А еще лучше тему в вики дополнить про многопоточность. Но хочу добить фреймы сначала.



  • @out said in Многопоточное использование ресурсов-текстовых файлов как списков:

    так вот , во время "опасной зоны" потоки другие не смогут считать значение глобальной переменной? Потому что так и нужно, они не должны иметь возможность считать ее, иначе они получат те же данные, что и поток 1.

    Еще уточню на счет файлов. Возьмем примеры выше, только вместо глобальной переменной пусть будет файл, то к нему это также применимо ? :

    @support said in Многопоточное использование ресурсов-текстовых файлов как списков:

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

    Ведь чтение/запись в файл синхронные (ты вроде это писал где-то).


  • administrators

    @out Да, операции с файлами тоже синхронные.


  • administrators

    @out Исключение - поиск файлов, он асинхронный. Также хочу обратить внимание, что получение ресурсов тоже асинхронная операция. Так что ресурсы нужно сохранять в переменные до критической секции.



  • А выведение в лог и ожидание ("спать") - синхронные или асинхронные? Есть где-то инфа с делением всех действий на синхронные и асинхронные?



  • @Antonio said in Многопоточное использование ресурсов-текстовых файлов как списков:

    А выведение в лог и ожидание ("спать") - синхронные или асинхронные?

    Добавь эти действия, и открой вкладку Скрипт, если код действия будет заканчиваться на ! то оно асинхронное.



  • @santilo, спасибо!


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.