Методы объектов и свойства объектов управление потоком вычислений

Содержание

Методы объекта, «this»

Объекты обычно создаются, чтобы представлять сущности реального мира, будь то пользователи, заказы и так далее:

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

Такие действия в JavaScript представлены свойствами-функциями объекта.

Примеры методов

Для начала давайте научим нашего пользователя user здороваться:

Здесь мы просто использовали Function Expression (функциональное выражение), чтобы создать функцию для приветствия, и присвоили её свойству user.sayHi нашего объекта.

Затем мы вызвали её. Теперь пользователь может говорить!

Функцию, которая является свойством объекта, называют методом этого объекта.

Итак, мы получили метод sayHi объекта user .

Конечно, мы могли бы заранее объявить функцию и использовать её в качестве метода, примерно так:

Когда мы пишем наш код, используя объекты для представления сущностей реального мира, – это называется объектно-ориентированное программирование или сокращённо: «ООП».

ООП является большой предметной областью и интересной наукой само по себе. Как выбрать правильные сущности? Как организовать взаимодействие между ними? Это – создание архитектуры, и есть хорошие книги по этой теме, такие как «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» авторов Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес или «Объектно-ориентированный анализ и проектирование с примерами приложений» Гради Буча, а также ещё множество других книг.

Сокращённая запись метода

Существует более короткий синтаксис для методов в литерале объекта:

Как было показано, мы можем пропустить ключевое слово «function» и просто написать sayHi() .

Нужно отметить, что эти две записи не полностью эквивалентны. Есть тонкие различия, связанные с наследованием объектов (что будет рассмотрено позже), но на данном этапе изучения это неважно. В большинстве случаев сокращённый синтаксис предпочтителен.

Ключевое слово «this» в методах

Как правило, методу объекта необходим доступ к информации, которая хранится в объекте, чтобы выполнить с ней какие-либо действия (в соответствии с назначением метода).

Например, коду внутри user.sayHi() может понадобиться имя пользователя, которое хранится в объекте user .

Для доступа к информации внутри объекта метод может использовать ключевое слово this .

Значение this – это объект «перед точкой», который использовался для вызова метода.

Здесь во время выполнения кода user.sayHi() значением this будет являться user (ссылка на объект user ).

Технически также возможно получить доступ к объекту без ключевого слова this , ссылаясь на него через внешнюю переменную (в которой хранится ссылка на этот объект):

…Но такой код будет ненадёжным. Если мы решим скопировать ссылку на объект user в другую переменную, например, admin = user , и перезапишем переменную user чем-то другим, тогда будет осуществлён доступ к неправильному объекту при вызове метода из admin .

Это показано ниже:

Если мы используем this.name вместо user.name внутри alert , тогда этот код будет работать.

«this» не является фиксированным

В JavaScript ключевое слово «this» ведёт себя иначе, чем в большинстве других языков программирования. Оно может использоваться в любой функции.

В этом коде нет синтаксической ошибки:

Значение this вычисляется во время выполнения кода и зависит от контекста.

Например, здесь одна и та же функция назначена двум разным объектам и имеет различное значение «this» при вызовах:

Правило простое: при вызове obj.f() значение this внутри f равно obj . Так что, в приведённом примере это user или admin .

Мы даже можем вызвать функцию вовсе без использования объекта:

В строгом режиме ( «use strict» ) в таком коде значением this будет являться undefined . Если мы попытаемся получить доступ к name , используя this.name – это вызовет ошибку.

В нестрогом режиме значением this в таком случае будет глобальный объект ( window для браузера, мы вернёмся к этому позже в главе Глобальный объект). Это – исторически сложившееся поведение this , которое исправляется использованием строгого режима ( «use strict» ).

Обычно подобный вызов является ошибкой программирования. Если внутри функции используется this , тогда ожидается, что она будет вызываться в контексте какого-либо объекта.

Если вы до этого изучали другие языки программирования, тогда вы, скорее всего, привыкли к идее «фиксированного this » – когда методы, определённые внутри объекта, всегда сохраняют в качестве значения this ссылку на свой объект (в котором был определён метод).

В JavaScript this является «свободным», его значение вычисляется в момент вызова метода и не зависит от того, где этот метод был объявлен, а зависит от того, какой объект вызывает метод (какой объект стоит «перед точкой»).

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

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

Внутренняя реализация: Ссылочный тип

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

Если вы хотите продвигаться быстрее, его можно пропустить или отложить.

Некоторые хитрые способы вызова метода приводят к потере значения this , например:

В последней строчке кода используется условный оператор ? , который определяет, какой будет вызван метод ( user.hi или user.bye ) в зависимости от выполнения условия. В данном случае будет выбран user.hi .

Затем метод тут же вызывается с помощью скобок () . Но вызов не работает как положено!

Вы можете видеть, что при вызове будет ошибка, потому что значением «this» внутри функции становится undefined (полагаем, что у нас строгий режим).

Так работает (доступ к методу объекта через точку):

Так уже не работает (вызываемый метод вычисляется):

Почему? Если мы хотим понять, почему так происходит, давайте разберёмся (заглянем под капот), как работает вызов методов ( obj.method() ).

Присмотревшись поближе, в выражении obj.method() можно заметить две операции:

  1. Сначала оператор точка ‘.’ возвращает свойство объекта – его метод ( obj.method ).
  2. Затем скобки () вызывают этот метод (исполняется код метода).

Итак, каким же образом информация о this передаётся из первой части во вторую?

Если мы поместим эти операции в отдельные строки, то значение this , естественно, будет потеряно:

Здесь hi = user.hi сохраняет функцию в переменной, и далее в последней строке она вызывается полностью сама по себе, без объекта, так что нет this .

Для работы вызовов типа user.hi() , JavaScript использует трюк – точка ‘.’ возвращает не саму функцию, а специальное значение «ссылочного типа», называемого Reference Type.

Этот ссылочный тип (Reference Type) является внутренним типом. Мы не можем явно использовать его, но он используется внутри языка.

Значение ссылочного типа – это «триплет»: комбинация из трёх значений (base, name, strict) , где:

  • base – это объект.
  • name – это имя свойства объекта.
  • strict – это режим исполнения. Является true, если действует строгий режим ( use strict ).

Результатом доступа к свойству user.hi является не функция, а значение ссылочного типа. Для user.hi в строгом режиме оно будет таким:

Когда скобки () применяются к значению ссылочного типа (происходит вызов), то они получают полную информацию об объекте и его методе, и могут поставить правильный this ( =user в данном случае, по base ).

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

При любой другой операции, например, присваивании hi = user.hi , ссылочный тип заменяется на собственно значение user.hi (функцию), и дальше работа уже идёт только с ней. Поэтому дальнейший вызов происходит уже без this .

Таким образом, значение this передаётся правильно, только если функция вызывается напрямую с использованием синтаксиса точки obj.method() или квадратных скобок obj[‘method’]() (они делают то же самое). Позднее в этом учебнике мы изучим различные варианты решения проблемы потери значения this . Например, такие как func.bind().

У стрелочных функций нет «this»

Стрелочные функции особенные: у них нет своего «собственного» this . Если мы используем this внутри стрелочной функции, то его значение берётся из внешней «нормальной» функции.

Например, здесь arrow() использует значение this из внешнего метода user.sayHi() :

Это является особенностью стрелочных функций. Они полезны, когда мы на самом деле не хотим иметь отдельное значение this , а хотим брать его из внешнего контекста. Позднее в главе Повторяем стрелочные функции мы увидим больше примеров на эту тему.

Итого

  • Функции, которые находятся в объекте в качестве его свойств, называются «методами».
  • Методы позволяют объектам «действовать»: object.doSomething() .
  • Методы могут ссылаться на объект через this .

Значение this определяется во время исполнения кода.

  • При объявлении любой функции в ней можно использовать this , но этот this не имеет значения до тех пор, пока функция не будет вызвана.
  • Эта функция может быть скопирована между объектами (из одного объекта в другой).
  • Когда функция вызывается синтаксисом «метода» – object.method() , значением this во время вызова является объект перед точкой.

Также ещё раз заметим, что стрелочные функции являются особенными – у них нет this . Когда внутри стрелочной функции обращаются к this , то его значение берётся снаружи.

Потоки и параллельные вычисления

Потоки операционной системы Windows — это низкоуровневый механизм, позволяющий операционной системе реализовать параллельные вычисления. Благодаря потокам, ОС организует как мультипрограммную работу — одновременное выполнение нескольких программ, так и параллельные вычисления — одновременное выполнение нескольких фрагментов кода одной и той же программы. Подробнее об этом уже говорилось во «Процессы и потоки в операционной системе» .

В «Параллельные алгоритмы» , где рассматривались алгоритмы и возможности распараллеливания вычислений, отмечалось, что не всякий алгоритм допускает возможность его параллельного вычисления. Алгоритмы, допускающие распараллеливание , являются, как правило, более сложными, чем последовательные алгоритмы. Но даже в том случае, когда алгоритм потенциально допускает распараллеливание вычислений, реализация этой потенциальной возможности является непростой задачей для программиста.

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

Пространство имен Threading

Для поддержки работы с потоками библиотека классов каркаса FCL предоставляет классы, собранные в пространство имен Threading . Познакомиться даже кратко со всеми классами практически невозможно, поскольку их более полусотни. Сюда входит класс Thread , позволяющий создавать потоки, многочисленные классы, поддерживающие синхронизацию потоков, классы исключений разного рода, возникающих при работе с потоками, классы делегаты , определяющие сигнатуры методов, используемых при работе с потоками, классы перечисления, классы, определяемые как структуры. В это же пространство входит и класс Timer , поддерживающий синхронизацию действий по времени.

Класс Thread

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

При программировании на C# поток — это объект класса Thread . Давайте рассмотрим, какие операции можно выполнять над этими объектами, какие свойства можно задавать для них.

Объявление объектов класса Thread

Объекты этого класса объявляются, также как и все другие объекты C#, никаких особенностей в объявлении нет. Вот пример объявления двух потоков:

Создание потоков — объектов класса Thread

Как обычно, объекты создаются конструктором класса. При создании потоков необходимо задать код, который будет выполняться потоком. Этот код должен быть методом класса. Зачастую, потоку передается не только метод, но и объект, вызывающий метод. Например, в проекте может быть класс Works с методом Work . В клиентском классе, создающем поток, можно создать объект worker класса Work и при создании потока передать ему квалифицированный вызов — worker.Work . Это хороший стиль, облегчающий построение потоко-безопасного приложения, поскольку метод Work будет работать с полями переданного ему объекта, и не будет конфликтовать с другим потоком, работающим с тем же методом Work , но вызванным другим объектом — another_worker .

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

Метод, который будет исполняться потоком, необходимо передать конструктору класса Thread . Поскольку конструктору необходимо передать метод, то соответствующий аргумент конструктора должен иметь функциональный тип и задаваться делегатом, описывающим сигнатуру метода. У класса Thread есть четыре конструктора. Простейший из них имеет один аргумент, тип которого задается делегатом ThreadStart . Этому типу соответствуют все методы, не имеющие аргументов и являющиеся процедурами, — методы типа void M() <…>. Такие методы не являются экзотикой, — они характерны для объектного стиля программирования, когда вся входная и выходная информация метода передается через поля класса.

Если все же методу, выполняемому в потоке, необходимо передать информацию, то можно использовать конструктор класса Thread с одним аргументом, тип которого задается делегатом ParameterizedThreadStart . Этот класс задан следующим образом:

Этому типу соответствуют все методы с одним аргументом, являющиеся процедурами. Фактически этот класс является универсальным, позволяющим использовать его для всех методов, имеющих аргументы. Понятно, что предусмотреть все возможные сигнатуры, возникающие в практических задачах, невозможно, поэтому приходится идти на компромисс. Если у метода, передаваемого потоку, один аргумент некоторого типа Т , то он соответствует сигнатуре делегата, поскольку тип object является родителем любого типа. В реализации метода достаточно будет выполнить явное приведение типа object к типу Т . Если же у метода n (n > 1) аргументов, то в этом случае необходимо создать специальный класс (структуру) S_class , описывающий требуемое методу множество аргументов. После этого можно описать метод, передаваемый потоку, как метод с одним аргументом типа S_class , что и позволит передать этот метод конструктору потока.

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

позволяет объявить объект, задающий поток. Создать сам объект можно, вызвав конструктор класса Thread :

передав конструктору метод класса. Все будет синтаксически корректно, если метод my_method не имеет аргументов или имеет один аргумент.

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

Приведу пример, иллюстрирующий рассмотренные способы создания и запуска потоков. Начнем с создания класса Works :

В процедуре Main демонстрируются разные способы создания и запуска трех потоков:

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

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

Потоки w1 и w2 выполняют один и тот же метод Work класса Works , и на многоядерном компьютере будут выполняться параллельно. Никаких конфликтов не возникает, поскольку метод вызывается разными объектами класса Works , у каждого из которых своя память для хранения полей класса.

Результаты работы процедуры Main показаны на рис. 4.1

Запуск потока

Создания объекта, задающего поток, еще не достаточно, чтобы поток начал выполняться. Для запуска потока на выполнение необходимо вызвать метод Start в форме my_thread.Start() , либо в форме my_thread.Start(my_object) , если методу my_method необходимо передать информацию. Заметьте, фактический аргумент my_object , передаваемый методу, исполняемому потоком, передается не в момент создания потока, а в момент его запуска на выполнение. Другая ситуация имеет место, когда потоку передается анонимный метод. Как показано в предыдущем примере, анонимный метод вызывает метод Info , передавая ему фактические параметры.

Следует понимать, что вызов метода Start не означает, что запущенный метод my_method непосредственно начнет выполняться. Вызов метода Start является указанием операционной системе на перевод потока my_thread из состояния «создание» в состояние «готовность», так что поток станет в очередь на выполнение. Если потоку повезет, и в момент запуска он окажется первым в очереди и найдется свободный процессор, то метод начнет непосредственно выполняться, иначе он будет ждать, пока до него не дойдет очередь.

Когда запущенный на выполнение метод my_method завершает свою работу, то заканчивает свою жизнь и соответствующий поток, для него нельзя повторно вызвать метод Start . для повторного запуска метода нужно создать новый поток. «Мавр сделал свое дело, — мавр должен уйти».

Состояние «ожидание»

Выполняемый поток операционная система периодически может переводить в состояние «ожидание», предоставляя процессор другим потокам. Но поток сам может потребовать перевода его в это состояние. Причины для этого могут быть разные, — чаще всего это делается в интересах синхронизации совместной работы потоков. Рассмотрим два метода класса Thread , используемые для этих целей. Статический метод Sleep позволяет потоку «уснуть» на некоторое время. У этого метода две перегруженные реализации, — обе с одним аргументом — dt . Если задать аргумент dt типа int , то поток засыпает на dt миллисекунд, после чего готов выполнять свою работу. Часто задается значение этого аргумента, равное нулю. В этом случае поток добровольно позволяет другим потокам выполнять свою работу, а сам становится в конец очереди, — пример бескорыстия ради общих интересов. Аргумент dt может быть объектом класса TimeSpan . У этого класса несколько конструкторов. Если вызвать конструктор с одним аргументом, то время сна будет задаваться в тиках, если задавать три аргумента, то можно время задать в часах, минутах, секундах; четыре аргумента позволяют задавать и миллисекунды.

Возможным значением аргумента dt является и константа класса Timeout — Infinity , когда поток засыпает на неопределенно долгое время.

Другим методом, прерывающим работу потока, является метод Join . Представьте, что основной поток создал поток my_thread , запустил его на выполнение, и сам продолжает выполняться. В какой-то момент времени основному потоку могут понадобиться результаты работы запущенного им потока my_thread , но ему неизвестно, закончил ли свою работу дочерний поток. В этом случае в основном потоке осуществляется вызов my_thread.Join . Вызывающий поток приостанавливается, пока не произойдет событие — дочерний поток завершил работу. Остановки не будет, если в момент выполнения Join дочерний поток уже завершил свою работу.

Нетерпеливый поток может вызывать метод Join не как процедуру, а как булевскую функцию с одним аргументом dt , задающим время, в течение которого вызывающий поток ждет завершения работы дочернего потока. Если в указанное время дочерний поток завершается, то функция возвращает значение true , иначе — false .

Потоки как объект управления. Материальные потоки и логистические операции

2. ПОТОКИ КАК ОБЪЕКТ УПРАВЛЕНИЯ.

МАТЕРИАЛЬНЫЕ ПОТОКИ И ЛОГИСТИЧЕСКИЕ ОПЕРАЦИИ

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

Параметры материальных потоков:

· номенклатура, ассортимент и количество продукции;

· габаритные характеристики (объем, площадь, линейные размеры);

· весовые характеристики (общая масса, вес брутто, вес нетто);

· физико-химические характеристики груза;

· характеристики тары (упаковки);

· условия договоров купли-продажи (передача в собственность, поставки);

· условия транспортировки и страхования;

· финансовые (стоимостные) характеристики;

· условия выполнения других операций физического распределения, связанных с перемещением продукции и др.

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

Рис. 3. Классификация материальных потоков

При классификации выделяют следующие основные признаки:

1. По отношению к логистической системе (ЛС) различают внутренние (не выходящие за пределы ЛС) потоки и внешние, поступающие в ЛС из внешней среды (входные) и выходящие из ЛС во внешнюю среду (выходные).

2. По отношению к звену логистической системы (ЗЛС) материальные потоки делятся на входные и выходные. Внутренние материальные потоки в ЗЛС обычно не рассматриваются в рамках заданной декомпозиции ЛС.

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

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

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

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

Например, при транспортировке железнодорожным транспортом грузы различаются:

а) в зависимости от весовых и объемных показателей:

· тяжеловесные (масса одного места больше 500 кг);

· большой массы (масса от 100 до 500 кг);

· легковесные (не обеспечивающие использования грузовместимости);

· негабаритные (высота одного места более 3,8 м, ширина – более 2,5 м, длина – больше длины грузовой площадки);

б) по физико-химическим свойствам:

· сыпучие (перевозимые навалом);

· наливные (жидкие и полужидкие), перевозимые в цистернах, бутылях и других специальных емкостях;

· штучные (единицей измерения которых являются штуки); тарно-штучные (измеряются количеством тары – мешки, ящики, рулоны и т. п.).

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

· тарно-упаковочные и штучные;

· металл и металлические изделия;

· зерновые грузы и овощи;

По способу затаривания при транспортировке различают грузы в:

Очевидно, что такое большое количество характеристик предопределяет специфический подход и свою классификацию материальных потоков по рассматриваемому признаку при анализе и синтезе конкретных ЛС.

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

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

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

Логистическая операция – это совокупность действий, имеющая целью инициирование или преобразование в процессе экономической деятельности того или иного материального либо информационного или финансового потока.

Все логистические операции можно подразделить на следующие группы:

— Логистические операции с материальными потоками в сфере обращения – погрузка, разгрузка, транспортировка, комплектация, складирование, распределение, затаривание.

— Логистические операции с материальными потоками в сфере производства – размещение заказов, управление складированием, выбор оборудования, поставщиков, планирование и диспетчирование производственного процесса, учет и управление запасами.

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

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

Классификация логистических операций представлена на рис. 4.

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

Рис. 4. Схема – классификация логистических операций

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

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

Динамическая идентификация объектов управления

Введение

Идентификация объектов управления — совокупность методов для построения математических моделей объекта по данным наблюдений.

Математическая модель в данном контексте означает математическое описание поведения какого-либо объекта или процесса в частотной или временной области, к примеру, физических процессов (движение механической системы под действием внешней силы [1]), экономического процесса (влияние смены курса валют на потребительские цены на товары [2]).

В настоящее время эта область теории управления находит широкое применение на практике и поэтому интересна для рассмотрения.

Область динамической идентификации объектов управления в связи с различной природой самих объектов достаточно обширна, поэтому для начала ограничимся рассмотрением методов обработки так называемой кривой разгона.

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

Постановка задачи

1. Построить математические модели динамической идентификации объекта управления по нормированной переходной характеристике (кривой разгона):

• Методом наименьших квадратов с использованием производных;
• Модифицированным методом площадей.

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

Идентификация состоит в отыскании для объекта адекватной ему модели. Различают структурную и параметрическую идентификацию. При структурной идентификации определяется форма модели из некоторого заданного класса функций, при параметрической идентификации определяются параметры модели.

Если выходные сигналы объекта Y(t) полностью определяются наблюдаемыми входными воздействиями X(t), то для его идентификации достаточно использовать методы активного эксперимента.

Исходной информацией является экспериментально снятая кривая разгона – реакция объекта Y(t) на поданное входное воздействие X(t) в интервале времени 0≤t≤T.

Это структурная схема модели объекта с операторной передаточной функцией W(p). Уравнение динамической характеристики объекта можно условно представить в следующем виде:

(1)
где – время запаздывания объекта, которое проходит от момента подачи сигнала на вход объекта до момента появления сигнала на его выходе; k – коэффициент усиления (или коэффициент передачи) объекта.

Схема для определения времени запаздывания и коэффициента усиления объекта:

Входные и выходные величины, как правило, масштабируются в стандартном диапазоне от 0 до 1 (нормируются):

После определения k и можно исследовать объект в нормированных координатах и без запаздывания, сместив шкалу времени вправо на величину [3].

Структурная идентификация объекта

При структурной идентификации априорная информация об объекте используется для определения структуры модели.

Уравнение динамики, как правило, выбирается из класса линейных или линеаризованных характеристик. В нормированных координатах модель объекта с сосредоточенными параметрами, одним входным и одним выходным сигналом является обыкновенным дифференциальным уравнением с постоянными коэффициентами:

где коэффициенты и имеют размерность времени в степени, равной порядку производной соответствующего слагаемого. В физически реализуемых системах n≥m

По виду кривой разгона можно приближённо определить порядок будущей модели, например, для объекта первого порядка:

Для объектов более высоких порядков:

Обычно X(t) – ступенчатая функция, поэтому порядок уравнения (1) может быть приближенно определен по форме кривой разгона объекта. Если эта характеристика не имеет точек перегиба, то n = 1. Если есть перегиб при t = tп, и tп / T 2. Однако можно снизить порядок модели, вводя фиктивное запаздывание.

Влияние погрешности измерения X(t) и Y(t) и погрешности численных методов обработки информации обычно делает нецелесообразным использование моделей выше третьего-четвертого порядка.

Параметрическая идентификация объекта

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

Параметрическая идентификация методом наименьших квадратов с использованием производных

Для идентификации объекта произвольного порядка используется метод наименьших квадратов, требующий минимизации среднего квадрата невязки правой и левой частей уравнения (2):

где: и – производные i-го и j-го порядка от функций выходного и входного сигналов.

Решение задачи (3) сводится к решению системы:

Илон Маск рекомендует:  Что такое код createpenindirect

Преобразуя (4) в соответствии с уравнением (3), можно получить систему линейных алгебраических уравнений:

Для решения системы (5) относительно неизвестных параметров необходимо знать производные входного и выходного сигналов объекта, которые находятся в результате сглаживания функций X(t) и Y(t) на отрезке . Для расчета коэффициента используется формула:

Погрешность численного дифференцирования, как правило, достаточно высока, поэтому схему определения коэффициентов, нужно использовать дифференцирование аналитических выражений для X(t) и Y(t).

Параметрическая идентификация модифицированным методом площадей

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

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

Выражение 1/W(p), обратное передаточной функции модели, можно разложить в ряд по степени р:

Коэффициенты a,b приведенных передаточных функций связаны с коэффициентами S следующей системой уравнений:

Коэффициенты Si связаны с переходной функцией h(t) соотношениями:

Соотношения (6) оптимальны для решения средствами Python при интерполяции h(t) кубическими сплайнами, что будет доказано на примерах.

Оценка адекватности математических моделей идентификации объектов управления

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

где – данные, снятые с кривой разгона, – значения, рассчитанные по действительной части Re(W(i×w)) передаточной функции модели (переход из частотной области во временную):

(8)
Лучшей следует считать модель, обеспечивающую максимальное значение

Учитывая существенную погрешность численного дифференцирования при решении системы уравнений (5), реализуем символьное дифференцирование. Для этого применим интерполяцию полиномом в соответствии со следующим листингом:

Время работы программы: 0.802

Высокая степень адекватности модели 0.99743 свидетельствует о том, что полученная передаточная функция:

достаточно точно отображает динамические свойства объекта.

Кривая разгона получена экспериментально, поэтому дельнейшие исследование систем управления объектом на устойчивость [4] и определения параметров регуляторов [5] приобретают практическое значение.

Реализация средствами Python задачи идентификации объекта модифицированным методом площадей

Для решения этой задачи можно использовать численные методы поскольку модель не содержит дифференцирования, а предложенный метод решения согласно соотношениям (6) не предполагает смены координаты времени. Кроме этого, применим интерполяцию сплайном в соответствии со следующим листингом:

Время работы программы: 0.238

Высокая степень адекватности модели 0.99996 и большее быстродействие, чем при символьном дифференцировании, позволяет утверждать, что передаточная функция:

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

Выводы

1. Публикация знакомит с основами динамической идентификации объекта управления.

2. Реализация решения задачи идентификации на свободно распространяемом языке программирования Python с примерами использования явного представления переходной функции полиномом и сплайнами будет способствовать расширению области применения Python.

3. Для численных решений задач идентификации, можно предложить использование соотношений (6), которые позволяют получить результат без изменения координаты времени.

Методы объектов и свойства объектов управление потоком вычислений

Разбиение C++ программ на множество потоков

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

(— Эндрю Кёниг и Барбара My(Andrew Koening and Barbara Moo), Ruminations on С++ )

Работу любой последовательной программы можно разделить между несколькими подпрограммами. Каждой подпрограмме назначается конкретная задача, и все эти задачи выполняются одна за другой. Вторая задача не может начаться до тех пор, пока не завершится первая, а третья — пока не закончится вторая и т.д. Описанная схема прекрасно работает до тех пор, пока не будут достигнуты границы производительности и сложности. В одних случаях единственное решение проблемы производительности — найти возможность выполнять одновременно более одной задачи. В других ситуациях работа подпрограмм в программе настолько сложна, что имеет смысл представить эти подпрограммы в виде мини-программ, которые выполняются параллельно внутри основной программы. В главе 3 были представлены методы разбиения одной программы на несколько процессов, каждый из которых выполняет отдельную задачу. Такие методы позволяют приложению в каждый момент времени выполнять сразу несколько действий. Однако в этом случае каждый процесс имеет собственные адресное пространство и ресурсы. Поскольку каждый процесс занимает отдельное адресное пространство, то взаимодействие между процессами превращается в настоящую проблему. Для обеспечения связи между раздельно выполняемыми частями общей программы нужно реализовать такие средства межпроцессного взаимодействия, как каналы, FIFO-очереди (с дисциплиной обслуживания по принципу «первым пришел — первым обслужен») и переменные среды. Иногда нужно иметь одну программу (которая выполняет несколько задач одновременно), не разбивая ее на множество мини-программ. В таких обстоятельствах можно использовать потоки. Потоки позволяют одной программе состоять из параллельно выполняемых частей, причем все части имеют доступ к одним и тем же переменным, константам и адресному пространству в целом. Потоки можно рассматривать как мини-программы в основной программе. Если программа разделена на несколько процессов, как было показано в главе 3 , то с выполнением каждого отдельного процесса связаны определенные затраты системных ресурсов. Для потоков требуется меньший объем затрат системных ресурсов. Поэтому потоки можно рассматривать как облегченные процессы, т.е. они позволяют воспользоваться многими преимуществами процессов без больших затрат на организацию взаимодействия между ними. Потоки обеспечивают средства разделения основного «русла» программы на несколько параллельно выполняемых «ручейков».

Под потоком подразумевается часть выполняемого кода в UNIX- или Linux-процессе, которая может быть регламентирована определенным образом. Затраты вычислительных ресурсов, связанные с созданием потока, его поддержкой и управлением, у операционной системы значительно ниже по сравнению с аналогичными затратами для процессов, поскольку объем информации отдельного потока гораздо меньше, чем у процесса. Каждый процесс имеет основной, или первичный, поток. Под основным потоком процесса понимается программный поток управления или поток выполнения. Процесс может иметь несколько потоков выполнения и, соответственно, столько же потоков управления. Каждый поток, имея собственную последовательность инструкций, выполняется независимо от других, а все они — параллельно друг другу. Процесс с несколькими потоками, называется многопоточным. Многопоточный процесс, состоящий из нескольких потоков, показан на рис. 4.1.

Рис. 4.1. Потоки выполнения многопоточного процесса

Контекстные требования потока

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

Потоки — это выполняемые части программы, которые соревнуются за использование процессора с потоками того же самого или других процессов. В многопроцессорной системе потоки одного процесса могут выполняться одновременно на различных процессорах. Однако потоки конкретного процесса выполняются только на процессоре, который назначен этому процессу. Если, например, процессоры 1, 2 и 3 назначены процессу А, а процесс А имеет три потока, то любой из них может быть назначен любому процессору. В среде с одним процессором потоки конкурируют за его использование. Параллельность же достигается за счет переключения контекста. Контекст переключается, если операционная система поддерживает многозадачность при наличии единственного процессора. Многозадачность позволяет на одном процессоре одновременно выполнять несколько задач. Каждая задача выполняется в течение выделенного интервала времени. По истечении заданного интервала или после наступления некоторого события текущая задача снимается с процессора, а ему назначается другая задача. Когда потоки выполняются параллельно в одном процессе, то о таком процессе говорят, что он — многопоточный. Каждый поток выполняет свою подзадачу таким образом, что подзадачи процесса могут выполняться независимо от основного потока управления процесса. При многозадачности потоки могут конкурировать за использование одного процессора или назначаться другим процессорам. Но в любом случае переключение контекста между потоками одного и того же процесса требует меньше ресурсов, чем переключение контекста между потоками различных процессов. Процесс использует много системных ресурсов для отслеживания соответствующей информации, а на управление этой информацией при переключении контекста между процессами требуется значительное время. Большая часть информации, содержащейся в контексте процесса, описывает адресное пространство процесса и ресурсы, которыми он владеет. Переключаясь между потоками, определенными в различных адресных пространствах, контекст переключается и между процессами. Поскольку потоки в рамках одного процесса не имеют собственного адресного пространства (или ресурсов), то операционной системе приходится отслеживать меньший объем информации. Контекст потока состоит только из идентификационного номера (id), стека, набора регистров и приоритета. В регистрах содержится программный указатель и указатель стека. Текст (программный код) потока содержится в текстовом разделе соответствующего процесса. Поэтому переключение контекста между потоками одного процесса займет меньше времени и потребует меньшего объема системных ресурсов.

Сравнение потоков и процессов

У потоков и процессов есть много общего. Они имеют идентификационный номер (id), состояние, набор регистров, приоритет и привязку к определенной стратегии планирования. Подобно процессам, потоки имеют атрибуты, которые описывают их для операционной системы. Эта информация содержится в информационном блоке потока, подобном информационному блоку процесса. Потоки и сыновние процессы разделяют ресурсы родительского процесса. Ресурсы, открытые родительским процессом (в его основном потоке), немедленно становятся доступными всем потокам и сыновним процессам. При этом никакой дополнительной инициализации или подготовки не требуется. Потоки и сыновние процессы независимы от родителя (создателя) и конкурируют за использование процессора. Создатель процесса или потока управляет своим потомком, т.е. он может отменить, приостановить или возобновить его выполнение либо изменить его приоритет. Поток или процесс может изменить свои атрибуты и создать новые ресурсы, но не может получить доступ к ресурсам, принадлежащим другим процессам. Однако между потоками и процессами есть множество различий.

Различия между потоками и процессами

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

Потоки, управляющие другими потоками

В то время как процессы могут управлять другими процессами, если между ними установлены отношения типа «родитель-потомок», потоки одного процесса считаются равноправными и находятся на одном уровне, независимо от того, кто кого создал. Любой поток, имеющий доступ к идентификационному номеру (id) некоторого другого потока, может отменить, приостановить, возобновить выполнение э того потока либо изменить его приоритет. Отмена основного потока приведет к завершению всех потоков процесса, т.е. к ликвидации процесса. Любые изменения, внесенные в основной поток, могут повлиять на все потоки процесса. При изменении приоритета процесса все его потоки, которые унаследовали этот приоритет, должны также изменить свои приоритеты. Сходства и различия между потоками и процессами сведены в табл. 4.1.

Таблица 4.1. Сходства и различия между потоками и процессами

• Оба имеют идентификационный номер (id), состояние, набор регистров, приоритет и привязку

к определенной стратегии планирования

• И поток, и процесс имеют атрибуты, которые описывают их особенности для операционной системы

• Как поток, так и процесс имеют информационные блоки

• Оба разделяют ресурсы с родительским процессом

• Оба функционируют независимо от родительского процесса

• Их создатель может управлять потоком или процессом

• И поток, и процесс могут изменять свои атрибуты

• Оба могут создавать новые ресурсы

• Как поток, так и процесс не имеют доступа к ресурсам другого процесса

• Потоки разделяют адресное пространство процесса, который их создал; процессы имеют собственное адресное пространство

• Потоки имеют прямой доступ к разделу данных своего процесса; процессы имеют собственную копию раздела данных родительского процесса

• Потоки могут напрямую взаимодействовать

с другими потоками своего процесса; процессы должны использовать специальный механизм межпроцессного взаимодействия для связи с «братскими» процессами

• Потоки почти не требуют системных затратна поддержку процессов требуются значительные затраты системных ресурсов

• Новые потоки создаются легко; новые процессы требуют дублирования родительского процесса

• Потоки могут в значительной степени управлять потоками того же процесса; процессы управляют только сыновними процессами

• Изменения, вносимые в основной поток (отмена, изменение приоритета и т.д.), могут влиять на поведение других потоков процесса; изменения, вносимые в родительский процесс, не влияют на сыновние процессы

Преимущества использования потоков

При управлении подзадачами приложения использование потоков имеет ряд преимуществ.

• Для переключения контекста требуется меньше системных ресурсов.

• Достигается более высокая производительность приложения.

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

• Программа имеет более простую структуру.

Переключение контекста при низкой (ограниченной) доступности процессора

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

Возможности повышения производительности приложения

Создание нескольких потоков повышает производительность приложения. При использовании одного потока запрос к устройствам ввода-вывода может остановить весь процесс. Если же в приложении организовано несколько потоков, то пока один из них будет ожидать удовлетворения запроса ввода-вывода, другие потоки, которые не зависят от заблокированного, смогут продолжать выполнение. Тот факт, что не все потоки ожидают завершения операции ввода-вывода, означает, что приложение в целом не заблокировано ожиданием, а продолжает работать.

Простая схема взаимодействия между параллельно выполняющимися потоками

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

Упрощение структуры программы

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

Недостатки использования потоков

Простота доступности потоков к памяти процесса имеет свои недостатки.

• Потоки могут легко разрушить адресное пространство процесса.

• Потоки необходимо синхронизировать при параллельном доступе (для чтения или записи) к памяти.

• Один поток может ликвидировать целый процесс или программу.

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

Рис. 4.2. Взаимодействие между потоками одного процесса и взаимодействие между несколькими процессами

Потоки могут легко разрушить адресное пространство процесса

Потоки могут легко разрушить информацию процесса во время «гонки» данных, если сразу несколько потоков получат доступ для записи одних и тех же данных. При использовании процессов это невозможно. Каждый процесс имеет собственные данные, и другие процессы не в состоянии получить к ним доступ, если не сделать это специально. Защита информации обусловлена наличием у процессов отдельных адресных пространств. Тот факт, что потоки совместно используют одно и то же адресное пространство, делает данные незащищенными от искажения. Например, процесс имеет три потока — А, В и С. Потоки А и В записывают информацию в некоторую область памяти, а поток С считывает из нее значение и использует его для вычислений. Потоки А и В могут попытаться одновременно записать информацию в эту область памяти. Поток В может перезаписать данные, записанные потоком А, еще до того, как поток С получит возможность считать их. Поведение этих потоков должно быть синхронизировано таким образом, чтобы поток С мог считать данные, записанные потоком А, до того, как поток В их перезапишет. Синхронизация защищает данные от перезаписи до их использования. Тема синхронизации потоков рассматривается в главе 5.

Один поток может ликвидировать целую программу

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

Потоки не могут многократно использоваться другими программами

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

Образ потока встраивается в образ процесса. Как было описано в главе 3, процесс имеет разделы программного кода, данных и стеков. Поток разделяет разделы кода и данных с остальными потоками процесса. Каждый поток имеет собственный стек, выделенный ему в стековом разделе адресного пространства процесса. Размер потокового стека устанавливается при создании потока. Если создатель потока не определяет размер его стека, то система назначает размер по умолчанию. Размер, устанавливаемый по умолчанию, зависит от конкретной системы, максимально возможного количества потоков в процессе, размера адресного пространства, выделяемого процессу, и пространства, используемого системными ресурсами. Размер потокового стека должен быть достаточно большим для любых функций, вызываемых потоком, любого кода, который является внешним по отношению к процессу (например, это Может быть библиотечный код), и хранения локальных переменных. Процесс с несколькими потоками должен иметь стековый раздел, который будет вмещать все стеки его потоков. Адресное пространство, выделенное для процесса, ограничивает раз-Мер стека, ограничивая тем самым размер, который может иметь каждый поток. На Рис.4.3 показана схема процесса, который содержит два потока.

Как показано на рис. 4.3, процесс содержит два потока А и В, и их стеки располо жены в стековом разделе процесса. Потоки выполняют различные функции: поток А вы п олняет функцию func1(), а поток В — функцию func2().

Рис. 4.3. Схема процесса, содержащего два потока (SP — указатель стека, PC — счетчик команд)

Таблица 4.2. Преимущества и недостатки потоков

Для переключения контекста требуется меньше системных ресурсов

Потоки способны повысить производительность приложения

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

Благодаря потокам структуру программы можно упростить

Для параллельного доступа к памяти (чтения или записи данных) требуется синхронизация

Потоки могут разрушить адресное пространство своего процесса

Потоки существуют в рамках только одного процесса, поэтому их нельзя повторно использовать

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

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

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

• стратегия планирования и параметры.

Объект атрибутов потока может быть связан с одним или несколькими потоками. При использовании этого объекта поведение потока или группы потоков определяется профилем. Все потоки, которые используют объект атрибутов, приобретают все свойства, определенные этим объектом. На рис. 4.3 показаны атрибуты, связанные с каждым потоком. Как видите, оба потока (А и В) разделяют объект атрибутов, но они поддерживают свои отдельные идентификационные номера и наборы регистров. После того как объект атрибутов создан и инициализирован, его можно использовать в любых обращениях к функциям создания потоков. Следовательно, можно создать группу потоков, которые будут иметь «малый стек и низкий приоритет» или «большой стек, высокий приоритет и состояние открепления». Открепленный (detached) поток — это поток, который не синхронизирован с другими потоками в процессе. Иначе говоря, не существует потоков, которые бы ожидали до тех пор, пока завершит выполнение открепленный поток. Следовательно, если уж такой поток существует, то его ресурсы (а именно id потока) немедленно принимаются на повторное использование. [8] Для установки и считывания значений этих атрибутов предусмотрены специальные методы. После создания потока его атрибуты нельзя изменить до тех пор, пока он существует.

Атрибут области видимости описывает, с какими потоками конкретный поток конкурирует за обладание системными ресурсами. Потоки соперничают за ресурсы в рамках двух областей видимости: процесса (потоки одного процесса) и системы (все потоки в системе). Конкуренция потоков в пределах одного и того же процесса происходит за дескрипторы файлов, а конкуренция потоков в масштабе всей системы — за ресурсы, которые выделяются системой (например, реальная память). Потоки соперничают с потоками, которые имеют область видимости процесса, и потоками из других процессов за использование процессора в зависимости от состязательного режима и областей выделения ресурсов (набора процессоров). Поток, обладающий системной областью видимости, будет обслуживаться с учетом его приоритета и стратегии планирования, которая действует для всех потоков в масштабе всей системы. Члены POSIX-объекта атрибутов потока перечислены в табл. 4.3.

Таблица 4.3. Члены объекта атрибутов потока

Атрибуты Функции Описание
detachstate int pthread_attr_ setdetachstate (pthread_attr_t *attr, int detachstate); Атрибут detachstate определяет, является ли новый поток открепленным. Если это соответствует истине, то его нельзя объединить ни с каким другим потоком
guardsize int pthread_attr_ setguardsize (pthread_attr_t *attr, size_t guardsize) Атрибут guardsize позволяет управлять размером защитной области стека нового потока. Он создает буферную зону размером guardsize на переполненяемом конце стека
inheritsched int pthread_attr_ setinheritsched (pthread_attr_t *attr, int inheritsched) Атрибут inheritsched определяет, как будут установлены атрибуты планирования для нового потока, т.е. будут ли они унаследованы от потока-создателя или установлены атрибутным объектом
param int pthread_attr_ setschedparam (pthread_attr_t *restrict attr, const struct sched_param *restrict param);
schedpolicy int pthread_attr_ setschedpolicy (pthread_attr_t *attr, int policy);
contentionscope int pthread_attr_ setscope (pthread_attr_t *attr, int contentionscope);
stackaddr int pthread_attr_ setstackaddr (pthread_attr_t *attr, void *stackaddr);
int pthread_attr_ setstack (pthread_attr_t
*attr, void *stackaddr, size_t stacksize)j
stacksize int pthread_attr_ setstacksize (pthread_attr_t *attr, size_t stacksize),
int pthread_attr_ setstack (pthread_attr_t *attr, void *stackaddr, size_t stacksize)j

Атрибут param— это структура, которую можно использовать для установки приоритета нового потока

Атрибут schedpolicy определяет стратегию планирования создаваемого потока

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

Атрибуты stackaddr и stacksize определяют базовый адрес и минимальный размер (в байтах) стека, выделяемого для создаваемого потока, соответственно

Атрибут stackaddr определяет базовый адрес стека, выделяемого для создаваемого потока

Атрибут stacksize определяет минимальный размер стека в байтах, выделяемого для создаваемого потока

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

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

Потоки имеют такие же состояния и переходы между ними (см. главу 3), как и процессы. Диаграмма состояний, показанная на рис. 4.4, — это копия диаграммы, изображенной на рис. 3.4 из главы 3. (Вспомним, что процесс может пребывать в одном из четырех состояний: готовности, выполнения, останова и ожидания, или блокирования.) Состояние потока — это режим или условия, в которых поток существует в данный момент. Поток находится в состоянии готовности (работоспособности), когда он готов к выполнению. Все готовые к работе потоки помещаются в очереди готовности, причем в каждой такой очереди содержатся потоки с одинаковым приоритетом. Когда поток выбирается из очереди готовности и назначается процессору, он (поток) переходит в состояние выполнения. Поток снимается с процессора, если его квант времени истек, или если перешел в состояние готовности поток с более высоким приоритетом. Выгруженный поток снова помещается в очередь готовых потоков. Поток пребывает в состоянии ожидания, если он ожидает наступления некоторого события или завершения операции ввода-вывода. Поток прекращает выполнение, получив сигнал останова, и остается в этом состоянии до тех пор, пока не получит сигнал продолжить работу.

Рис. 4.4. Состояния потоков и переходы между ними

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

Один поток может определить состояние всего процесса. Состояние процесса с одним потоком синонимично состоянию его основного потока. Если его основной поток находится в состоянии ожидания, значит, и весь процесс находится в состоянии ожидания. Если основной поток выполняется, значит, и процесс выполняется. Что касается процесса с несколькими потоками, то для того, чтобы утверждать, что весь процесс находится в состоянии ожидания или останова, необходимо, чтобы все его потоки пребывали в состоянии ожидания или останова. Но если хотя бы один из его потоков активен (т.е. готов к выполнению или выполняется), процесс считается активным.

Планирование потоков и область конкуренции

Область конкуренции потоков определяет, с каким множеством потоков будет соперничать рассматриваемый поток за использование процессорного времени. Если поток имеет область конкуренции уровня процесса, он будет соперничать за ресурсы с потоками того же самого процесса. Если же поток имеет системную область конкуренции, он будет соперничать за процессорный ресурс с равными ему по правам потоками (из одного с ним процесса) и с потоками других процессов. Пусть, например, как показано на рис. 4.5, существуют два процесса в мультипроцессорной среде, которая включает три процессора. Процесс А имеет четыре потока, а процесс В — три. Для процесса А «расстановка сил» такова: три (из четырех его потоков) имеют область конкуренции уровня процесса, а один— уровня системы. Для процесса В такая «картина»: два (из трех его потоков) имеют область конкуренции уровня процесса, а один— уровня системы. Потоки процесса А с процессной областью конкуренции соперничают за процессор А, а потоки процесса В с такой же (процессной) областью конкуренции соперничают за процессор С. Потоки процессов А и В с системной областью конкуренции соперничают за процессор В.

ПРИМЕЧАНИЕ: потоки при моделировании их реального поведения в приложении Должны иметь системную область конкуренции.

Стратегия планирования и приоритет

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

процессорное время. В операционной системе с приоритетами выполняющийся поток снимается с процессора, если в состояние готовности переходит поток с более высоким приоритетом, обладающий при этом тем же уровнем области конкуренции. Например, как показано на рис. 4.5, потоки с процессной областью конкуренции соревнуются за процессор с потоками того же процесса, имеющими такой же уровень области конкуренции. Процесс А имеет два потока с приоритетом 3, и один из них назначен процессору. Как только поток с приоритетом 2 заявит о своей готовности, активный поток будет вытеснен, а процессор займет поток с более высоким приоритетом. Кроме того, в процессе В есть два потока (процессной области конкуренции) с приоритетом 1 (приоритет 1 выше приоритета 2). Один из этих потоков назначается процессору. И хотя другой поток с приоритетом 1 готов к выполнению, он не вытеснит поток с приоритетом 2 из процесса А, поскольку эти потоки соперничают за процессор в рамках своих процессов. Потоки с системной областью конкуренции и более низким приоритетом не вытесняются ни одним из потоков из процессов А или В. Они соперничают за процессорное время только с потоками, имеющими системную область конкуренции.

Рис. 4.5. Планирование потоковпроцессной и системной областями конкуренции) в мультипроцессорной среде

Как упоминалось в главе 3, очереди готовности организованы в виде отсортированных списков, в которых каждый элемент представляет собой уровень приоритета. Под уровнем приоритета понимается очередь потоков с одинаковым значением приоритета. Все потоки одного уровня приоритета назначаются процессору с использованием стратегии планирования: FIFO (сокр. от First In First OuU т.е. первым прибыл, первым обслужен), RR (сокр. от round-robin, т.е. циклическая) или какой-либо другой. При использовании стратегии планирования FIFO поток, квант процессорного времени которого истек, помещается в головную часть очереди соответствующего приоритетного уровня, а процесс назначается следующему потоку из очереди. Следовательно, поток будет выполняться до тех пор, пока он не завершит выполнение, не перейдет в состояние ожидания («заснет») или не получит сигнал остановиться. Когда «спящий» поток «просыпается», он помещается в конец очереди соответствующего приоритетного уровня. Стратегия планирования RR аналогична FIFO стратегии, за исключением того, что по истечении кванта процессорного времени поток помещается не в начало, а в конец «своей» очереди. Циклическая стратегия планирования (RR) считает все потоки обладающими одинаковыми приоритетами и каждому потоку предоставляет процессор только в течение некоторого кванта времени. Поэтому выполнение задач получается попеременным. Например, программа, которая выполняет поиск файлов по заданным ключевым словам, разбивается на два потока. Один поток (1) находит все файлы с заданным расширением и помещает их пути в контейнер. Второй поток (2) выбирает имена файлов из контейнера, просматривает каждый файл на предмет наличия в нем заданных ключевых слов, а затем записывает имена файлов, которые содержат такие слова. Если к этим потокам применить циклическую стратегию планирования с единственным процессором, то поток 1 использовал бы свой квант времени для поиска файлов и вставки их путей в контейнер. Поток 2 использовал бы свой квант времени для выделения имен файлов и поиска заданных ключевых слов. В идеальном мире потоки 1 и 2 должны выполняться попеременно. Но в действительности все может быть иначе. Например, поток 2 может выполниться до потока 1, когда в контейнере еще нет ни одного файла, или поток 1 может так долго искать файл, что до истечения кванта времени не успеет записать его путь в контейнер. Такая ситуация требует синхронизации, краткое рассмотрение которой приводится ниже в этой главе и в главе 5. Стратегия планирования FIFO позволяет каждому потоку выполняться до завершения. Если рассмотреть тот же пример с использованием FIFO-стратегии, то поток 1 будет иметь достаточно времени, чтобы отыскать все нужные файлы и вставить их пути в контейнер. Поток 2 затем выделит имена файлов и выполнит поиск заданных ключевых слов. В идеальном мире завершение выполнения потока 2 будет означать завершение программы в целом. Но в реальном мире поток 2 может быть назначен процессору до потока 1, когда контейнер еще не будет содержать файлов для поиска в них ключевых слов. После «холостого» выполнения потока 2 процессору будет назначен поток 1, который может успешно отыскать нужные файлы и поместить в контейнер их пути. Однако поиск ключевых слов выполнять уже будет некому. Поэтому программа в целом потерпит фиаско. При использовании FIFO-стратегии не предусматривается перемешивания задач. Поток, назначенный процессору, занимает его До полного выполнения своей задачи. Такую стратегию планирования можно использовать для приложений, в которых потоки необходимо выполнить как можно скорее.

°Д Другими» стратегиями планирования подразумеваются уже рассмотренные, но с небольшими вариациями. Например, FIFO-стратегия может быть изменена таким

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

Изменение приоритета потоков

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

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

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

Поток при выполнении может запрашивать дополнительные ресурсы, например, файлы или мьютексы, но они становятся доступными для всех потоков процесса. Существуют ограничения на ресурсы, которые может использовать один процесс. Таким образом, все потоки в общей сложности не должны превышать предельный объем ресурсов, выделяемых процессу. Если поток попытается расходовать больше ресурсов, чем предусмотрено предельным объемом, формируется сигнал о том, что достигнут предельный объем ресурсов для данного процесса. Потоки, которые используют ресурсы, должны следить за тем, чтобы эти ресурсы не оставались в нестабильном состоянии после их аннулирования. Поток, который открыл файл или создал мьютекс, может завершиться, оставив этот файл открытым или мьютекс заблокированным. Если приложение завершилось, а файл не был закрыт надлежащим образом, это может привести к его разрушению или потере данных. Завершение потока после блокировки мьютекса надежно запирает доступ к критическому разделу, который находится под контролем этого мьютекса. Перед завершением поток должен выполнить некоторые действия очистительно-восстановительного характера, чтобы Н е допустить возникновения нежелательных ситуаций.

Модели создания и функционирования потоков

Цель потока— выполнить некоторую работу от имени процесса. Если процесс содержит несколько потоков, каждый поток выполняет некоторые подзадачи как части общей задачи, выполняемой процессом. Потокам делегируется работа в соответствии с конкретной стратегией, которая определяет, каким образом реализуется делегирование работы. Если приложение моделирует некоторую процедуру или объект, то выбранная стратегия должна отражать эту модель. Используются следующие распространенные модели:

• сеть с равноправными узлами;

Каждая модель характеризуется собственной декомпозицией работ (Work Breakdown Structure — WBS), которая определяет, кто отвечает за создание потоков и при каких условиях они создаются. Например, существует централизованный подход, при котором один поток создает другие потоки и каждому из них делегирует некоторую работу. Существует также конвейерный (assembly-line) подход, при котором на различных этапах потоки выполняют различную работу. Созданные потоки могут выполнять одну и ту же задачу на различных наборах данных, различные задачи на одном и том же наборе данных или различные задачи на различных наборах данных. Потоки подразделяются на категории по выполнению задач только определенного типа. Например, можно создать группы потоков, которые будут выполнять только вычисления, только ввод или только вывод данных.

Возможны задачи, для успешного решения которых следует комбинировать перечисленные выше модели. В главе 3 мы рассматривали процесс визуализации. За-Дачи 1, 2 и 3 выполнялись последовательно, а задачи 4, 5 и 6 могли выполняться параллельно. Все задачи можно выполнить различными потоками. Если необходимо визуализировать несколько изображений, потоки 1, 2 и 3 могут сформировать конвейер. По завершении потока 1 изображение передается потоку 2, в то время к ак поток 1 может выполнять свою работу над следующим изображением. После буферизации изображений потоки 4, 5 и 6 могут реализовать параллельную обработку. Модель функционирования потоков представляет собой часть структурирования па раллелизма в приложении, в котором каждый поток может выполняться на отдельном процессоре. Модели функционирования потоков (и их краткое описание) приведены в табл. 4.4.

Таблица 4.4. Модели функционирования потоков

Модель с равно-правными узлами

Центральный поток («управляющий») создает потоки («рабочие»), назначая каждому из них задачу. Управляющий поток может ожидать до тех пор, пока все потоки не завершат выполнение своих задач

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

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

Поток-«изготовитель» готовит данные , потребляемые потоком- «потребителем». Данные сохраняются в блоке памяти, разделяемом потоками — «изготовителем» и «потребителем»

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

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

программировать на обработку запросов только определенного типа. Если тип запроса в очереди не совпадает с типом запросов, на обработку которых ориентирован данный поток, то он может снова приостановиться. Главная цель управляю-потока — создать все потоки, поместить задания в очередь и «разбудить» рабочие потоки, когда эти задания станут доступными. Рабочие потоки справляются о наличии запроса в очереди, выполняют назначенную задачу и приостанавливаются сами, если для них больше нет работы. Все рабочие и управляющий потоки выполняются параллельно. Описанные два подхода к построению модели делегирования представлены для сравнения на рис. 4.6.

Модель с равноправными узлами

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

Рис. 4.7. Модель равноправных потоков (или модель с равноправными узлами)

Модель конвейера подобна ленте сборочного конвейера в том, что она предполагает наличие потока элементов, которые обрабатываются поэтапно. На каждом этапе отдельный поток выполняет некоторые операции над определенной совокупностью входных данных. Когда эта совокупность данных пройдет все этапы, обработка всего входного потока данных будет завершена. Этот подход позволяет обрабатывать несколько входных потоков одновременно. Каждый поток отвечает за получение промежуточных результатов, делая их доступными для следующего этапа (или следующего потока) конвейера Последний этап (или поток) генерирует результаты работы конвейера в целом. По мере того как входные данные проходят по конвейеру, не исключено, что некоторые их порции придется буферизировать на определенных этапах, пока потоки еще занимаются обработкой предыдущих порций. Это может вызвать торможение конвейера, если окажется, что обработка данных на каком-то этапе происходит медленнее, чем на других. При этом образуется отставание в работе. Чтобы предотвратить отставание, можно для «слабого» этапа создать дополнительные потоки. Все этапы конвейера должны быть уравновешены по времени, чтобы ни один этап не занимал больше времени, чем другие. Для этого необходимо всю работу распределить по конвейеру равномерно. Чем больше этапов в конвейере, тем больше должно быть создано потоков обработки. Увеличение количества потоков также может способствовать предотвращению отставаний в работе. Модель конвейера представлена на рис. 4.8.

Рис. 4.8. Модель конвейера

В модели «изготовитель-потребитель» существует поток-«изготовитель», который готовит данные, потребляемые потоком-«потребителем». Данные сохраняются в блоке памяти, разделяемом между потоками «изготовителем» и «потребителем». Поток-изготовитель» должен сначала приготовить данные, которые затем поток-^потребитель» получит. Такому процессу необходима синхронизация. Если поток-изготовитель» будет поставлять данные гораздо быстрее, чем поток-«потребитель» сможет их потреблять, поток-«изготовитель» несколько раз перезапишет результаты, полученные им ранее, прежде чем поток-«потребитель» успеет их обработать. Но если поток-«потребитель» будет принимать данные гораздо быстрее, чем поток-изготовитель» сможет их поставлять, поток-«потребитель» будет либо снова обрабатывать уже обработанные им данные, либо попытается принять еще не подготовленные данные. Модель «изготовитель-потребитель» представлена на рис. 4.9.

Модели SPMD и МРМD для потоков

В каждой из описанных выше моделей потоки вновь и вновь выполняют одну и ту задачу на различных наборах данных или им назначаются различные задачи для выполнения на различных наборах данных. Эти потоковые модели используют схемы (Single-Program, Multiple-Data — одна программа, несколько потоков данных) и MPMD (Multiple-Programs, Multiple-Data — множество программ, множество потоков данных). Эти схемы представляют собой модели параллелизма, которые делят программы на потоки инструкций и данных. Их можно использовать для описания типа работы, которую реализуют потоковые модели с использованием параллелизма. В контексте нашего изложения материала модель MPMD лучше представить как модель MTMD (Multiple-Threads, Multiple-Data— множество потоков выполнения, множество потоков данных). Эта модель описывает систему с различными потоками выполнения (thread), которые обрабатывают различные наборы данных, или потоки данных (stream). Аналогично модель SPMD нам лучше рассматривать как модель STMD (Single-Thread, Multiple-Data — один поток выполнения, несколько потоков данных). Эта модель описывает систему с одним потоком выполнения, который обрабатывает различные наборы, или потоки, данных. Это означает, что различные наборы данных обрабатываются несколькими идентичными потоками выполнения (вызывающими одну и ту же подпрограмму).

Рис. 4.9. Модель конвейера

Как модель делегирования, так и модель равноправных потоков могут использовать модели параллелизма STMD и MTMD. Как было описано выше, пул потоков может выполнять различные подпрограммы для обработки различных наборов данных. Такое поведение соответствует модели MTMD. Пул потоков может быть также настроен на выполнение одной и той же подпрограммы. Запросы (или задания), отсылаемые системе, могут представлять собой различные наборы данных, а не различные задачи. И в этом случае поведение множества потоков, реализующих одни и те же инструкции, но на различных наборах данных, соответствует модели STMD. Модель равноправных потоков может быть реализована в виде потоков, выполняющих одинаковые или различные задачи. Каждый поток выполнения может иметь собственный поток данных или несколько файлов сданными, предназначенных для обработки каждым потоком. В модели конвейера используется МТМГ>модель параллелизма. На разных этапах выполняются различные виды обработки, поэтому в любой момент времени различные совокупности входных данных будут находиться на различных этапах выполнения. Модельное представление конвейера было бы бесполезным, если бы на каждом этапе выполнялась одна и та же обработка. Модели STMD и MTMD представлены на рис. 4.10.

Введение в библиотеку Pthread

Библиотека Pthread предоставляет API-интерфейс для создания и управления потоками в приложении. Библиотека Pthread основана на стандартизированном интерфейсе программирования, который был определен комитетом по выпуску стандартов IEEE в стандарте POSIX 1003.1с. Сторонние фирмы-изготовители придерживаются стандарта POSIX в реализациях, которые именуются библиотеками потоков Pthread или POSIX.

Рис. 4.10. Модели параллелизма STMD и MTMD

Библиотека Pthread содержит более 60 функций, которые можно разделить на следующие категории.

1. Функции управления потоками.

1.1. Конфигурирование потоков.

1.2. Отмена потоков.

1.3. Стратегии планирования потоков.

1.4. Доступ к данным потоков.

1.5. Обработка сигналов.

1.6. Функции доступа к атрибутам потоков.

1.6.1. Конфигурирование атрибутов потоков.

1.6.2. Конфигурирование атрибутов, относящихся к стекам потоков.

1.6.3. Конфигурирование атрибутов, относящихся к стратегиям планирования потоков.

2. Функции управления мьютексами.

2.1. Конфигурирование мьютексов.

2.2. Управление приоритетами.

2.3. Функции доступа к атрибутам мьютексов.

2.3.1. Конфигурирование атрибутов мьютексов.«

2.3.2. Конфигурирование атрибутов, относящихся к протоколам мьютексов.

2.3.3. Конфигурирование атрибутов, относящихся к управлению приоритетами мьютексов.

3. Функции управления условными переменными.

3.1. Конфигурирование условных переменных.

3.2. Функции доступа к атрибутам условных переменных.

3.2.1. Конфигурирование атрибутов условных переменных.

3.2.2. Функции совместного использования условных переменных.

Библиотека Pthread может быть реализована на любом языке, но для соответствия стандарту POSIX она должна быть согласована со стандартизированным интерфейсом. Библиотека Pthread — не единственная реализация потокового API-интерфейса Существуют другие реализации, созданные сторонними фирмами-производителями аппаратных и программных средств. Например, среда Sun поддерживает библиотеку Pthread и собственный вариант библиотеки потоков Solaris. В этой главе мы рассмотрим некоторые функции библиотеки Pthread, которые реализуют управление потоками.

Анатомия простой многопоточной программы

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

// Листинг 4.1. Использование модели делегирования в

void *task1(void *X) //define task to be executed by ThreadA

Для компиляции многопоточного приложения в средах UNIX или Linux с помощью компиляторов командной строки g++ или gcc необходимо скомпоновать его с библиотекой Pthreads. Для задания библиотеки используйте опцию -l. Так, команда -lpthread обеспечит компоновку вашего приложения с библиотекой, которая согласуется с многопоточным интерфейсом, определенным стандартом POSIX 1003.1с. Библиотеку Pthread, libpthread.so , следует поместить в каталог, в котором хранится системная стандартная библиотека, обычно это /usr/lib. Если она будет находиться не в стандартном каталоге, то для того, чтобы обеспечить поиск компилятора в заданном каталоге до поиска в стандартных, используйте опцию -L. По команде g++ -о blackboard -L /src/local/lib blackboard.cpp -lpthread компилятор выполнит поиск библиотеки Pthread сначала в каталоге /src/local/lib, а затем в стандартных каталогах.

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

Библиотека Pthreads используется для создания, поддержки и управления потоками многопоточных программ и приложений. При создании многопоточной программы потоки могут создаваться на любом этапе выполнения процесса, поскольку это — динамические образования. Функция pthread_create() создает новый поток в адресном пространстве процесса. Параметр thread указывает на дескриптор, или идентификатор (id), создаваемого потока. Новый поток будет иметь атрибуты, заданные объектом attr. Созданный поток немедленно приступит к выполнению инструкций, заданных параметром start_routine с использованием аргументов, заданных параметром arg. При успешном создании потока функция возвращает его идентификатор (id), значение которого сохраняется в параметре thread.

int pthread_create(pthread_t *restrict thread,

const pthread_attr_t *restrict attr,

Если параметр attr содержит значение NULL, новый поток будет использовать атрибуты, действующие по умолчанию. В противном случае новый поток использует атрибуты, заданные параметром attr при его создании. Если же значение параметра attr изменится после того, как поток был создан, это никак не отразится на его атрибутах. При завершении параметра-функции start_routine завершается и поток, причем так, как будто была вызвана функция pthread_exit() с использованием в качестве статуса завершения значения, возвращаемого функцией start_routine.

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

Приведем примеры создания двух потоков с заданными по умолчанию атрибутами:

Это — два вызова функции pthread_create () из листинга 4 .1. Оба потока создаются с атрибутами, действующими по умолчанию.

В программе 4 .1 отображен основной поток, который передает аргумент из командной строки в функции, выполняемые потоками.

Управление информационными потоками

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

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

Возникновение и передача информации характеризуется объектом информации и источником информации.

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

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

Основными понятиями информационной логистики являются:

  • • информационный поток;
  • • информационная система;
  • • информационная технология.

Информационный поток характеризуется следующими показателями:

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

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

  • • обратной связи;
  • • внешнего дополнения;
  • • необходимого разнообразия (рис. 4.23).

На рис. 4.23 представлены:

  • 1) объект управления (звено логистической системы или система в целом);
  • 2) логистический центр, включающий:
    • • субъект управления;
    • • аналитический центр обработки информации;
    • • базу данных (систему хранения данных, обеспечивающую оперативный доступ к хранимой информации);
    • • фильтр (механизм выявления приоритетов поступления информации к субъекту управления).

Управленческое воздействие субъекта управления на объект управления может быть:

  • • проактивным (в этом случае внешние входные потоки 1’1′ поступают в аналитический центр и далее к субъекту управления, который обеспечивает адаптацию объекта управления к факторам внешней среды);
  • • реактивным (информационные потоки 1″1″, минуя субъект управления, непосредственно воздействуют на объект управления и, соответственно, на результаты его деятельности, что требует от субъекта управления оперативности принятия управленческих решений).

Рис. 4.23. Структура контура информационных потоков:

ab – внутренние входные потоки; cd – внутренние выходные потоки; 11 – внешние входные потоки; 22 – внешние выходные потоки; 0000 – логистический центр; abed – контур логистического управления внутренней средой организации; bekl – подконтур аналитической обработки информации

Логистический центр 0000 образует с объектом управления контур обратной связи abed, по которому циркулируют входные ab и выходные cd внутренние информационные потоки. Аналитическая обработка информации осуществляется в подконтуре bekl.

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

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

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

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

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

В конкретной системе показателей отражается вся деятельность предприятия или цепи поставок.

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

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

На основе показателей строятся документы.

Документ – информационное сообщение в бумажной, звуковой или электронной форме, оформленное по определенным правилам и заверенное в установленной форме.

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

Значительное количество используемых коммерческих документов и привлекаемых для их обработки специалистов приводит к необходимости уменьшения бумажного документооборота за счет электронной обработки данных, упрощения технологических схем документооборота, внедрения международных стандартов электронной передачи и обработки информационных логистических потоков, например, на основе стандарта ООН EDIFACT.

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

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

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

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

Компьютерные информационные системы являются неотъемлемой частью логистических систем. Она имеет следующие признаки.

  • 1. Сложность организационной структуры. Даже относительно небольшие звенья логистической системы являются сложными подсистемами с разветвленной организационной структурой и многочисленными взаимосвязями между составляющими ее элементами.
  • 2. Сложность видов обеспечения данных систем, к которым можно отнести функциональное, математическое, информационное, техническое, технологическое, программное, лингвистическое, организационное и правовое виды обеспечения.

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

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

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

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

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

Программное обеспечение – комплекс программ, охватывающий все регламентные и запросные задачи.

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

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

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

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

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

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

  • • уровень управления (высший, средний, оперативный);
  • • вид управляемого ресурса (материальные, финансовые, трудовые, информационные);
  • • сфера применения (транспорт, складское хозяйство, коммерческие операции и др.);
  • • функции управления и период управления.

Выбор признаков декомпозиции информационных систем зависит от специфики объекта управления и целей ее создания.

Рассмотрим организационную структуру логистической информационной системы, представленную на рис. 4.24.

Как видно на рис. 4.24, организационная структура логистической информационной системы состоит из четырех основных подсистем:

  • • управления процедурами заказов;
  • • научных исследований и связи;
  • • поддержки логистических решений;
  • • планирования выходных форм и отчетов.

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

Рис. 4.24. Организационная структура логистической информационной системы

Общая процедура управления заказами ресурсов представлена на рис. 4.25. Отдельные процедуры, как показано на этом рисунке, обычно объединяют в две функции:

  • • обработка заказов;
  • • их выполнение.

Рис. 4.25. Процедура управления заказами ресурсов

Заказы на продукцию поступают из различных источников, включая пункты розничной торговли, электронные телекоммуникационные сети и системы, заказы на основе телемаркетинга и др. Каждый заказ имеет ряд продуктовых и сервисных атрибутов, которые необходимо учитывать при его выполнении. На основе конфигурирования заказов эти атрибуты идентифицируются, даже если они не совсем четко оговорены в документации. Для передачи заказов от одного звена логистической системы к другому используются имеющиеся в наличии средства связи и передачи информации с агрегированием данных в современных телекоммуникационных каналах. Основываясь на установленных данных о заказах, определяются конкретные источники их выполнения с учетом всех продуктовых и сервисных атрибутов, разрабатываются планы выполнения заказов по укрупненным и специфицированным группам товаров с расчетом времени циклов выполнения и доставки ресурсов к местам переработки или реализации. Процедуры выполнения заказов и доставки продукции сопровождаются непрерывным контролем сроков, объемов и качества поставок с помощью эффективной системы мониторинга.

Большое значение при управлении процедурами заказов имеет использование концепции «электронного обмена данными» и основанных на ней стандартов EDI.

Деятельность подсистемы научных исследований и связи направлена на решение следующих основных задач:

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

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

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

Результатами деятельности подсистемы генерирования выходных форм и отчетов являются:

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

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

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

Роль информационных технологий непрерывно возрастает. Это объясняется рядом их свойств:

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

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

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

Первое направление – информационное моделирование – позволяет проводить «вычислительный эксперимент» даже в тех условиях, которые невозможны в натуральном эксперименте из-за опасности, сложности, дороговизны.

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

Третье направление основано на методах когнитивной графики – совокупности приемов и методов образного представления условий задачи, которые позволяют сразу увидеть решение, либо получить подсказку для его нахождения;

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

В результате применения информационных технологий создается некая новая информация или информация в новой форме. Это продукция информационной системы и информационной технологии, которая называется информационными продуктами и услугами.

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

К информационным продуктам и услугам относят:

Современное состояние информационных технологий можно охарактеризовать следующими тенденциями:

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

Выделяют пять основных тенденций в развитии информационных технологий:

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

Применительно к деятельности цепей поставок эти тенденции приводят к следующему:

  • • осуществление распределенных персональных вычислений, когда на каждом рабочем месте достаточно ресурсов для обработки информации в местах ее возникновения;
  • • создание развитых систем коммуникаций, когда рабочие места соединены для пересылки сообщений;
  • • гибкие глобальные коммуникации, когда отдельное предприятие включается во всемирную информационную систему;
  • • создание и развитие систем электронной торговли;
  • • устранение промежуточных звеньев в системе «предприятие – внешняя среда».

Сложность, большая размерность и наличие значительного количества документов, используемых при управлении материальными потоками в логистической системе, вызвали появление за рубежом концепции «Electronik Data Interchange – EDI» («электронного обмена данными»), В наиболее общей трактовке KOI представляет собой компьютерный информационный обмен между пользователями с применением стандартного формата данных и обслуживающий современные телекоммуникационные технологии. Для EDI существенными являются коммуникационные и информационные стандарты. Коммуникационные стандарты определяют технические характеристики системы таким образом, чтобы компьютеры могли корректно интерпретировать обмен информацией. Коммуникационные стандарты определяют характеристики приема, преобразования и скорость передачи данных. Информационные стандарты регламентируют структуру и вид документов, которые должны быть переданы.

Основным глобальным стандартом в системе EDI является UN/EDIFACT, утвержденный ЕЭК ООН и ISO. Стандарт UN/EDIFACT базируется на международном стандарте синтаксических правил (ISO 9735) и международном стандарте Справочника элементов торговых данных (ISO 7372). Он представляет собой набор принципов обмена информацией между промышленными предприятиями, экспортерами, закупочными организациями, оптовиками и розничными торговцами, брокерами, агентами, экспедиторами, перевозчиками, банками, страховыми компаниями, административными и правительственными организациями и институтами. Стандарт формирует однообразно построенные сообщения, которые базируются на международных стандартах, заменяет традиционные бумажные документы на электронные каталоги (файлы). Преимуществами использования стандарта UN/EDIFACT является ускорение движения информационных потоков, адаптация к различным архитектурам ЭВМ и телекоммуникационным сетям и повышение на этой основе конкурентоспособности предприятий.

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

Управление, основные понятия и определения. Классификация объектов управления. Основные свойства и характеристики объектов и систем. Исследование устойчивости нелинейных систем с помощью фазовых портретов. Абсолютный критерий Попова. Оптимальные системы АУ. САУ с эталонной моделью

Страницы работы

Содержание работы

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

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

Алгоритм функц.- совокупность предписаний ведущих к правильному выполнению технологического процесса.

Предмет изучения ТАУ явл объект управления и система управления.

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

Объекты ТОУ характериз. след. параметрами: входными и выходными режимами

Входными параметрами наз. материальные и входные и энергетические потоки. Если есть возможность изменить или измерить вх. параметр, то он называется вх. воздействием.

Режимными параметрами наз. параметры характеризующие протекание процесса внутри объекта или оборудования.

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

1 по типу технологического процесса бывают: гидравлические, тепловые, энергетические, механические и химические.

2 по характеру технологического процесса: -с непрерывным характером производства, -с периодическим характером производства, с комбинированным характером производства.

3 по типу информационной емкости бывают: — с минимальной инф. Емкостью от 10-40 параметров управления, — с малой информационной емкостью от 41-160 параметров управления, — со средней информационной емкостью от 161-650 параметров управления, — с повышенной информационной емкостью от 651-2500 параметров управления, — с высокой информационной емкостью свыше 2501 параметров управления.

4 по количеству уравнений статистические и динамические, существуют одномерные и многомерные объекты, когда одна вых. вел-на и объект управл. описываются одним ур-ем. статики и одним ур-ем динамики

Многомерные объекты когда несколько вых вел-н и число ур-ий статики и динамики соответствует числу выходов.

Бывают объекты с независимыми вых параметрами, когда одна вых вел-на влияет только на одну выходную.

Бывают объекты с независимыми вых параметрами, когда одна вых вел-на влияет только на одну выходную.

И объекты у которых одна выходная вел-на зависит от нескольких входных

5 по характеру параметров управления бывают объекты со средоточенными параметрами, когда регулируемая вел-на имеет регулируемые числовые значение и объекты с распределенными параметрами когда регулируемая вел-на имеет регулируемые числовые значения.

3. 3. Свойства объектов управления

Основными свойствами объекта являются: самовыравнивание, емкость, запаздывание.

1) Самовыравнивание – хар-ет его устойчивость и определяется как св-во объекта самостоятельно устанавливаться в равновесное состояние после любого изменения вх вел-ны. То есть изменение вх вел-ны приводит к изменению вых со скоростью уменьшающейся до 0.

Количественно самовыравнивание выражается степенью самовыравнивания под которой понимают отношение изменения вх вел-ны к изменению вых вел-ны объекта по достижению им равновесного состояния.(r=Dх/Dy)

Чем больше степень самовыравнивания тем он более прост с точки зрения управления.

2) Емкость объекта присуще всем динамическим или реальным объектам и хар-ет их инерционность(степень влияния вх вел-ны на изменение вых).

Под емкостью понимают такое изменение вх вел-ны, которое приводит к изменению вых вел-ны объекта на единицу за единицу времени. C=X/(dy*k/t)

Чем больше С тем труднее объект в управлении.

3) запаздывание объекта выражается в том, что его вых вел-на начинает изменяться не сразу после возмущения, а через некоторый промежуток времени который называется временем запаздывания и обозначается t (t=l/s)

4. 4. Основные свойства и характеристики объектов и систем

Делятся на статические и динамические.

1)Статической называют зависимость вых параметра от вх в установившемся режиме. X=f(t)

Статистические характеристики бывают линейные и нелинейные. Линейные описывают описываются линейными алгебраическими уравнениями.(y=kx+b)Нелинейные статические хар-ки описывают нелинейными алгебраическими выражениями.(y=x 2 )

Динамической характеристикой называется зависимость выходных параметров от входных с течением времени. Y(t)=f[x(t)]. Динамические характеристики бывают временные и частотные.

Временные и частотные динамические хар-ки.

Переходная ф-ия или процесс это реакция объекта на возмущение типа скачек.

Скачком называется ф-ия Хевисайда и описывается ур-ем

Методы объектов и свойства объектов управление потоком вычислений

Методы объектов и свойства объектов. Управление потоком вычислений

2.2. Методы объектов и свойства объектов. Управление потоком вычислений

Каждый из этих классов имеет функции управления объектами класса — методы. Самыми главными их этих методов являются те, которые позволяют переназначать значения объектов. Делается это обычно по операции присваивания. Вообще, все типы операторов, которые поддерживаются обычными языками программирования, реализованы JavaScript (+,-,*, /, %, >>, Назад | Содержание | Вперед

Составить и отладить программу для вычисления по указанной формуле, используя методы и свойства объекта Math

помогите пожалуйста с программой. не работает

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

01.01.2013, 17:44

Составить и отладить программу для вычисления по указанной формуле
Значения переменных, указанных в правой части, ввести с клавиатуры, результат вывести на экран.

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

Составить и отладить программу на Assembler для вычисления выражения
Очень нужна помощь! Вычислить данное выражение: Очень нужна ваша помощь. Вычислить значение.

Составить и отладить программу для приближённого вычисления заданной функции
C# Составить и отладить программу для приближённого вычисления заданной функции y(x),путём.

Объекты, свойства, методы, события

Для начала можно определить объект как некую совокупность данных и способов работы с ними. Данные можно рассматривать как поля записи. Это характеристики объекта. Пользователь и объекты программы должны, конечно, иметь возможность читать эти данные объекта, как-то их обрабатывать и записывать в объект новые значения.

Здесь важнейшее значение имеют принципы инкапсуляции и скрытия данных.

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

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

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

Во-вторых, необходимо изолировать внешние объекты от особенностей внутренней реализации данных. Для внешних потребителей данных должен быть доступен только пользовательский интерфейс – описание того, какие имеются данные и функции и как их использовать. А внутренняя реализация – это дело разработчика объекта. При таком подходе разработчик может в любой момент модернизировать объект, изменить структуру хранения и форму представления данных, но, если при этом не затронут интерфейс, внешний потребитель этого даже не заметит. Следовательно, во внешней программе и в поведении пользователя ничего не придется менять.

Чтобы выдержать принцип скрытия данных, в объекте обычно определяются процедуры и функции, обеспечивающие все необходимые операции с данными: их чтение, преобразование, запись. Эти функции и процедуры называются методами и через них происходит общение с данными объекта (рис. 3.2).

1. Управление задачами и памятью
в операционных системах

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

Программное обеспечение (ПО) – совокупность входящих в состав вычислительной системы программных средств, т.е. программ, данных и документов к ним.

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

Системное программное обеспечение может быть разделено на следующие пять групп:

1. Операционные системы.

2. Системы управления файлами.

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

4. Системы программирования.

Рассмотрим вкратце эти группы системных программ.

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

В данном учебном курсе нас прежде всего будут интересовать многозадачные ОС.

Многозадачная ОС – операционная система, способная одновременно поддерживать выполнение на компьютере нескольких задач.

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

Для удобства взаимодействия с ОС могут использоваться дополнительные интерфейсные оболочки. Их основное назначение – либо расширить возможности по управлению ОС, либо изменить встроенные в систему возможности.

Система программирования представлена прежде всего такими компонентами, как транслятор с соответствующего языка, библиотеки подпрограмм, редакторы, компоновщики и отладчики. Не бывает самостоятельных (оторванных от ОС) систем программирования. Любая система программирования может работать только в соответствующей ОС, под которую она и создана, однако при этом она может позволять разрабатывать программное обеспечение и под другие ОС.

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

Понятие «вычислительный процесс» (или просто – «процесс») является одним из основных при рассмотрении операционных систем.

Процесс – последовательность операций при выполнении программы или ее части вместе с используемыми данными.

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

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

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

Вычислительный процесс может включать в себя несколько задач. Термин «задача» в некоторых операционных системах совпадает с понятием «процесс».

Процессорное время и оперативная память являются основными ресурсами в случае реализации мультипрограммных вычислений.

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

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

Концептуально процессор рассматривается в двух аспектах: во-первых, он является носителем данных и, во-вторых, он выполняет операции, связанные с их обработкой.

Оперативная память – память, непосредственно связанная с центральным процессором вычислительной системы.

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

Операционная система выполняет следующие основные функции, связанные с управлением задачами:

• создание и удаление задач;

• планирование процессов и диспетчеризация задач;

• синхронизация задач, обеспечение их средствами коммуникации.

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

Создание и удаление задач осуществляется по соответствующим запросам от пользователей или от самих задач. Задача может породить новую задачу. При этом между процессами появляются «родственные» отношения. Порождающая задача называется «предком», «родителем», а порожденная – «потомком», «сыном» или «дочерней задачей». «Предок» может приостановить или удалить свою дочернюю задачу, тогда как «потомок» не может управлять «предком».

Если мы возьмем набор таких процессов, которые не будут конкурировать между собой за неразделяемые ресурсы при параллельном выполнении, то, скорее всего, процессы смогут выполниться быстрее (из-за отсутствия дополнительных ожиданий), да и имеющиеся в системе ресурсы будут использоваться более эффективно. Итак, возникает задача подбора такого множества процессов, что при выполнении они будут как можно реже конфликтовать из-за имеющихся в системе ресурсов. Такая задача называется планированием вычислительных процессов.

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

Долгосрочное планирование осуществляется гораздо реже, чем задача текущего распределения ресурсов между уже выполняющимися процессами и потоками. Основное отличие между долгосрочным и краткосрочным планировщиками заключается в частоте запуска: краткосрочный планировщик, например, может запускаться каждые 30 или 100 мс, долгосрочный – один раз за несколько минут (или чаще; тут многое зависит от общей длительности решения заданий пользователей).

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

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

Планирование и диспетчеризация процессов и задач

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

• по возможности заканчивать вычисления (вычислительные процессы) в том же самом порядке, в котором они были начаты;

• отдавать предпочтение более коротким процессам;

• предоставлять всем пользователям (процессам пользователей) одинаковые услуги, в том числе и одинаковое время ожидания.

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

Поток – последовательность выполнения операторов в программе.

Статьи к прочтению:

Вычислительные системы, сети и телекоммуникации. Часть 1

Похожие статьи:

Машинно-зависимые методы оптимизации ориентированы на конкретную архитектуру целевой вычислительной системы, на которой будет выполняться результирующая…

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

Илон Маск рекомендует:  Что такое код msg_receive
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL