LoveRead.info » Книги » Разная литература » Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский

Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский

Книгу Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

138 0 18:00, 07-12-2022
Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский
07 декабрь 2022

Книга Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский читать онлайн бесплатно без регистрации

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

    1 ... 239 240 241 242 243 244 245 246 247 ... 361
    Перейти на страницу:
    в приоритетном порядке по отношению к асинхронным. Однако в случае реализации атрибута синхронизации в рамках SSCLI это не так — попавшие в очередь (единую для всего домена синхронизации) работы извлекаются из нее в порядке очереди, и тип работы (синхронный или асинхронный вызов) не влияет на этот порядок.

    Эксперименты

    Эксперименты с вышеописанным кодом должны продемонстрировать работу сервисов синхронизации и трассировки вызовов.

    Все компоненты размещаются в одном контексте

    Первый эксперимент не требует какой-либо модификации кода клиента и сервера. Каждому компоненту (Account, Tax, News) приписаны два атрибута:

    [Synchronization ()]

    [MyCallTrace("LogFile")]

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

    Запустив серверное приложение и параллельно два клиентские приложения, мы увидим на консоли сервера информацию о том, что все три компонента выполняются в контексте 1.

    Ниже приведены несколько первых строк с консоли сервера

    Server is listening

    News context = 1 News constructor thread = 3 IsPoolThread = True

    Tax context = 1 Tax constructor thread = 3 IsPoolThread = True

    Account context = 1 Account constructor thread = 3 IsPoolThread = True

    Tax notification: new Account operation: +5

    Tax Notify thread = 3 IsPoolThread = True

    News notification: new Account operation: +5

    News Notify thread = 3 IsPoolThread = True

    News notification: direct notification from Account

    News Notify thread = 3 IsPoolThread = True

    Account Add thread = 3 IsPoolThread = True

    Tax notification: new Account operation: +5

    Tax Notify thread = 65 IsPoolThread = True

    News notification: new Account operation: +5

    News Notify thread = 65 IsPoolThread = True

    News notification: direct notification from Account

    News Notify thread = 65 IsPoolThread = True

    Account Add thread = 65 IsPoolThread = True

    Tax notification: new Account operation: +5

    Tax Notify thread = 3 IsPoolThread = True

    News notification: new Account operation: +5

    News Notify thread = 3 IsPoolThread = True

    News notification: direct notification from Account

    News Notify thread = 3 IsPoolThread = True

    Account Add thread = 3 IsPoolThread = True

    …….

    Еще одно замечание, связанное с консолью сервера — конструкторы компонентов выполняются в одном рабочем потоке, а далее эти компоненты вызываются двумя рабочими потоками. Эти потоки, конечно, никак не связаны с клиентами. Можно модифицировать код клиента и сервера, передавая при вызове метода Add не только сумму вклада, но и идентификатор процесса, в котором исполняется клиент, сделавший вызов. После этого можно заметить, что оба рабочих потока выполняют вызовы клиентов не зависимо от процесса клиента. Да и число рабочих потоков не связано напрямую с числом клиентов.

    Модификация кода сервера (MyServer.cs) связана с добавлением интерфейса IAccumuiatorNew:

    ……

    namespace SPbU.AOP_NET {

    public interface IAccumuiatorNew{

           void Add(int sum, int clientProcessId);

    }

    ……

    public class Account: ContextBoundObject, IAccumulator,

           IAudit, IAccumuiatorNew!

    ……

           public void Add(int sum, int clientProcessId){

               _sum += sum;

               _tax.Notify("new Account operation: +" + sum);

               _tax.news.Notify("direct notification from Account");

               Console.WriteLine("Account Add thread = " +

                    Thread.CurrentThread.GetHasheode() +

                    " IsPoolThread = " +

                   Thread.CurrentThread.IsThreadPoolThread +

                   " clientProcessId ="+ clientProcessId);

           }

    ……

    Необходимая модификация клиента (MуАрр. cs) представлена ниже

    …….

    using System.Diagnostics;

    public class MyApp {

        public static void Main() {

               HttpChannel с = new HttpChannel();

               ChannelServices.RegisterChannel(c);

               Process p = Process.GetCurrentProcess();

               try {

    ……

                    for (int i=0; i<100; i++) {

                       a. Add(5, p.Id);

                  }

    …….

           }

    …….

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

    Account Add thread = 65 IsPoolThread = True clientProcessId =192

    Tax notification: new Account operation: +5

    Tax Notify thread = 65 IsPoolThread = True

    News notification: new Account operation: +5

    News Notify thread = 65 IsPoolThread = True

    News notification: direct notification from Account

    News Notify thread = 65 IsPoolThread = True

    Account Add thread = 65 IsPoolThread = True clientProcessId =192

    Tax notification: new Account operation: +5

    Tax Notify thread = 3 IsPoolThread = True

    News notification: new Account operation: +5

    News Notify thread = 3 IsPoolThread = True

    News notification: direct notification from Account

    News Notify thread = 3 IsPoolThread = True

    Account Add thread = 3 IsPoolThread = True clientProcessId =165

    Tax notification: new Account operation: +5

    Tax Notify thread = 3 IsPoolThread = True

    News notification: new Account operation: +5

    News Notify thread = 3 IsPoolThread = True

    News notification: direct notification from Account

    News Notify thread = 3 IsPoolThread = True

    …….

    Еще стоит обратить внимание на то, что рабочий поток, выполняющий вызов метода Add компонента Account, выполняет и вызовы метода Notify для компонентов Tах и News, инициированные из компонента Account. Причина в том, что в рамках данного эксперимента все три компонента находятся в одном контексте синхронизации, и поток, вошедший в этот контекст, не выходит из него, пока не будут сделаны все вышеупомянутые вызовы. Только после этого другой поток может войти в данный контекст и начать выполнение метода Add.

    Просмотрев файл LogFile, в который выполняется запись данных о перехваченных вызовах, можно заметить, что трассируются только вызовы к компоненту Account. Это объясняется тем, что именно компонент Account получает вызовы извне контекста (от клиентов), и эти вызовы перехватываются перехватчиком входящих вызовов атрибута трассировки. Вызовы, которые делаются к компонентам Tах и News, идут от компонентов Account и Tах и не пересекают границу контекста. Именно поэтому они и не перехватываются. Первые строки файла LogFile представлены ниже:

    ===SPbU.AOP_NET.Account, MyServer, Version=0.0.0.0,

         Culture=neutral, PublicKeyToken=null

    ctor

         

    1 ... 239 240 241 242 243 244 245 246 247 ... 361
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


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

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Валентина Валентина04 июль 13:25 Большое спасибо за интересную тему.  Сюжет заманчиввй,интересный. Жду продолжения ... Лекарь Фамильяров. Том 7 - Александр Лиманский
    2. Наталья По Наталья По01 июль 10:12 Ужасный перевод:(... Аркадия - Эрин Дум
    3. Вика Вика29 июнь 21:56 Какая хрень с первых строк.  У ребенка в 14 месяце не может быть черепно мозговой травмы при падании с дивана ... Вернуть семью любой ценой - Чарли Ви
    Все комметарии
    Новинки бесплатной онлайн библиотеки