|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
Есть кусок кода, который работает нормально для случая с одним заданием (типа логгера): Создается таблица РЕЗУЛЬТАТ, куда будет писаться результат (при запуске формы), при закрытии она уничтожается. По таймеру процедура делает селект и какое-то количество записей кидает в РЕЗУЛЬТАТ, причем еще и проверяет эту таблицу РЕЗУЛЬТАТ (то есть выполняет и апдейт и инсерт и делит). Инициализация таблицы РЕЗУЛЬТАТ должна быть произведена до циклов записи. Скопировал второй такой же набор. Минусы - если первый запрос делается минуту, второй ждет. Решил сделать параллельно. Сразу нарисовалась проблема таблица РЕЗУЛЬТАТ должна быть снаружи потока (она потом будет обрабатываться). Из потока и в таблицу? Некрасиво. Ок. Вариант второй - РЕЗУЛЬТАТ в потоке (и первый раз - инициаоизация данными). Тогда и поток должен жить пока программа открыта. Так стОит делать? Больгое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 10:05 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
bzums, Ничего не понятно, но очень интересно. Афтар, пеши исчо! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 10:12 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Код для одного задания. Работает нормально. Хочу добваить второе задание. Что если таблица res будет вне потока и поток будет к ней обращаться часто? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 10:35 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
имхо, тут программист нужен. © Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:33 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
bzums Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
А в чём проблема-то вкратце? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:48 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
ПРимер написан на коленке, не отражает истинное положение кода, просто краткое переложение архитектуры. Однако Вкратце: код вполне рабочий, но все работает в одном потоке. Проблема в том, что мне нужно сделать такое (распараллелить) для произвольного количества. Отсюда проблемма - результирующая табоица за пределами потока, ася логика - в потоке. И из потока часто надо лазить в таблицу результат. Второй вариант - все запихать в поток - приведет к тому, что пток будет жить (получается много потоков) пока программа (по своей сути она наблюдает изменение другой таблицы) открыта. Нормальное ли такой решение? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 16:04 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
bzums ПРимер написан на коленке, не отражает истинное положение кода, просто краткое переложение архитектуры. Однако Вкратце: код вполне рабочий, но все работает в одном потоке. Проблема в том, что мне нужно сделать такое (распараллелить) для произвольного количества. Отсюда проблемма - результирующая табоица за пределами потока, ася логика - в потоке. И из потока часто надо лазить в таблицу результат. Второй вариант - все запихать в поток - приведет к тому, что пток будет жить (получается много потоков) пока программа (по своей сути она наблюдает изменение другой таблицы) открыта. Нормальное ли такой решение? Спасибо. тут описание задачи уже какое-то радужное не очень понятно, что нужно сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 16:20 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
Совсем утрированный пример, описывающий функцию ( работает по таймеру раз в 10 минут ). Функция сравнивает два селекта по одной и той же таблице по тем же параметрам. На предмет изменений. 1. Инициализация. Сделали селект и записали в таблицу "Результ". 2. Через 10 минут второй селект. 3. В цикле построчно, постолбцово проверяем на предмет различия, а также на предмет удаления и добавления строк. 4. Обновляем таблицу результат, чтобы она отражала текущее значение. 5. Через 10 минут сначала. Если все 5 шагов засунуть в поток, то не произвести инициализацию. Или поток должен висеть постоянно. Если в поток пихать все кроме первого шага - то какая-то фигня. Есть выход? Большое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 17:19 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
не проще модифицировать таблицу так чтобы всегда можно было достать дельту с последнего забора данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 17:24 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
Таблицы как таковой нет. Это собственный формат, близкий к тексту. С некоторыми изменениями. Есть некий драйвер который даёт датасет. Этот вариант вполне рабочий для одного набора. Второй ждёт в очереди, получается. Надо распараллелить. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 17:28 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
bzums, обычно, что бы второй поток не ждал, если у него свои данные, то он создает второе независимое подключение и все, вопрос решен... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 18:06 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
Мне с первым потоком непонятно что делать :-) Логика построена таким образом, что вне потока огромный набор ( и он должен быть ) и в потоке он же самый практически. И их надо сравнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 20:20 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
Если TkbmMemTable 100 процентов потокобезопасна, то могу ли я использовать ее из потока, если она сама находится вне потока? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 20:36 |
|
PPL, параллельное выполнение кода
|
|||
---|---|---|---|
#18+
bzums Если TkbmMemTable 100 процентов потокобезопасна, то могу ли я использовать ее из потока, если она сама находится вне потока? можно, но не напрямую а с эвентами, оконными сообщениями, мютексами, используя Lock. Самое дубовое и простое использовать TCriticalSection, но при множестве потоков это становится узким горлышком и вся многопоточность летит в трубу. Самое быстрое это использовать эвенты и оконные сообщения PostMessage. Но для твоей задачи хватит и TCriticalSection. Расписывать что и как это долго и муторно раз с потоками не работал, почитай лучше учебники. В последних делфях есть модуль THReading, упрощает работу с потоками. Но без знания базы можно выстрелить себе в ногу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 17:45 |
|
|
start [/forum/topic.php?fid=58&msg=40087850&tid=2037135]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 432ms |
0 / 0 |