powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Параллельная запись данных
25 сообщений из 30, страница 1 из 2
Параллельная запись данных
    #33868157
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: несколько процессов(штук 20), генерирующих информацию (строка 300 байт раз в 10 сек).

Надо: писать её в единое хранилище(любое)

Желательно: занимать минимум память при выполнении

Пытался: TADOConnection+TADOCommand , жрёт 6 мег памяти и при 3х процессах вылетает из-за блокировки. (может конечно руки кривые?)

Что посоветуете?
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868179
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если хранилище любое, то можно в файл писать
используя critical section для блокировки.
если нужна БД, то можно посмотреть sqlite для нее
есть легкие обертки.
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868184
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в файл можно.
а как применить critical section, если это разные екзешники?

IMHO, Mon$te®
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868232
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterв файл можно.
а как применить critical section, если это разные екзешники? ..

первое что пришло на ум... нужен кернел. мона выполнить через дэлеле. синхронизироваться мона через объекты ядра и шаред секции. задачи которые будет решать сия дэлеле - выделение конкурирующим процессам пула для сваливания инфы... ну и запись самой инфы...если грамотно пользоваться API для доступа в обычный файл - думаю проблем не составит...

думаю рулит Рихтер "Windows для профессионалов"


с уважением
(круглый)
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868540
"автор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да миллион способов, 300 байт в десять секунд это не что.
можно и обойтись без всяких мьютексов и прочего, в файл писать и деражать переменную типа занято незанято.
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868583
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterПытался: TADOConnection+TADOCommand , жрёт 6 мег памяти и при 3х процессах вылетает из-за блокировки. (может конечно руки кривые?)


Да, кривые. Ну что уж тут посоветовать.... Не строгать же их ...
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868730
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterв файл можно.
а как применить critical section, если это разные екзешники?
Если разные, то наверное LockFileEx/UnlockFileEx
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868751
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterДано: несколько процессов(штук 20), генерирующих информацию (строка 300 байт раз в 10 сек).

Надо: писать её в единое хранилище(любое)

Желательно: занимать минимум память при выполнении

Пытался: TADOConnection+TADOCommand , жрёт 6 мег памяти и при 3х процессах вылетает из-за блокировки. (может конечно руки кривые?)

Что посоветуете?

Если устроит обычный файл, то перед записью открывай
Код: plaintext
1.
	hFile = CreateFile(pcszFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH | FILE_FLAG_RANDOM_ACCESS, NULL);
	SetFilePointer(hFile,  0 ,  0 , FILE_END);
записывай туда что надо и закрывай.
Если не открылся, то значит кто-то в него пишет, пытайся открыть повторно, и так в течении 5-10 сек. (чтобы твоя прога совсем не повисла, если кто-то надолго файл заблокирует), только паузу перед повторной попыткой сделай обязательно хотя бы 0.1 сек, а то получится суперзагружалка процессора, как в 1С 7.7
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33868957
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант - через единый логгер. Все процессы ищут его окно и кидают ему сообщения.
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33869522
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
про единый логгер (по tcp или shared memory) мысль правильная.
если проще, то открывать файл с флагом FILE_SHARE_READ+FILE_SHARE_WRITE
блокировки можно через mutex
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33869959
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Multithreaded Pipe Server . Там же рядом клиент к нему.
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33869997
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с данными в плоском файле потом что делать ?

ИМХО - для таких скоростей любая СУБД подойдет (при условии прмых рук)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870197
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
- что прочитать, чтобы руки от ужаса сами выпрямились?

Barlone
- Спасибо, буду читать.

Dima T
- ну это слишком вульгарно

Akh
- окон нет

Maksim UM
- по TCP было бы не плохо, но наверно долго разбираться (по сравнению с LockFile)

maXmo
- Огромное спасиббо

Карабас Барабас
- например?
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870245
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterнапример?
Что "например" ? Пример СУБД, которая в состоянии обслуживать 20 клиентов по 300 байт/10сек ?
Я лично достаточно плотно работаю в FireBird - потянет точно.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870255
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И сколько места и памяти это займёт?

IMHO, Mon$te®
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870271
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю бд тут оверкилл (зато логгер писать не придётся и масштабируемость будет хорошая).
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870308
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда может так:
через pipe процессы шлют логеру инфу, тот её пишет в TADO.

тогда 6 мег только на 1 процесс, а остальные по чуть-чуть будут.

IMHO, Mon$te®
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870324
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterИ сколько места и памяти это займёт?
что "это" ???

Я бы сделал так: ставишь FireBird, можно даже на другом компе. Пишешь клиента, который получает данные, сбрасывает их во временный файл (у каждого клиента свой !), а уже из файла (в другом потоке клиента) пишешь данные в базу. Временный файл нужен для ситуаций, когда сервер по каким-либо причинам недоступен, или когда поток данных превысит скорость заливки в базу, чтобы информация не терялась.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870349
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TADO - это что? Если ты уже работаешь с сервером баз данных, то ничего падать не должно.
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870383
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster
- окон нет


У логера сделать фиктивное окно и кидать на него сообщения.
Но лучше, наверное, Максим с сокетами подсказал.
На счет пипе - не знаю. В линуксе реализованы в рамках одного процесса.
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870413
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TADO*
TADOConnection
TADOCommand

прога то генерирующая инфу мизерная - 30 строчек API вызовов в бесконечном цикле по сообщению WM_TIMER. Билдер компиит в ~70КБ, правда при запуске сразу в ~700КБ превращается. (DevCpp - прога ~700КБ, при запуске ~700КБ)
А если TADOCommand использовать - жрёт ~6 мег. Жуть.


IMHO, Mon$te®
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870427
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
- про pipe читаю, пишут, что и трубу и на другой комп можно открыть, а не только между процессами.

IMHO, Mon$te®
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870637
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
истинно так. Только там тоже вынь должна быть. На локальном компе пипе так же удобен, как тцп, только шустрее.
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870834
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую рабоать с пипе, обратил внимание
сервер отсюда (ничего не менял, мне для проверки просто) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/multithreaded_pipe_server.asp при работе жрёт 1.7МБ памяти (екзешник 8кил).

Как с этим бороться?
...
Рейтинг: 0 / 0
Параллельная запись данных
    #33870841
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster d> при работе жрёт 1.7МБ памяти (екзешник 8кил).

d> Как с этим бороться?

у тебя что за машинки-то там ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Параллельная запись данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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