Отображение вложенных компонентов в Быстром NHibernate

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

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

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

, Когда Вы готовы запуститься, одобрите проекты, которые используют ориентированные на многопотоковое исполнение очереди, чтобы передать объекты работы между потоками и заботиться, чтобы гарантировать, что к тем объектам работы получает доступ только один поток за один раз.

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

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

Вместо этого покупают эту книгу .

, Вот очень приятно сформулированная сводка от этого сайта :

Многопоточность также идет с недостатками. Самое большое - то, что это может привести к значительно более сложным программам. Наличие нескольких потоков сам по себе не создает сложность; это - взаимодействие между потоками, которое создает сложность. Это применяется, является ли взаимодействие намеренным, и может закончиться долгие циклы разработки, а также продолжающаяся чувствительность к неустойчивым и non-reproducable ошибкам. Поэтому это платит для хранения такого взаимодействия в многопоточном дизайне простым †“или не многопоточностью использования во всем †“, если у Вас нет специфической склонности к перезаписи и отладке!

Идеальная сводка от Stroustrup:

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

13
задан UpTheCreek 1 October 2009 в 14:44
поделиться

2 ответа

А, Джимми Богард из списка рассылки FNH показал мне - это довольно просто. Не знаю, чем занимался раньше! В любом случае, для всех, кому интересно:

Component(c => c.Address, m =>
{
    m.Component(cp => cp.Country, m2 =>
    {
        m2.Map(x => x.Name); //etc
    } 
13
ответ дан 2 December 2019 в 00:46
поделиться

Я бы создал карту для страны и использовал бы m.References (x => x.Country) .

0
ответ дан 2 December 2019 в 00:46
поделиться