LINUX.ORG.RU

История изменений

Исправление 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 при многопоточном чтении будет хуже в любом случае.