|
|
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
Есть несколько процессов, которые выполняют какую-то работу. При этом выполняют они её последовательно, т.е. один процесс выполнил - передаёт какому-то другому, но тот сейчас может быть занят или вообще не запущен. В связи с этим хочется как-то организовать очередь, но простой файлик а-ля xml не подойдёт, т.к. требуется: a) Синхронный доступ: пока один процесс пишет туда задание второй в этот момент может попытаться удалить существующее; б) Т.к. записи будут часто удаляться, то требуется чтобы размер файла не увеличивался из-за "мусора". Напрашивается, конечно, какая-нибудь БД, но ради базы на 3-4 таблички с парой десятков записей поднимать сервер БД не особо хочется. Тут на ум приходит какой-нибудь FB Embedded, но как у него с пунктом б) дела обстоят? И вообще, может это можно решить как-то более изящно, просто я не в курсе?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 11:24 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
alekcvpВ связи с этим хочется как-то организовать очередь, но простой файлик а-ля xml не подойдёт, т.к. требуется: a) Синхронный доступ: пока один процесс пишет туда задание второй в этот момент может попытаться удалить существующее; б) Т.к. записи будут часто удаляться, то требуется чтобы размер файла не увеличивался из-за "мусора". В принципе это всё решается одним мутексом, но я бы сделал так: 1) Каждое задание - отдельный файл. 2) Очередь - отдельный каталог. Процесс читает свои задания из каталога-очереди и выполняет их. Выполнил - положил результат в выходной каталог, удалил задание из входного. Естественно, запись файла в выходной каталог должна быть атомарна. Самый простой способ - писать во временный файл, в конце его переименовывать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 11:33 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
alekcvpб) Т.к. записи будут часто удаляться, то требуется чтобы размер файла не увеличивался из-за "мусора". ... skipped ... на ум приходит какой-нибудь FB Embedded, но как у него с пунктом б) дела обстоят? Как и во всех БД. Данные пишутся на страницы, которые доступны в БД. Т.е. записали данные, удалили - страницы б БД пометились как неиспользуемые - новые данные будут записаны туда (на неиспользуемые страницы). Если неиспользуемых страниц нет - страницы будут добавлены в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 11:37 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Папки, файлы, синхронизацию самому писать придётся... DarkMasterДанные пишутся на страницы, которые доступны в БД. Т.е. записали данные, удалили - страницы б БД пометились как неиспользуемые - новые данные будут записаны туда (на неиспользуемые страницы). Если неиспользуемых страниц нет - страницы будут добавлены в БД.Ну то есть, в теории, он устаканится на каком-то среднем размере. Кажется самое оно. Только, наверное, sqlite больше подойдёт. schi, Посмотрю, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 11:59 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
alekcvpПапки, файлы, синхронизацию самому писать придётся... Папки и файлы надёжны. Синхронизация не нужна. Но если ты любитель модных технологий - ZeroMQ, например, тебе в руки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:06 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПапки и файлы надёжны. Синхронизация не нужна. Это если они хранятся на локальном компьютере. А если это разные программы, выполняемые на разных компьютерах и обмениваются информацией через файлы, то с надёжностью возможны варианты. Пример: firebird (старый, 2.0). Даю ему команду сделать бэкап базы данных на сервере (через компоненты IBX), он эту команду выполняет успешно, а файла нету, функция FileExists начинает его обнаруживать только спустя 5 секунд после бэкапа. Вот такие глюки появились после Windows 8. Что интересно, проявляется такой глюк только если перерыв между бэкапами более 30 секунд и размер исходной базы данных около 17 МБайт. Но думаю, что непосредственно к firebird это отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 12:58 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
DmSerВот такие глюки появились после Windows 8 Такие глюки всегда были. Например, году в 2002-м мне пришлось решать подобную проблему отключением антивируса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 13:05 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
DmSerдумаю, что непосредственно к firebird это отношения не имеет. Это ты зря думаешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 13:06 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
В такой же схеме я пришел к варианту из #2. Самое простое и надежное. Разумеется, обе программы на одной машине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2018, 18:53 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
alekcvpно ради базы на 3-4 таблички с парой десятков записей старый добрые DBF-файлы ? Dimitry Sibiryakov1) Каждое задание - отдельный файл. в данном случае - подкаталог внутри каталога-очереди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 11:59 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
Ariochстарый добрые DBF-файлы ? 1. А они умеют в многопользователя из разных приложений? 2. В чём преимущество перед sqlite? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 13:11 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
Свежий TSharingContract не подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 13:40 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
X-CiteСвежий TSharingContract не подойдет? Win10 only. Но вообще я пока на sqlite остановился, как до реализации дойдет там буду смотреть на нюансы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 14:11 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
alekcvpAriochстарый добрые DBF-файлы ? 1. А они умеют в многопользователя из разных приложений? 2. В чём преимущество перед sqlite? 1. Под BDE умеют, под TDbf и vkDBF вряд ли. Но зачем это надо, при синхронизации "переименованием файлов" ? Встречный вопрос, а как у SQLite с "многопользователя из разных приложений" ? 2. Более распространённый формат - больше сторонних просмотрщиков, например (представь ситуацию, что очередь себя ведёт странно, не так как ожидается; как эникейщик без дебаггера и исъходников будет проводить первичную диагностику?). Более примитивный формат - меньше накладных расходов на чтение/запись (ну вот нафига тебе для одноразового буфера - проверка foreign keys и прочих constraints? или ACIDness?). Наконец, более-менее стандартный формат - не будет в принципе возможных накладок типа "у двух программ разные версии SQLite". В общем, это альтернатива скорее для alekcvpпростой файлик а-ля xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 14:24 |
|
||
|
Передача задач между процессами
|
|||
|---|---|---|---|
|
#18+
IMHO "совместная одновременная работа над одним документом в одном документохранилище" не называется "очередью" и "передачей" alekcvpодин процесс выполнил - передаёт какому-то другому alekcvpВ связи с этим хочется как-то организовать очередь Но если нужно таки сделать общую среду - то почему бы не использовать полноценный и отдельный сервер БД, тот же Firebird или MS SQL Express? Зачем тогда embedded? Вдовесок сможешь получить событий Firebird'a, когда сервер может сам сигналить приложениям "новое событие для 3-го шага очереди". Не помню, работают ли Windows Change Notificaiotns при переименовании папок в расшаренных папках. В общем, исходя из твоей неизвестной нам задачи - либо у тебя очередь, либо "shared data", IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2018, 14:31 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39683733&tid=2040557]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 544ms |

| 0 / 0 |
