Главная страница
Навигация по странице:

  • Сфера применения событийно-ориентированного программирования

  • Применение событийно-ориентированного программирования в серверных приложениях

  • Применение событийно-ориентированного программирования в настольных приложениях

  • Инструменты и библиотеки для событийно-ориентированного программирования

  • Что такое поток и многопоточность

  • Что такое процесс и многопроцессорность

  • GIL (глобальная блокировка интерпретатора)

  • Numpy, Jpython и IronPytbhon.

  • Событийно. Событийно-ориентированное программирование. Событийноориентированное программирование


    Скачать 0.56 Mb.
    НазваниеСобытийноориентированное программирование
    АнкорСобытийно
    Дата09.02.2023
    Размер0.56 Mb.
    Формат файлаpptx
    Имя файлаСобытийно-ориентированное программирование.pptx
    ТипДокументы
    #928521

    Событийно-ориентированное программирование

    Событийно-ориентированное программирование, СОП, создание событийно-управляемых программ, event-driven programming


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

    Сфера применения событийно-ориентированного программирования


    Событийно-ориентированное программирование, как правило, применяется в следующих случаях:
    Построение пользовательских интерфейсов (в том числе графических);
    Создание серверных приложений;
    Моделирование сложных систем;
    Параллельные вычисления;
    Автоматические системы управления, SCADA;
    Программирование игр, в которых осуществляется управление множеством объектов.

    Применение событийно-ориентированного программирования в серверных приложениях


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

    Применение событийно-ориентированного программирования в настольных приложениях


    В современных языках программирования события и обработчики событий являются центральным звеном реализации графического интерфейса пользователя. Рассмотрим, к примеру, взаимодействие программы с событиями от мыши. Нажатие правой клавиши мыши вызывает системное прерывание, запускающее определенную процедуру внутри операционной системы. В этой процедуре происходит поиск окна, находящегося под курсором мыши. Если окно найдено, то данное событие посылается в очередь обработки сообщений этого окна. Далее, в зависимости от типа окна, могут генерироваться дополнительные события. Например, если окно является кнопкой (в Windows все графические элементы являются окнами), то дополнительно генерируется событие нажатия на кнопку. Отличие последнего события в том, что оно более абстрактно, а именно, не содержит координат курсора, а говорит просто о том, что было произведено нажатие на данную кнопку.
    Обработчик события может выглядеть следующим образом (на примере C#):
    private void button1_Click (object sender, EventArgs e)
    {
    MessageBox.Show (“Была нажата кнопка”);
    }
    Здесь обработчик события представляет собой процедуру, в которую передается параметр sender, как правило содержащий указатель на источник события. Это позволяет использовать одну и ту же процедуру для обработки событий от нескольких кнопок, различая их по этому параметру.

    Инструменты и библиотеки для событийно-ориентированного программирования


    Node.js - событийно-ориентированный I/O фреймворк на JavaScript движке V8
    Cocoa & Objective-C - рефлексивный объектно-ориентированный язык программирования, добавляющий сообщения в стиле Smalltalk в язык Си.
    GLib
    Gui4Cli - событийно-ориентированный язык программирования для Windows
    libsigc++
    libevent
    POCO
    libasync, часть библиотек sfs и sfslite - эффективная событийная библиотека для C++
    Perl Object Environment
    AnyEvent, EV — модули на Perl для событийно-ориентированного программирования
    PRADO - компонентный событийно-ориентированный инструмент для Web-программирования на PHP5
    Tcl
    Twisted, Python
    Qt - кроссплатформенная библиотека виджетов для C++, основанная на модели управления событиями. Существует сокращённая версия, называемая Qt/Console, из которой исключён код поддержки виджетов, и представляющий собой управляемый событиями фреймворк, в который также включены некоторые дополнительные средства, вроде кроссплатформенной работы с сетью, многопоточности и работы с XML.
    QP — семейство открытых событийно-ориентированных окружений для встроенных систем реального времени
    Simple Unix Events a.k.a. SUE - простая объектно-ориентированная библиотека для построения событийно-ориентированных программ под Unix на языке C++.

    Что такое поток и многопоточность?


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

    Что такое процесс и многопроцессорность?


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


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


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

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

    GIL (глобальная блокировка интерпретатора)


    Это одна из самых противоречивых тем в мире Python. В CPython GIL является мьютексом – блокировкой взаимного исключения, которая обеспечивает безопасность потоков. Другими словами, мы можем сказать, что GIL препятствует параллельному выполнению кода Python несколькими потоками. Блокировка может удерживаться только одним потоком за раз, и если мы хотим выполнить поток, он должен сначала получить блокировку. Диаграмма, показанная ниже, поможет вам понять работу GIL.
    Однако в Python есть некоторые библиотеки и реализации, такие как Numpy, Jpython и IronPytbhon. Эти библиотеки работают без какого-либо взаимодействия с GIL.



    написать администратору сайта