Почему действительно Распараллеливает. Сон (0) решает мои проблемы, и как избежать его?

Я бы порекомендовал использовать Разрешение неоднозначных имен , он ищет диапазон, если атрибуты AD (список в ссылке), и находит любые совпадения.

В приведенном ниже примере запроса будут возвращены как Jimmy Smith, так и Jim Smith-Williams

Get-ADUser -LDAPFilter "(anr=Jim Smith)"

. Он будет искать все объекты, где любой из атрибутов именования начинается со строки "jim smith*", плюс все объекты, где (givenName=jim*) и (sn=smith*), плюс объекты, где (givenName=smith*) и (sn=jim*).

9
задан Kibbee 19 February 2009 в 03:36
поделиться

10 ответов

На это невозможно ответить, не смотря на всю кодовую базу.

Вызывающий поток. Сон является УЖАСНОЙ практикой, и Вы не должны делать этого. Вы в основном смещаетесь вокруг синхронизации Вашего кода, который является ведущим к мертвой блокировке, в противоположность фактическому обращению к условию мертвой блокировки для начала.

Причина, что отладка не показывает проблему, состоит в том что, когда отладчик останавливается, все потоки на Вашей остановке кода, так, чтобы скосил синхронизацию осуществления Вашей программы также.

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

4
ответ дан 4 December 2019 в 08:53
поделиться

Поток. Сон (0) является урожаем. Я предполагаю, что это перестраивает способ, которым Вы звоните для предотвращения некоторых проблем. Я думаю, выпустили ли Вы код с урожаем и выполнили его на 1 000 машин, Вы получили бы много отчетов об ошибках. Я предполагаю, что Вам нужен некоторый тип раздела блокировки / критического раздела для предотвращения тупика, потому что некоторые, где код не ориентирован на многопотоковое исполнение. Это могло быть в библиотеке, которую Вы называете.

  1. Добавьте во входе и посмотрите, происходят ли проблемы все еще. Надо надеяться, можно выяснить, какие функции вызывают тупик
  2. Добавьте некоторые критические разделы. Использует деление, и завоюйте подход, который необходимо смочь сузить, где проблема происходит.
11
ответ дан 4 December 2019 в 08:53
поделиться

Что в этом циклы? Подобные проблемы могут появиться при проверке некоторого поля в цикл для синхронизации нескольких потоков:

while (_field); // waiting for _field change in another thread

Это решение будет работать очень медленное и звонит в Поток. Сон (0) не является решением, но может быть взломом в некоторых случаях. Это может быть зафиксировано правильно при изменении того цикла синхронизации вызовом к WaitHandle. WaitOne () метод некоторого объекта синхронизации (ManualResetEvent, например) и место сигнал к этому дескриптору в другом потоке. Возможно, Ваша проблема похожа на что-то это? Обеспечьте некоторую часть своего кода.

3
ответ дан 4 December 2019 в 08:53
поделиться

Сколько одновременных потоков работает, когда это срывает? Если у Вас есть слишком много потоков, ЦП мог бы проводить все свое время, делая контекстное переключение. Плюс, Вы жевали бы до 1 + МБ памяти на поток.

2
ответ дан 4 December 2019 в 08:53
поделиться

Попытайтесь распечатать строку каждый раз, Вы блокируете взаимное исключение и распечатывающий другую строку при разблокировании ее. Не забудьте включать имя функции и идентификатор потока при печати его. Должен дать Вам общее представление о том, когда это блокирует. Походит на состояние состязания, называя сон (0) все еще причины ЦП для использования циклов, обрабатывающих вызов к функции. Поэтому вызывая свойственный сон.

1
ответ дан 4 December 2019 в 08:53
поделиться

У Вас определенно есть проблемы поточной обработки, которые должны быть решены. Вызывающий поток. Сон (0) причины планировщик для умирания. Это, вероятно, дает каждому потоку возможность работать достаточно, чтобы заставить вещи работать. Я только оставил бы сон там и оставил бы его в том, что, потому что это - тип вещей, которые работают некоторое время и затем полностью несвязанное изменение заканчивает тем, что повредило вещи.

1
ответ дан 4 December 2019 в 08:53
поделиться

Я думаю, что пора Вам ступить далеко от компьютера и до электронной доски. Проанализируйте, как каждый элемент блокирует и в том, какие условия он выпускает блокировку тщательно. Пять потоков могли бы быть трудной проблемой, поэтому возможно, видеть, могут ли всего два потока вызвать то же условие. Что-то не блокирует правильно, и необходимо найти где.

Если Ваш код не стоит этого большого усилия, затем оставьте Thread.sleep () там, потому что это действительно не повреждает Вашу производительность очень в главной схеме вещей.

1
ответ дан 4 December 2019 в 08:53
поделиться

Если аппаратные средства не вынуждают Вас к, Вы никогда не должны использовать сон ().

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

Помните, локальные переменные существуют на различных стеках, но помехи в функциях по существу globals (и конечно, необходимо пристально смотреть globals).

1
ответ дан 4 December 2019 в 08:53
поделиться

Да, Вы, возможно, встретились с перегрузкой планировщика.

Я искренне надеюсь нет.

0
ответ дан 4 December 2019 в 08:53
поделиться

Возможно, попытайтесь использовать инструмент как Гонщик Typemock?

Отказ от ответственности: Я никогда не использовал тот инструмент прежде.

0
ответ дан 4 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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