Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274

Передача данных между потоками/процессами

26.09.2019, 20:57. Показов 5303. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, у вас тут поактивнее раздел. В соседней ветке .NET я не нашел решения, может java-программисты знают как лучше сделать.
Суть такая. Могут работать неограниченное число копий моей программы. В программе пользователь может создавать объект Разъем. Любой из объектов с одинаковым именем должен при изменении сообщить остальным во всех запущенных процессах, чтобы они также изменились.
Первоначальная реализация - Каждый объект при создании создает/открывает общий файл в памяти и запускает поток, который ждет сигнала WaitOne() в бесконечном цикле. Когда кто-то меняет состояние, он записывает данные в общий MemoryMappedFile и устанавливает сигнальное состояние. Все потоки получают сигнал, читают файл, меняют состояние объекта. По задумке, установивший сигнальное состояние поток, его и сбрасывает, когда сигнал приходит и ему в надежде, что все его уже прочитали, но увы - здесь некоторые объекты остаются в неведении.
Далее я усложнил - в файл еще стал записывать таблицу всех объектов, которые используя этот же файл, в нем прописываются при создании и оставляют пометку о прочтении, а сброс сигнала делается только в случае, если все отчитались о прочтении. При уничтожении объект исключает себя из общей таблицы. Короче такая каша тоже не есть хорошо. Так как многократные чтение/запись, да еще в разных потоках заставляют сильно болеть голову.
Может есть какие предложения как все это реализовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.09.2019, 20:57
Ответы с готовыми решениями:

Передача данных между классами
Делаю Telegram-бота, который будет пересылать построчно логи из файла построчно. Что есть? Код бота, в частности метод, обрабатывающий...

Передача данных между java приложениями при плохом соединении. Посоветуйте технологии
Есть сервер и некоторое количество клиентов. Сервер в зависимости от ситуации будет отправлять сигналы, данные клиентам. Клиент...

Синхронизация ресурса между потоками
Всем привет!) Возник вопрос.. незнаю как его решить.. Предположим есть класс A, с числовой переменной a + геттер\сеттер на нее. В...

16
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
26.09.2019, 22:23
Кафка?
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
26.09.2019, 23:17  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
Кафка?
Не знаю. Но мне очень хочется найти простое, изящное решение.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
26.09.2019, 23:19
Попробуй, в описание твоё сильно не вникал, но на первый взгляд похоже
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
27.09.2019, 10:07  [ТС]
Что-то мне кажется, не получится прикрутить Kafka к .NET приложению. Нужно решение средствами языка.

Главное -чтобы сигнал доходил до всех. С моей задумкой с таблицей сигнал точно доходит, но часто по нескольку раз, и это все - лишнее чтение + обработка запроса, нужно запоминать последний, сравнивать не второй ли раз его суют. Наверняка можно что-то придумать попроще.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
27.09.2019, 10:47
Цитата Сообщение от rvs_dk Посмотреть сообщение
Что-то мне кажется, не получится прикрутить Kafka к .NET приложению.
Если кажется, гуглить надо.

Добавлено через 3 минуты
Ну или альтернатива: https://johnkoerner.com/csharp... -protobuf/
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
27.09.2019, 10:54
Цитата Сообщение от rvs_dk Посмотреть сообщение
Каждый объект при создании создает/открывает общий файл в памяти и запускает поток, который ждет сигнала WaitOne() в бесконечном цикле. Когда кто-то меняет состояние, он записывает данные в общий MemoryMappedFile и устанавливает сигнальное состояние. Все потоки получают сигнал, читают файл, меняют состояние объекта. По задумке, установивший сигнальное состояние поток, его и сбрасывает, когда сигнал приходит и ему в надежде, что все его уже прочитали, но увы - здесь некоторые объекты остаются в неведении.
Далее я усложнил - в файл еще стал записывать таблицу всех объектов, которые используя этот же файл, в нем прописываются при создании и оставляют пометку о прочтении, а сброс сигнала делается только в случае, если все отчитались о прочтении. При уничтожении объект исключает себя из общей таблицы.
Цитата Сообщение от rvs_dk Посмотреть сообщение
очень хочется найти простое, изящное решение.
Незнаю так принято у дотнетчиков изобретать велосипеды или это просто у тебя так?

Любой месседж бас спасет отца русской демократии. Многие из них кроссплатформенны и либо имеют REST API, либо клиентов под разные языки. Либо и то и другое

Тот же RabbitMQ вообще на erlang написан и его юзают где угодно.
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
27.09.2019, 12:40  [ТС]
korvin_, KEKCoGEN, я так то ни разу не программист. Так увлекаюсь немного. Что для вас кажется элементарным - для меня темный лес. Сам офигефаю, как в многопоточность забрался. Поэтому
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
месседж бас
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
REST API
вот честно ни о чем не говорят. И велосипед изобретаю тоже от отсутствия системных знаний.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
27.09.2019, 13:45
Так и что мешает прочитать, что такое Кафка? Ну или хотя бы на Ютубе посмотреть
0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
01.10.2019, 10:05
rvs_dk, может это поможет:
Одновременное чтение и запись в файл
Многопоточность в Java
Многопоточность в Java: ExecutorService

Вы приведите фрагменты кода, который вы пишете в упрощенном виде. Тогда будет проще вам помочь.
1
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
01.10.2019, 10:59  [ТС]
vvm28, я так то пишу на VB.NET. Сюда, так сказать больше за концепцией обратился.
Код приводил тут Вызов события в MemoryMappedFiles.
Правда я уже все усложнил. В файле организовал таблицу с подключенными потоками, в которую все отчитываются. Но сейчас проблема в том, что если мы создаем новые объекты - таблица актуальна, каждый себе присваивает корректный номер. А как только проходит изменение, идет одновременное чтение/запись из всех потоков и часть таблицы затирается.

SyncLock по ссылке на файл в памяти не помогает.
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
01.10.2019, 11:35  [ТС]
Вот примерная схема работы
Миниатюры
Передача данных между потоками/процессами  
0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
01.10.2019, 12:13
Проще наверное найти какие-то готовые аналоги или похожие решения:
Why use Memory Mapped File or MapppedByteBuffer in Java
Java Memory-Mapped Files – Java MappedByteBuffer
1
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
01.10.2019, 12:25  [ТС]
Возможно и так. Но с другой стороны, сейчас единственная проблема - одновременный доступ к файлу. Пока попытаюсь еще как то поковырять.
В любом случае всем спасибо за помощь.
0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
01.10.2019, 14:05
По теоретической части смотрите, ищите - "потокобезопасность в java"
Любой ресурс (файл, область памяти и т.п.) не является потокобезопасным по умолчанию, если предполагается его изменение (в вашем случае - это запись в файл). Чтение данных ресурса всегда потокобезопасно.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
01.10.2019, 14:40
vvm28, вопроснечитайответпиши. Какая джава? ТС же несколько раз сказал что он не на джава пишет.
0
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
01.10.2019, 15:19  [ТС]
vvm28, то есть запись/чтение в файл в памяти из разных потоков, которые могут быть еще и в разных процессах невозможно организовать без потерь информации?
Сейчас изменил методику - разбил на 3 файла, чтобы меньше путаться. 2 файла работают нормально. Осталось организовать отчет о выполнении в 3й файл. Тут либо просто число должно быть (каждый поток 1 раз увеличивает счетчик), либо через разделитель перечень номеров потоков с отметкой.
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Какая джава?
Вообще изначально хотел на джаве эту прогу делать, но все таки не решился из-за сложностей для меня в визуализации. А так очень много общего. Пока изучал Джаву, много открыл для себя и в VB.NET.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2019, 15:19
Помогаю со студенческими работами здесь

Взаимодействие между потоками и зсувками
Написать параллельную программу с общей переменной типа integer и двумя рабочими процессами. Всеобщей переменные в начале работы программы...

Как происходит переключение между потоками исполнения
Разбирал тестовый пример с семафорами в Java. Работа семафоров понятна. Решил попробовать запустить тот же код, закомментировав семафоры....

Запись данных в файл несколькими потоками.
Как на Java реализовать запись в файл несколькими потоками? К примеру, имеется файл размером 3Мб, его содержимое копируется в другой файл...

Передача сообщений между процессами и потоками
Здравствуйте, помогите, пожалуйста, с задачей по Операционным системам: Создать процесс с двумя дочерними процессами, процесс с двумя...

Передача данных между процессами (pipe)
Всем доброго времени суток. Обращаюсь к вам с вопросиком. Передо мной стоит задача написать код, который: 1. Создавай процесс 2....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru