Delphi — потоковые фреймворки

Я ищу платформу Threading для использования в моем приложении Delphi.

В настоящее время я оцениваю ‘OmniThreadLibrary’ — пока она выглядит хорошо и делает все, что мне нужно.

Существует ли какая-либо другая «поточная структура» для Delphi?

(Я использую D2006 и D2009)


person Charles Faiga    schedule 22.03.2009    source источник
comment
Другой — набор TBMDThread от Mitov Software.   -  person pani    schedule 22.03.2009
comment
Будьте осторожны с автоматическим преобразованием строковых типов. - В частности, к широким струнам и от них. Также имейте в виду, что многие стандартные функции не являются потокобезопасными. (например, Формат).   -  person Arafangion    schedule 23.03.2009
comment
Я думаю, вам следует добавить OmniThreadLibrary в качестве ответа на ваш вопрос. Затем мы можем проголосовать за него, чтобы сравнить его с другими вариантами.   -  person Vegar    schedule 23.03.2009
comment
Как насчет многопоточных фреймворков?   -  person jpfollenius    schedule 28.10.2009
comment
Фреймворки потоков идут рука об руку с методологиями доступа к данным, обычно с блокировкой, но доступ к транзакционной памяти и другие методы также доступны, поэтому, извините, я не понимаю вашего вопроса.   -  person Arafangion    schedule 30.10.2009


Ответы (4)


Согласно предложению Вегара

На основе нескольких часов оценки OmniThreadLibrary

Вот некоторые вещи, которые мне в нем нравятся

1) Он прост в использовании

2) Он скрывает большую часть деталей о многопоточности.

3) С помощью нескольких строк кода вы можете настроить несколько потоков.

4) Легко делать межпроцессные сообщения

5) Он все еще активно развивается

person Charles Faiga    schedule 23.03.2009
comment
+1. С вашей второй точкой связана IMO, которая фокусируется на исполняемых рабочих единицах (задачах), а не на потоках. Потоки (или пулы потоков) — это просто средство для достижения цели. Вот что делает его настоящей структурой, а не простым фасадом для многопоточности VCL. - person mghie; 23.03.2009
comment
С другой стороны, у него паршивая документация. Но я это исправлю - обещаю. Я буду, я буду! - person gabr; 26.03.2009
comment
Что ж, gbar честен: документацию нужно улучшить, тем не менее голосуйте... - person Remko; 09.10.2009

Не фреймворк как таковой, но есть AsyncCalls. Его объем отличается от OmniThreadLibrary, но он также поддерживает более старые версии Delphi.

person Mihai Limbășan    schedule 22.03.2009

Internet Direct (Indy) содержит типы данных IdThread и потокобезопасные в IdThreadSafe.pas:

* TIdThreadSafeInteger
* TIdThreadSafeBoolean
* TIdThreadSafeString
* TIdThreadSafeStringList 

... и еще кое-что

Библиотека кода джедаев (JCL) также включает классы и функции синхронизации (около десяти классов).

person mjn    schedule 22.03.2009
comment
Оба они как минимум на один уровень абстракции ниже. Не то, что я бы назвал Threading Frameworks. - person mghie; 22.03.2009
comment
Я не знал о безопасных типах данных Indy. Очень круто! - person Mick; 22.03.2009

В течение последних 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