История изменений
Исправление
kirk_johnson,
(текущая версия)
:
в данном случае спинлок на ЭЛЕМЕНТЕ кеша.
Ты ЭЛЕМЕНТ кеша не собираешься обновлять? :)
то есть конкуренция будет только если другой тред влез именно на данный вход хештаблицы, коих много…а чтение неминуемо будет блокироваться записью, если конечно не применять rcu, но тут тоже вопрос - а сколько это rcu стоит в данном случае.
RCU в любом случае дешевле.
Может проще заблокировать тред, поменять данные, и разблокировать, чем делать копию. это вопрос сложный.
Нет, это очень простой вопрос. Если у тебя многопоточное чтение динамически аллоцируемых объектов, то быстрее RCU. Если у тебя многопоточное чтение чего-то, что влезает в машинное слово, то тебе достаточно аналогов READ_ONCE()/WRITE_ONCE(). spinlock при многопоточном чтении будет хуже в любом случае.
P.S. Я, кстати, не очень понимаю, причем тут размер хештаблицы. Если у тебя десять тысяч элементов, 64 треда, и все 64 треда решили получить ключик 0x1234, то они все припрутся в одну и ту же ячейку.
Исправление
kirk_johnson,
:
в данном случае спинлок на ЭЛЕМЕНТЕ кеша.
Ты ЭЛЕМЕНТ кеша не собираешься обновлять? :)
то есть конкуренция будет только если другой тред влез именно на данный вход хештаблицы, коих много…а чтение неминуемо будет блокироваться записью, если конечно не применять rcu, но тут тоже вопрос - а сколько это rcu стоит в данном случае.
RCU в любом случае дешевле.
Может проще заблокировать тред, поменять данные, и разблокировать, чем делать копию. это вопрос сложный.
Нет, это очень простой вопрос. Если у тебя многопоточное чтение динамически аллоцируемых объектов, то быстрее RCU. Если у тебя многопоточное чтение чего-то, что влезает в машинное слово, то тебе достаточно аналогов READ_ONCE()/WRITE_ONCE(). spinlock при многопоточном чтении будет хуже в любом случае.
P.S. Я, кстати, не очень понимаю, причем тут размер хештаблицы. Если у тебя десять тысяч элементов, 64 треда, и все 64 треда решили получить ключик 0x1234, то они все припрутся в одну и ту же ячейкую
Исходная версия
kirk_johnson,
:
в данном случае спинлок на ЭЛЕМЕНТЕ кеша.
Ты ЭЛЕМЕНТ кеша не собираешься обновлять? :)
то есть конкуренция будет только если другой тред влез именно на данный вход хештаблицы, коих много…а чтение неминуемо будет блокироваться записью, если конечно не применять rcu, но тут тоже вопрос - а сколько это rcu стоит в данном случае.
RCU в любом случае дешевле.
Может проще заблокировать тред, поменять данные, и разблокировать, чем делать копию. это вопрос сложный.
Нет, это очень простой вопрос. Если у тебя многопоточное чтение динамически аллоцируемых объектов, то быстрее RCU. Если у тебя многопоточное чтение чего-то, что влезает в машинное слово, то тебе достаточно аналогов READ_ONCE()/WRITE_ONCE(). spinlock при многопоточном чтении будет хуже в любом случае.