ReentrantLock
От: Аноним  
Дата: 15.03.08 15:52
Оценка:
Подскажите, за счет чего удалось добится лучшего быстродействия, чем нативные методы класса Object?
Я так и не разобрался, как оно работает внутри. Может, подскажете?
Еще интересно, существует ли аналог
DWORD WINAPI WaitForMultipleObjects(
  __in  DWORD nCount,
  __in  const HANDLE* lpHandles,
  __in  BOOL bWaitAll,
  __in  DWORD dwMilliseconds
);

с учетом флажка bWaitAll?
Re: ReentrantLock
От: Cyberax Марс  
Дата: 16.03.08 04:50
Оценка:
Здравствуйте, http://chabster.blogspot.com/, Вы писали:

HCB>Подскажите, за счет чего удалось добится лучшего быстродействия, чем нативные методы класса Object?

Кому удалось? Оно точно быстрее?

ReentrantLock вроде бы работает точно так же, как и обычная блокировка — сначала крутит спинлок, а потом добавляет себя в очередь ожидания и паркует поток.

HCB>Еще интересно, существует ли аналог

HCB>
HCB>DWORD WINAPI WaitForMultipleObjects(
HCB>  __in  DWORD nCount,
HCB>  __in  const HANDLE* lpHandles,
HCB>  __in  BOOL bWaitAll,
HCB>  __in  DWORD dwMilliseconds
HCB>);
HCB>

HCB>с учетом флажка bWaitAll?
CyclicBarrier?

PS: на будущее — не рекомендуется считать, что у всех читателей стоит MSDN и они знают WinAPI...
Sapienti sat!
Re[2]: ReentrantLock
От: Аноним  
Дата: 16.03.08 11:06
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, http://chabster.blogspot.com/, Вы писали:


HCB>>Подскажите, за счет чего удалось добится лучшего быстродействия, чем нативные методы класса Object?

C>Кому удалось? Оно точно быстрее?

В сети по бенчмаркам заявляют, что ReentrantLock лучше работает под большим контешнешом. http://www.ibm.com/developerworks/java/library/j-jtp10264/

C>ReentrantLock вроде бы работает точно так же, как и обычная блокировка — сначала крутит спинлок, а потом добавляет себя в очередь ожидания и паркует поток.

Паркование — вызов нативного метода Unsafe.park(boolean, long)? Как же может получится быстрее, если Object.wait() тоже реализован нативно. При этом ReentrantLock выполняет еще некоторое кол-во управляемого кода перед вызовом Unsafe.park.

HCB>>Еще интересно, существует ли аналог

HCB>>
HCB>>DWORD WINAPI WaitForMultipleObjects(
HCB>>  __in  DWORD nCount,
HCB>>  __in  const HANDLE* lpHandles,
HCB>>  __in  BOOL bWaitAll,
HCB>>  __in  DWORD dwMilliseconds
HCB>>);
HCB>>

HCB>>с учетом флажка bWaitAll?
C>CyclicBarrier?

Насколько я помню, CyclicBarrier — ожидать все потоки. Есть ли возможность ожидать любой поток? Можно получить через CountDownLatch(1), но тогда невозможно определить какой поток освободил блокировку.

C>PS: на будущее — не рекомендуется считать, что у всех читателей стоит MSDN и они знают WinAPI...

Виноват
Re[3]: ReentrantLock
От: Cyberax Марс  
Дата: 17.03.08 04:43
Оценка:
Здравствуйте, http://chabster.blogspot.com/, Вы писали:

C>>Кому удалось? Оно точно быстрее?

HCB>В сети по бенчмаркам заявляют, что ReentrantLock лучше работает под большим контешнешом. http://www.ibm.com/developerworks/java/library/j-jtp10264/
В это верю. ReentrantLock должен быть немного лучше при большом contention'е и малой длине ожидания.

Synchronized должен лучше работать при долговременном ожидании и небольшом contention'е.

HCB>Паркование — вызов нативного метода Unsafe.park(boolean, long)? Как же может получится быстрее, если Object.wait() тоже реализован нативно. При этом ReentrantLock выполняет еще некоторое кол-во управляемого кода перед вызовом Unsafe.park.

Управляемый код там очень простой, с этим проблем нет. Wait зато поддерживает ещё notify/notifyAll.

C>>CyclicBarrier?

HCB>Насколько я помню, CyclicBarrier — ожидать все потоки. Есть ли возможность ожидать любой поток? Можно получить через CountDownLatch(1), но тогда невозможно определить какой поток освободил блокировку.
Я бы, лично, использовал для этого SyncrhonousQueue.
Sapienti sat!
Re[4]: ReentrantLock
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 17.03.08 11:07
Оценка:
Здравствуйте, Cyberax, Вы писали:

HCB>>В сети по бенчмаркам заявляют, что ReentrantLock лучше работает под большим контешнешом. http://www.ibm.com/developerworks/java/library/j-jtp10264/

C>В это верю. ReentrantLock должен быть немного лучше при большом contention'е и малой длине ожидания.

С чего бы? Ты ж сам сказал, что и там и там спин-лок+ожидание.
Я ненавижу Hibernate!
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.