powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача задач между процессами
16 сообщений из 16, страница 1 из 1
Передача задач между процессами
    #39682987
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько процессов, которые выполняют какую-то работу. При этом выполняют они её последовательно, т.е. один процесс выполнил - передаёт какому-то другому, но тот сейчас может быть занят или вообще не запущен. В связи с этим хочется как-то организовать очередь, но простой файлик а-ля xml не подойдёт, т.к. требуется:

a) Синхронный доступ: пока один процесс пишет туда задание второй в этот момент может попытаться удалить существующее;
б) Т.к. записи будут часто удаляться, то требуется чтобы размер файла не увеличивался из-за "мусора".

Напрашивается, конечно, какая-нибудь БД, но ради базы на 3-4 таблички с парой десятков записей поднимать сервер БД не особо хочется. Тут на ум приходит какой-нибудь FB Embedded, но как у него с пунктом б) дела обстоят?

И вообще, может это можно решить как-то более изящно, просто я не в курсе?..
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39682994
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpВ связи с этим хочется как-то организовать очередь, но простой файлик а-ля xml не
подойдёт, т.к. требуется:

a) Синхронный доступ: пока один процесс пишет туда задание второй в этот момент может
попытаться удалить существующее;
б) Т.к. записи будут часто удаляться, то требуется чтобы размер файла не увеличивался
из-за "мусора".

В принципе это всё решается одним мутексом, но я бы сделал так:
1) Каждое задание - отдельный файл.
2) Очередь - отдельный каталог.

Процесс читает свои задания из каталога-очереди и выполняет их. Выполнил - положил
результат в выходной каталог, удалил задание из входного.

Естественно, запись файла в выходной каталог должна быть атомарна. Самый простой способ -
писать во временный файл, в конце его переименовывать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39682996
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpб) Т.к. записи будут часто удаляться, то требуется чтобы размер файла не увеличивался из-за "мусора".
... skipped ...
на ум приходит какой-нибудь FB Embedded, но как у него с пунктом б) дела обстоят?



Как и во всех БД. Данные пишутся на страницы, которые доступны в БД. Т.е. записали данные, удалили - страницы б БД пометились как неиспользуемые - новые данные будут записаны туда (на неиспользуемые страницы). Если неиспользуемых страниц нет - страницы будут добавлены в БД.
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39682999
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683015
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Папки, файлы, синхронизацию самому писать придётся...
DarkMasterДанные пишутся на страницы, которые доступны в БД. Т.е. записали данные, удалили - страницы б БД пометились как неиспользуемые - новые данные будут записаны туда (на неиспользуемые страницы). Если неиспользуемых страниц нет - страницы будут добавлены в БД.Ну то есть, в теории, он устаканится на каком-то среднем размере. Кажется самое оно. Только, наверное, sqlite больше подойдёт.

schi,

Посмотрю, спасибо.
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683023
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpПапки, файлы, синхронизацию самому писать придётся...

Папки и файлы надёжны. Синхронизация не нужна.

Но если ты любитель модных технологий - ZeroMQ, например, тебе в руки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683051
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПапки и файлы надёжны. Синхронизация не нужна.

Это если они хранятся на локальном компьютере. А если это разные программы, выполняемые на разных компьютерах и обмениваются информацией через файлы, то с надёжностью возможны варианты.
Пример: firebird (старый, 2.0). Даю ему команду сделать бэкап базы данных на сервере (через компоненты IBX), он эту команду выполняет успешно, а файла нету, функция FileExists начинает его обнаруживать только спустя 5 секунд после бэкапа. Вот такие глюки появились после Windows 8. Что интересно, проявляется такой глюк только если перерыв между бэкапами более 30 секунд и размер исходной базы данных около 17 МБайт. Но думаю, что непосредственно к firebird это отношения не имеет.
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683055
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerВот такие глюки появились после Windows 8
Такие глюки всегда были. Например, году в 2002-м мне пришлось решать подобную проблему отключением антивируса.
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683056
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerдумаю, что непосредственно к firebird это отношения не имеет.

Это ты зря думаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683218
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В такой же схеме я пришел к варианту из #2. Самое простое и надежное. Разумеется, обе программы на одной машине.
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683639
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpно ради базы на 3-4 таблички с парой десятков записей

старый добрые DBF-файлы ?

Dimitry Sibiryakov1) Каждое задание - отдельный файл.

в данном случае - подкаталог внутри каталога-очереди
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683698
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochстарый добрые DBF-файлы ?

1. А они умеют в многопользователя из разных приложений?
2. В чём преимущество перед sqlite?
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683709
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свежий TSharingContract не подойдет?
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683733
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteСвежий TSharingContract не подойдет?
Win10 only.
Но вообще я пока на sqlite остановился, как до реализации дойдет там буду смотреть на нюансы.
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683744
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpAriochстарый добрые DBF-файлы ?

1. А они умеют в многопользователя из разных приложений?
2. В чём преимущество перед sqlite?

1. Под BDE умеют, под TDbf и vkDBF вряд ли. Но зачем это надо, при синхронизации "переименованием файлов" ? Встречный вопрос, а как у SQLite с "многопользователя из разных приложений" ?

2. Более распространённый формат - больше сторонних просмотрщиков, например (представь ситуацию, что очередь себя ведёт странно, не так как ожидается; как эникейщик без дебаггера и исъходников будет проводить первичную диагностику?). Более примитивный формат - меньше накладных расходов на чтение/запись (ну вот нафига тебе для одноразового буфера - проверка foreign keys и прочих constraints? или ACIDness?). Наконец, более-менее стандартный формат - не будет в принципе возможных накладок типа "у двух программ разные версии SQLite".

В общем, это альтернатива скорее для
alekcvpпростой файлик а-ля xml
...
Рейтинг: 0 / 0
Передача задач между процессами
    #39683748
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO "совместная одновременная работа над одним документом в одном документохранилище" не называется "очередью" и "передачей"

alekcvpодин процесс выполнил - передаёт какому-то другому
alekcvpВ связи с этим хочется как-то организовать очередь

Но если нужно таки сделать общую среду - то почему бы не использовать полноценный и отдельный сервер БД, тот же Firebird или MS SQL Express? Зачем тогда embedded?
Вдовесок сможешь получить событий Firebird'a, когда сервер может сам сигналить приложениям "новое событие для 3-го шага очереди". Не помню, работают ли Windows Change Notificaiotns при переименовании папок в расшаренных папках.

В общем, исходя из твоей неизвестной нам задачи - либо у тебя очередь, либо "shared data", IMHO.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача задач между процессами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]