Вопрос по скорости работы со списками и взаимосвязь шаблонов

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Ребят подскажите кто работает на высоких скоростях)))
Есть 2 алгоритма.
Первый работает в 1 потоке, собирает ссылки и складывает их в список (таблицу). Работает в бесконечном цикле, проверяет каждые 0.1-0.2 сек.
Второй работает в многопотоке, берет из этого списка (таблицы) ссылки и переходит по ним. И после перехода уведомляет что перешел. Работает тоже в бесконечном цикле, проверяет (список/таблицу) на наличие новых ссылок каждые 0,1-0,2 сек.
Вопросы.
1. Что быстрее отрабатывает списки или таблицы? куда лучше складывать данные, чтобы скорость обработки была максимальной.
2. Можно ли вторым алгоритмом как то связываться с первым и говорить, что ок, переход состоялся. На текущий момент мысли "дозаписывать" что то в этот же список и проверять.
Спасибо.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 424
Благодарностей
3 338
Баллы
113
Разные шаблоны не должны работать с одним файлом одновременно. На данный момент, это возможно решить только через C#, используя общую блокировку.
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Разные шаблоны не должны работать с одним файлом одновременно. На данный момент, это возможно решить только через C#, используя общую блокировку.
Где можно почитать про эту блокировку? Как ее сделать.
Нашел статейку что-то похожее?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 424
Благодарностей
3 338
Баллы
113
Где можно почитать про эту блокировку? Как ее сделать.
Их всего 3, различаются только названиями. Потоки будут останавливаться, если конкретный объект уже используется.

Либо, использовать бд (как советуют ниже) с блокировкой на её стороне.
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 413
Баллы
113
Для максимальной скорости обработки нужно использовать БД.
Но можно и выкрутиться. Одним шаблоном чекаешь список на наличие новых и им же запускаешь копии второго, которые дергают ссылки уже не из файла. Хотя... не подойдет, наверное. Времени на компиляцию шаблона прилично уходит.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Их всего 3, различаются только названиями. Потоки будут останавливаться, если конкретный объект уже используется.

Либо, использовать бд (как советуют ниже) с блокировкой на её стороне.
БД для мне сложнее. Будем через блокировку идти. Получается перед каждой записью/чтением в двух разных шаблонов мне достаточно добавить 1 строчку кода?
C#:
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
// в моем примере это запись в программный список
project.Lists["название списка"].Add("Строка которую добавляем, в нашем случае ссылка");
}
Правильно я понял?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 424
Благодарностей
3 338
Баллы
113
БД для мне сложнее. Будем через блокировку идти. Получается перед каждой записью/чтением в двух разных шаблонов мне достаточно добавить 1 строчку кода?
C#:
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
}
Правильно я понял?
Нет, там где коментарий, вам потребуется написать код аналогичный экшену.
Если экшен поддерживает перевод в C#, можете его подсмотреть.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Нет, там где коментарий, вам потребуется написать код аналогичный экшену.
Если экшен поддерживает перевод в C#, можете его подсмотреть.
я чуть изменил свой вопрос, добавив для примера свою строчку кода. Посмотрите плиз, дублирую
C#:
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
// в моем примере это запись в программный список
project.Lists["название списка"].Add("Строка которую добавляем, в нашем случае ссылка");
}
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 424
Благодарностей
3 338
Баллы
113
я чуть изменил свой вопрос, добавив для примера свою строчку кода. Посмотрите плиз, дублирую
C#:
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
// в моем примере это запись в программный список
project.Lists["название списка"].Add("Строка которую добавляем, в нашем случае ссылка");
}
Да, должно работать. Потоки будут стопаться в очередь, во всех местах где используется FileSyncObjects.ListSyncer.Lock()
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Да, должно работать. Потоки будут стопаться в очередь, во всех местах где используется FileSyncObjects.ListSyncer.Lock()
Понял. Спс.
А что можете сказать по моим вопросам?
1. Что быстрее отрабатывает списки или таблицы? куда лучше складывать данные, чтобы скорость обработки была максимальной.
2. Можно ли вторым алгоритмом как то связываться с первым и говорить, что ок, переход состоялся. На текущий момент мысли "дозаписывать" что то в этот же список и проверять.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Да, должно работать. Потоки будут стопаться в очередь, во всех местах где используется FileSyncObjects.ListSyncer.Lock()
По всей видимости сам нашел ответы, поправьте если не прав.
1. работаю быстрее списке, но разница ничтожна мала чотбы задумываться над этим
2. можно, для этого и придумали глобальные переменные.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 703
Баллы
113
По всей видимости сам нашел ответы, поправьте если не прав.
1. работаю быстрее списке, но разница ничтожна мала чотбы задумываться над этим
2. можно, для этого и придумали глобальные переменные.
глобальные переменные тоже надо лочить.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
глобальные переменные тоже надо лочить.
Вот так?
C#:
lock(SyncObject)
    {
        работа с глобальной переменной
    }
Получается этот код, лочит работы всех глобальных переменных, так?
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Предположим у меня есть 2 глобальных переменных (var_global_1 и var_global_2) которые работаю в разных шаблонах. Я могу с ними работать только так?
C#:
lock(SyncObject)
    {
        работа с глобальной переменной var_global_1;
    }
lock(SyncObject)
    {
        работа с глобальной переменной var_global_2;
    }
или я могу работать вот так?

C#:
lock(SyncObject)
    {
        работа с глобальной переменной var_global_1;
        работа с глобальной переменной var_global_2;
    }
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 703
Баллы
113
практического примера нет у меня. поищи по форуму, было несколько тем по работе с глобальными переменными.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)