Действительно ли возможно иметь, больше чем 32 привязывают ConcurrentHashMap

Короткий ответ: Вы не можете сделать этого.

От T-SQL нет никакого способа получить доступ к нескольким результатам вложенного вызова хранимой процедуры, не изменяя хранимую процедуру, как другие предположили.

, Чтобы быть завершенными, если процедура возвращала единственный результат, Вы могли бы вставить ее во временную таблицу или табличную переменную со следующим синтаксисом:

INSERT INTO #Table (...columns...)
EXEC MySproc ...parameters...

можно использовать тот же синтаксис для процедуры, которая возвращает несколько результатов, но он только обработает первый результат, остальные будут отброшены.

7
задан DKSRathore 29 November 2009 в 07:00
поделиться

4 ответа

Если вы говорите о Java ConcurrentHashMap , то ограничение будет произвольным :

Создает новую карту с теми же сопоставлениями, что и данная карта. Карта создана с емкостью 1.

8
ответ дан 6 December 2019 в 11:49
поделиться

По умолчанию не 32, а 16. И вы можете переопределить его с помощью аргумента конструктора уровень параллелизма :

public ConcurrentHashMap(int initialCapacity,
                         float loadFactor,
                         int concurrencyLevel)

, чтобы вы могли:

Map<String, String> map = new ConcurrentHashmap<String, String)(128, 0.75f, 64);

, чтобы изменить его на 64. Значения по умолчанию (начиная с Java 6u17):

  • initialCapacity : 16;
  • loadFactory : 0,75f;
  • concurrencyLevel : 16.
4
ответ дан 6 December 2019 в 11:49
поделиться

Согласно источнику ConcurrentHashMap , максимально допустимое значение составляет 65536 :

/**
 * The maximum number of segments to allow; used to bound
 * constructor arguments.
 */
static final int MAX_SEGMENTS = 1 << 16; // slightly conservative

public ConcurrentHashMap(int initialCapacity,
                         float loadFactor, int concurrencyLevel) {
    if (concurrencyLevel > MAX_SEGMENTS)
        concurrencyLevel = MAX_SEGMENTS;
3
ответ дан 6 December 2019 в 11:49
поделиться

To use all the default concurrency level of 16 you need to have 16 cores using the map at the same moment. If you have 32 cores only using the map 25% of the time then only 8 of 16 segments will be used at once.

In summary, you need to have a lot of cores all using the same map and doing nothing much else. Real programs usually do something other than access one map.

2
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

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