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

arbplv

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

Либо, использовать бд (как советуют ниже) с блокировкой на её стороне.
 
Для максимальной скорости обработки нужно использовать БД.
Но можно и выкрутиться. Одним шаблоном чекаешь список на наличие новых и им же запускаешь копии второго, которые дергают ссылки уже не из файла. Хотя... не подойдет, наверное. Времени на компиляцию шаблона прилично уходит.
 
Их всего 3, различаются только названиями. Потоки будут останавливаться, если конкретный объект уже используется.

Либо, использовать бд (как советуют ниже) с блокировкой на её стороне.
БД для мне сложнее. Будем через блокировку идти. Получается перед каждой записью/чтением в двух разных шаблонов мне достаточно добавить 1 строчку кода?
C#:
Развернуть Свернуть Копировать
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
// в моем примере это запись в программный список
project.Lists["название списка"].Add("Строка которую добавляем, в нашем случае ссылка");
}
Правильно я понял?
 
БД для мне сложнее. Будем через блокировку идти. Получается перед каждой записью/чтением в двух разных шаблонов мне достаточно добавить 1 строчку кода?
C#:
Развернуть Свернуть Копировать
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
}
Правильно я понял?
Нет, там где коментарий, вам потребуется написать код аналогичный экшену.
Если экшен поддерживает перевод в C#, можете его подсмотреть.
 
Нет, там где коментарий, вам потребуется написать код аналогичный экшену.
Если экшен поддерживает перевод в C#, можете его подсмотреть.
я чуть изменил свой вопрос, добавив для примера свою строчку кода. Посмотрите плиз, дублирую
C#:
Развернуть Свернуть Копировать
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
// в моем примере это запись в программный список
project.Lists["название списка"].Add("Строка которую добавляем, в нашем случае ссылка");
}
 
я чуть изменил свой вопрос, добавив для примера свою строчку кода. Посмотрите плиз, дублирую
C#:
Развернуть Свернуть Копировать
using (FileSyncObjects.ListSyncer.Lock())
{
//тут работа со списками чтение/добавление
// в моем примере это запись в программный список
project.Lists["название списка"].Add("Строка которую добавляем, в нашем случае ссылка");
}
Да, должно работать. Потоки будут стопаться в очередь, во всех местах где используется FileSyncObjects.ListSyncer.Lock()
 
Да, должно работать. Потоки будут стопаться в очередь, во всех местах где используется FileSyncObjects.ListSyncer.Lock()
Понял. Спс.
А что можете сказать по моим вопросам?
1. Что быстрее отрабатывает списки или таблицы? куда лучше складывать данные, чтобы скорость обработки была максимальной.
2. Можно ли вторым алгоритмом как то связываться с первым и говорить, что ок, переход состоялся. На текущий момент мысли "дозаписывать" что то в этот же список и проверять.
 
Да, должно работать. Потоки будут стопаться в очередь, во всех местах где используется FileSyncObjects.ListSyncer.Lock()
По всей видимости сам нашел ответы, поправьте если не прав.
1. работаю быстрее списке, но разница ничтожна мала чотбы задумываться над этим
2. можно, для этого и придумали глобальные переменные.
 
По всей видимости сам нашел ответы, поправьте если не прав.
1. работаю быстрее списке, но разница ничтожна мала чотбы задумываться над этим
2. можно, для этого и придумали глобальные переменные.
глобальные переменные тоже надо лочить.
 
глобальные переменные тоже надо лочить.
Вот так?
C#:
Развернуть Свернуть Копировать
lock(SyncObject)
    {
        работа с глобальной переменной
    }
Получается этот код, лочит работы всех глобальных переменных, так?
 
Предположим у меня есть 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;
    }
 
практического примера нет у меня. поищи по форуму, было несколько тем по работе с глобальными переменными.
 

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