Какие-либо проблемы с большими количествами критических разделов?

Главным образом: Visual Studio, SQL Server и некоторые расширения для них, такие как Rock-Scroll и т.д.

Являющийся веб-разработчиком я устанавливаю 4 других браузера (вдоль IE): Opera, Firefox, Chrome и Safari.

Также:

  • Шпион проводника Altova
  • Altova XML Процесса SysInternals
  • Office 2007
  • Собака Разности Altova Winamp
  • Paint.NET
  • отражатель Yahoo Messenger
  • Skype
  • Декодер ViewState
  • Oracle Разработчик SQL
  • Программа просмотра изображений FastStone
  • TextPad
  • DC ++
  • профилировщик FeedReader
  • Памяти.NET (Наука и техника)
  • HttpLook
  • NetBeans
  • SQLDigger
  • Winamp
  • Workrave
  • Безумное Время
  • MySQL (включая альфу такой как 6,0)
5
задан Mick 3 November 2009 в 10:38
поделиться

5 ответов

С таким количеством объектов, большинство их критических разделов будут разблокированы, и разногласий почти не будет. Как вы уже знаете (другой комментарий), критические секции не требуют перехода в режим ядра, если они не принадлежат. Это делает критические секции эффективными в данной ситуации.

Единственное, что нужно учитывать, это то, хотите ли вы, чтобы критические секции были внутри ваших объектов или в другом массиве. Местоположение ссылки - хороший повод разместить критические разделы внутри объекта. Когда вы вошли в критическую секцию, вся строка кэша (например, 16 или 32 байта) будет в памяти. С помощью небольшого отступа вы можете убедиться, что каждый объект запускается в строке кэша. В результате объект будет (частично) в кэше после входа в его критическую секцию.

критические секции не требуют перехода в режим ядра, если они не принадлежат. Это делает критические секции эффективными в данной ситуации.

Единственное, что нужно учитывать, это то, хотите ли вы, чтобы критические секции были внутри ваших объектов или в другом массиве. Местоположение ссылки - хороший повод разместить критические разделы внутри объекта. Когда вы вошли в критическую секцию, вся строка кэша (например, 16 или 32 байта) будет в памяти. С помощью небольшого отступа вы можете убедиться, что каждый объект запускается в строке кэша. В результате объект будет (частично) в кэше после входа в его критическую секцию.

критические секции не требуют перехода в режим ядра, если они не принадлежат. Это делает критические секции эффективными в данной ситуации.

Единственное, что нужно учитывать, будет заключаться в том, хотите ли вы, чтобы критические секции были внутри ваших объектов или в другом массиве. Местоположение ссылки - хороший повод разместить критические разделы внутри объекта. Когда вы вошли в критическую секцию, вся строка кэша (например, 16 или 32 байта) будет в памяти. С помощью небольшого отступа вы можете убедиться, что каждый объект запускается в строке кэша. В результате объект будет (частично) в кэше после входа в его критическую секцию.

Единственное, что нужно учитывать, это то, хотите ли вы, чтобы критические секции были внутри ваших объектов или в другом массиве. Местоположение ссылки - хороший повод разместить критические разделы внутри объекта. Когда вы вошли в критическую секцию, вся строка кэша (например, 16 или 32 байта) будет в памяти. С помощью небольшого отступа вы можете убедиться, что каждый объект запускается в строке кэша. В результате объект будет (частично) в кэше после входа в его критическую секцию.

Единственное, что нужно учитывать, это то, хотите ли вы, чтобы критические секции были внутри ваших объектов или в другом массиве. Местоположение ссылки - хороший повод разместить критические разделы внутри объекта. Когда вы вошли в критическую секцию, вся строка кэша (например, 16 или 32 байта) будет в памяти. С помощью небольшого отступа вы можете убедиться, что каждый объект запускается в строке кэша. В результате объект будет (частично) в кэше после входа в его критическую секцию.

3
ответ дан 14 December 2019 в 19:17
поделиться

Вы также можете рассмотреть MUTEX. Это хороший метод. Каждый клиент может зарезервировать ресурс самостоятельно с помощью мьютекса (взаимного исключения).

Это более распространено, некоторые библиотеки также поддерживают это с помощью потоков. Прочтите о boost :: thread и его мьютексах

С вашим подходом:

data_type data[100000];

Я бы побоялся переполнения стека, если вы не размещаете его в куче.

РЕДАКТИРОВАТЬ:

Boost :: MUTEX использует win32 Critical Sections

0
ответ дан 14 December 2019 в 19:17
поделиться

Ваш план стоит попробовать, но я думаю, вы обнаружите, что Windows недовольна созданием такого количества критических разделов. Каждая CS содержит некоторый дескриптор (-ы) ядра, и вы используете драгоценное пространство ядра. Я думаю, что в зависимости от вашей версии Windows у вас не хватит памяти для дескрипторов, и InitializeCriticalSection () или какая-то другая функция начнет давать сбои.

Что вы, возможно, захотите сделать, так это иметь доступный для использования пул CS, и сохраните указатель на «используемый» CS внутри своей структуры. Но тогда это довольно быстро становится сложным, и вам нужно будет использовать атомарные операции для установки / очистки указателя CS (для атомарно пометьте запись массива как «используется»). Может также потребоваться подсчет ссылок и т. Д.

Сложно.

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

1
ответ дан 14 December 2019 в 19:17
поделиться

Первое, что я проверю при загрузке, - это установка имени параметра для того, какой file_column (или что бы то ни было, лично я бы использовал скрепку) ожидает.

Если у вас есть что-то вроде:

class Entry < ActiveRecord::Base
    file_column :image
end

Вам необходимо убедиться, что параметр (имя поля формы) соответствует ожидаемому. В приведенном выше примере это будет:

name="entry[image]"

Кроме того, убедитесь, что вы пишете многостраничную форму, а не только стандартную.

убедитесь, что вы пишете многостраничную форму, а не просто стандартную.

убедитесь, что вы пишете многостраничную форму, а не просто стандартную.

Если вам необходимо использовать объект синхронизации, я рекомендую вам рассмотреть возможность разделения набора данных на подмножества и использования одного объекта синхронизации для каждого подмножества. Например, вы можете рассмотреть возможность использования одного CRITICAL_SECTION для каждого диапазона из 1000 элементов в массиве данных.

1
ответ дан 14 December 2019 в 19:17
поделиться

Как отмечали другие, да, есть проблема, и это называется слишком мелкозернистой блокировкой ... это расточительное использование ресурсов, и даже если шансы невелики, вы начнете создавать множество базовых примитивов и данных, когда что-то действительно станет случайным, назовем это дольше, чем обычно, или как-то иначе. Кроме того, вы зря тратите ресурсы, поскольку это не совсем тривиальная структура данных, как, например, в VM.

Если я правильно помню, с этого момента у вас будет больше шансов на исключение SEH в Win32 или просто на большее использование памяти. Разделение и объединение их в пул, вероятно, будет подходящим вариантом, но это более сложная реализация. Разделение на что-то еще (re: action) и ожидание некоторой кратковременной конкуренции - еще один способ справиться с этим.

В любом случае, это проблема управления ресурсами с тем, что у вас есть прямо сейчас.

0
ответ дан 14 December 2019 в 19:17
поделиться
Другие вопросы по тегам:

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