Динамическая многопоточность.

Поддержка
  • Доброго времени суток!

    Такая задача у меня стоит. Мне нужно реализовать динамическую многопоточность.
    То есть при каждом запуске скрипта может быть или 10 или 1 или 24 потока. Не уверен что такое можно реализовать в рамках одного скрипта, но всё же!

    В моём случае есть файл с разным количеством строк.
    Каждый поток должен обрабатывать свою строку! Так как поток принимает только ресурс или число, то я предположил, что нужно использовать парсинг строк файла в список и переменную "количество элементов в списке" я сохранил в совсем другой ресурс и его подключил в "количество потоков" и всё это в OnApplicationStart.
    По идее скрипт вначале должен считать "количество строк" в файле и сохранить в другой файл уже "число строк" и в этом другом файле будет "количество потоков".
    Естественно у меня ничего не получилось и BAS даже иногда крашил в процессе изобретения мной велосипеда.

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

    0_1487622662122_test_multi_treads.zip

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

  • @sitiros

    Такая задача у меня стоит. Мне нужно реализовать динамическую многопоточность.
    То есть при каждом запуске скрипта может быть или 10 или 1 или 24 потока. Не уверен что такое можно реализовать в рамках одного скрипта, но всё же!

    В начале работы потока определяете сколько потоков должно быть, если текущий номер потока больше чем нужное количество, вызываете действие fail c параметром Не перезапускать поток.

    Но такой подход является следствием выбора неправильной архитектуры. Достаточно просто использовать систему ресурсов. Каждый поток будет брать свою строку из файла и использовать ее. Если потоков будет больше, чем строк в файле, остальные потоки будут ждать пока ресурс освободится.

  • 0 Votes
    7 Posts
    495 Views
  • 0 Votes
    11 Posts
    1360 Views
  • 0 Votes
    8 Posts
    847 Views
  • 0 Votes
    3 Posts
    1309 Views
  • 0 Votes
    36 Posts
    24324 Views