powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация synchronizedList
21 сообщений из 71, страница 3 из 3
Синхронизация synchronizedList
    #37880868
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelК сожалению NAT Punch-Through как я понял нормально работает только с UDP.
http://en.wikipedia.org/wiki/TCP_hole_punching
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880881
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Ну как не более... Кол-во растет. Т.е вы хотите сказать что при >4000 сокет-потоков при том что каждый будет работать с этим листом CopyOnWrite будет занимать не более мегабайта ОЗУ? И еще... Я немного не понял про CopyOnWrite... Не получится так, что один поток уже удалил элемен, а другой имеет копию листа с неудаленным элементом и будет расценивать его как живой?
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880900
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНу как не более... Кол-во растет. Т.е вы хотите сказать что при >4000 сокет-потоков при том что каждый будет работать с этим листом CopyOnWrite будет занимать не более мегабайта ОЗУ?
У вас мало ядер. Соответственно не так много потоков будут бороться за этот список. Даже если у вас в JVM 4К потоков, из них активных только 4, ну и побороться за ресурс смогут максимум 10-20. И то - врядли, переключение контекста не на столько часто, как мне кажется, будет происходить.

GorloPavelИ еще... Я немного не понял про CopyOnWrite... Не получится так, что один поток уже удалил элемен, а другой имеет копию листа с неудаленным элементом и будет расценивать его как живой?
Давайте не путать понятия. Живой- не живой это в вашей доменной модели. Да. Итератор, будет видеть элемент удаленный другим потоком. Но, как я уже несколько раз писал выше, это не критично.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880907
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Но, как я уже несколько раз писал выше, это не критично.

Ну как же не критично? Ведь при переборе объектов один клиент может с коммутироваться с другим, которого уже нет!
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880909
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Вы сами использовали TCP hole punching? Т.е это позволит мне подключать две стороны peer-to-peer которые(оба) находятся за NAT.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880910
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНу как же не критично? Ведь при переборе объектов один клиент может с коммутироваться с другим, которого уже нет!
Вы это должны предусмотреть в момент комутации. Потому что клиент может издохнуть уже после того как вы перебрали список, но до того как начали использовать, несмотря ни на какую синхронизацию.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880918
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelВы сами использовали TCP hole punching? Т.е это позволит мне подключать две стороны peer-to-peer которые(оба) находятся за NAT.
Skype и TeamViewer именно так и работают. Нет никакого центрального сервера, который прокачивает все данные.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880929
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПотому что клиент может издохнуть уже после того как вы перебрали список
Как? Ведь когда список заблокирован на удаление его не могут читать... И наоборот. Ну к примеру ситуация... Один поток издыхает, но не успел удалиться из списка и ждет когда ему отдадут список, а второй поток который читает видит что он еще в списке и передает ему ссылку на себя. И тут он заканчивает читать список и управление передается тому потоку который не успел помереть и тут он видит что ему уже передана ссылка на клиента...

synchronized (sessions) {
//---ТУТ ОН ПОНЯЛ ЧТО ОН СВЯЗАН
//ПОСЛАЛ КОМПАНЬОНУ ИНФУ О ТОМ ЧТО ЕГО УЖЕ НЕТ
//Удалил себя из списка sessions
}

Так нельзя?
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880938
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
synchronized (sessions) {  //1 ищем клиента
   for (Session serverSession : sessions) { //2 перебираем список
        //3 находим клиента
   }
} //4 особождаем блокировку

//7 имеем на руках мертвую сессию

synchronized (sessions) { //5 захватываем список
   sessions.remove(session); //6 убиваем мертвую сессию
}
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880942
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczSkype и TeamViewer именно так и работают. Нет никакого центрального сервера, который прокачивает все данные.
Ок. Спасибо за наводку. Теперь осталось найти реализацию всего этого на java и C#.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880946
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
synchronized (sessions) {  //1 ищем клиента
   for (Session serverSession : sessions) { //2 перебираем список
        //3 находим клиента
   }
} //4 особождаем блокировку

//7 имеем на руках мертвую сессию

synchronized (sessions) { //5 захватываем список
   sessions.remove(session); //6 убиваем мертвую сессию
}



Не понял.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880960
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
synchronized (sessions) {  //1 ищем клиента
   for (Session serverSession : sessions) { //2 перебираем список
        this.partner=session;
        session.partner=this;
        break;
   }
} 

партнер помирает и ждет когда ему отдадут список...

synchronized (sessions) {
   this.partner.партнер_мертв();
   sessions.remove(this);
}


public void партнер_мертв()
{
   что-то понаделали...
   this.partner=null;
}


GC... объект убран из кучи.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880966
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelНе понял.
1..4, 7 - один поток
5, 6 - второй поток
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37880970
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

И? Посмотрите мою версию. Что не так?
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37881008
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelИ? Посмотрите мою версию. Что не так?
Я не понял идею.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37881027
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поток 1
synchronized (sessions) { //Блокируем
for (Session serverSession : sessions) { //Перебираем список и находим то, что нам нужно
this.partner=session;//Себе оставляем ссылку на объект
session.partner=this;//Ему передаем ссылку на себя
break;
}
}

Этим временем партнер помирает(его поток в котором он читает данные из сокета останавливается)
Ему нужно сделать пометку в БД(лог) что я был и удалить себя из списка. Но список еще заблочен.

Поток 1 освобождает список...

synchronized (sessions) { Захватываем список
//Вызываем функцию которая делает пометку в БД.
this.partner.партнер_мертв();
sessions.remove(this);
}


public void партнер_мертв()
{
что-то понаделали...
this.partner=null;
}


А так?
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37881035
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати.. Нет реализации TCP_hole_punching под .NET. А нужен :(
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37881065
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,

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

А трафик все равно придется гонять через сервер. Попробовал UPnP... Сработало! Но при включенном брадмауэре или другом файрволе такое не прокатывает. Т.к они не позволяют в большинстве случаев послать широковещалку для обнаружения роутера и последующей настройки UPnP. Но как бы там ни было эта возможность значительно снизит нагрузку на сервер. Спасибо вам за наводку! Вы мне очень помогли ! Ну а с листами пока повоюю.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37881625
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelкак сделать так, чтобы когда один поток занимается своим делом, то другие ждут пока он его освободит. И можно ли для таких листов использовать foreach?
foreach использовать можно.
GorloPavelНо как я понимаю этот путь неверный...
Отчего же вы так понимаете? Для изначально сформулированной задачи это именно что классический верный путь.
Другое дело, что он может не подойти по производительности, так как полностию исключает параллельную работу со списком. Чтобы разрешить частично параллельную работу, можно отдельно синхронизировать читателей и писателей (несколько читателей работают одновременно) - для этого вместо synchronized использовать Reentrantlock.
Чтобы еще более распарелелить работу со списком, уже надо вникать в конкретные требования. В общем случае, нарисуйте сеть Петри чтобы увидеть все параллельные (и последовательные) места.
...
Рейтинг: 0 / 0
Синхронизация synchronizedList
    #37884713
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfq,

А что если использовать обычный массив? его размер будет отвечать за максимально возможное кол-во. А вместо удаления ставить null?
...
Рейтинг: 0 / 0
21 сообщений из 71, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация synchronizedList
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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