170 похожих чатов

Вопрос при работе с многопоточкой. Есть словарь (кэш). читает ~24 потока,

пишет 1 по правилам:
1. каждые два часа обновляются значения по ключу (все)
2. есть вероятность добавления новых, но в пределах указанной при создании словаря capacity (если начальный размер 5-6кк, кол-во новых за сутки не больше 100к, раз в день приложение перезапускается и capacity обновляется)
3. при обновлении не обязательно, чтобы по ключу гарантированно следующим чтением достали новое значение.

Нужно ли для этого применять Concurent версию, или можно и обычным словарем обойтись?

3 ответов

7 просмотров

Если ты на 100% гарантируешь что писать будет только один поток, можно обычным

Sergei- Автор вопроса
Yura Slobodenyuk
Если ты на 100% гарантируешь что писать будет толь...

Спасибо 100%, это монитор, который обновляет конкретно этот кэш. все остальные только читают. если вдруг при добавлении выскочим за исходную capacity? я делаю так, тяну данные с БД, rowCount * 1.3 это исходная capacity. то есть запас +-2 миллиона. переделаю, наверное, на rowCount + 1_000_000 еще видел с сорсах, там для ключей-строк применятся Resize c forceNewHashCodes, который полностью коллекцию пересоздает у меня ключи это два шорта + строка над хэшом не особо долго думал (short < 16) ^ (short < 8) ^ string.GetHashCode() мурмур3 или fastHash какой-нибудь стоит ли добавлять?

Sergei
Спасибо 100%, это монитор, который обновляет конкр...

1. Если произойдет ресайз при добавлении, скорее всего все читатели в этот момент упадут, тогда лучше поставь Concurrent 2. Советую сначала замерить, стоит заменять хеш только если бенчмарк покажет прирост в производительности

Похожие вопросы

Обсуждают сегодня

type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
45
А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
7
Господа и дамы, поможите пожалуйста :( Запускаю notepad.exe из делфи CreateProcess(nil, PChar(FullPath), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, StartInfo, ProcessI...
Ivan Burnatov
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
I wrote frontend in flutter using dart. Where should I write backend?
𝐌𝐚𝐫𝐲
8
А че SwiftUI for Web ещё нет?
Shagit Ziganshin
7
Не получается у меня либу Zstd статически слинковать, вылазят какие-то AV Вроде example у них не сложный есть, вроде всё делаю как там... но не выходит чего-то Вопрос - если ...
notme
4
Карта сайта