В течение последних 10 лет я разрабатывал свою собственную обширную структуру многопоточности, которая также интегрирована с коммуникационной структурой аналогичной архитектуры. На данном этапе его можно использовать с Delphi 2005–2007, но вскоре он будет доступен и для Delphi 2009–2010. Эта среда разработки приложений может использоваться для создания массово распределенных систем, поскольку она предназначена для запуска любых потоков в любом процессе и использует простой протокол обмена потоками, который одинаков, независимо от того, находятся ли потоки в одном и том же процессе или в разных процессах. на разных машинах.
В качестве дополнительной функции эта структура теперь работает в C#/Visual Studio, поэтому распределенная система, построенная с использованием этой среды, может иметь сочетание приложений Win32 и .NET, использующих одну и ту же методологию проектирования. Платформу можно загрузить с http://www.adug.org.au/downloads/CSIFramework.html
Библиотеки, используемые моей структурой, не так обширны, как должно было показаться на сайте (я только что перефразировал эту страницу, но обновление может занять день или около того). Кроме того, все необходимые файлы (кроме уровня абстракции базы данных) включены в фреймворк, поэтому для использования фреймворка не нужно устанавливать сторонние библиотеки.
Помимо Delphi, используются следующие библиотеки:
- Indy (включен в Delphi, хотя я использую последнюю версию до Unicode)
- ДЖЕДАЙ JCL
- Турбосила Аббревиатура
- аккуратная XML-библиотека (необязательно)
- библиотека абстракции базы данных (необязательно)
Я модифицировал некоторые периферийные модули Delphi: 1) для устранения утечки памяти в реализации Open XML в Delphi 2006 (впоследствии исправленной в более поздних версиях Delphi), 2) для интеграции сервисного приложения с моей структурой регистрации и 3) для интеграции стенда -один SOAP-сервер с Indy 10 (не Indy 9, включенный в Delphi 2006).
На самом деле мой фреймворк — это гораздо больше, чем просто фреймворк для работы с потоками, хотя он и является его частью. Платформа многопоточности построена путем реализации всех потоков в виде многопоточных очередей. «Сообщения», передаваемые между потоковыми очередями, на самом деле представляют собой данные, упакованные в общий типизированный объект, что позволяет мне передавать между потоками абсолютно любые данные, структурированные каким-либо образом. Я могу передавать сообщения между потоками либо асинхронно, добавляя сообщение, либо синхронно, добавляя сообщение и получая сообщение в ответ. Сами потоки подписываются на другие потоки для получения сообщений, поэтому во время разработки нет связи между потоками.
Эта структура была расширена за счет включения коммуникационных серверов и клиентов, а также основного потока графического интерфейса, чтобы иметь точно такой же интерфейс обмена сообщениями, что и потоковые очереди, поэтому отправка сообщения удаленному процессу или передача его в графический интерфейс использует тот же синтаксис. как это используется между потоками. Фреймворк был разработан таким образом, что не требуется вообще ничего знать о многопоточной разработке для создания распределенной системы, развернутой в нескольких процессах и нескольких потоках.
Фреймворк включает в себя гораздо больше, чем это, и я потратил более 2 лет усилий на его разработку за последние 10 лет. Он был успешно развернут в многоуровневой системе мониторинга тревог (с использованием более 20 различных классов потоков в трех приложениях), и в настоящее время я создаю распределенную систему в Visual Studio 2008, используя эту структуру.
Короче говоря, если все, что вам нужно, это простая структура потоковой передачи, то это, вероятно, излишество. Однако, если вы хотите разработать сложную многопоточную систему, которая может охватывать несколько приложений, то обучение может стоить того.
P.S. Еще несколько моментов:
- Запуск и завершение потока обрабатываются фреймворком (для этого не нужно писать код)
- Все потоки, из которых состоит приложение (количество и конфигурация), определяются в файле конфигурации XML, а не в самом коде (нет необходимости писать какой-либо код, чтобы включить их в приложение).
- Если вы используете компонент абстракции базы данных, то автоматически доступен многопоточный доступ к базе данных (дополнительный код не требуется).
- В настоящее время я работаю над добавлением пула потоков, который позволит любой потоковой очереди иметь указанное количество созданных потоков (опять же, для этого не нужно писать какой-либо код)
- Существует простое руководство разработчика, которое вы можете загрузить с веб-страницы, которое также включено в загрузку фреймворка, которое дает обзор фреймворка с точки зрения разработчика.
- Сам фреймворк находится в стадии очень активной разработки, и я надеюсь, что со следующим выпуском Delphi будет версия, работающая на Win32 (под Delphi), версия .NET (C#/Visual Studio) и версия Linux (использующая новый Deplhi). кроссплатформенный компилятор)
person
Misha
schedule
23.10.2009