olegbash написал(а):
в своей программе объявляю внутреннюю таблицу и хочу ее заполнить не передавая по значению данные между процессами - мне здесь память диспетчера процессов (что и есть "процесс, который запускает остальные процессы") - как поможет?
В ABAP так не получится.
Проблема быстродействия решается не на уровне передачи данных по ссылке, а с помощью выделения доп.ресурсов NW ABAP.
"накладные расходы" имеют значение только для ПК, да и концепция использования общей памяти разными процессами означает риски возникновения искажений при нарушениях работы разных процессов.
olegbash написал(а):
есть ли все-таки ссылка, где сама официальная справка abap/net weaver утверждает, что multitasking и multithreading реализован? а также как создать в этой реализации event-loop и future?
Для каких целей нужно точное соответствие определений многозадачности/многопоточности из других языков (судя по терминам - Pyton либо Node.JS) и реализации параллельной обработки в ABAP?
В SAP есть понятие
параллельной обработки.Оно ближе к многозадачности(для каждого потока вычислений выделяется свой процесс с отдельным пулом ресурсов), но управляется из вызывающей программы (как в многопоточности), куда передаются данные после обработки.
Аналогом event-loop служит оператор WAIT UNTIL, который после запуска N параллельных процессов ждет, пока все они завершатся.
В ABAP нет возможности принудительно завершить event-loop, можно только дождаться его окончания. В случае, если, какой-либо процесс уходит в очень долгую обработку, завершить его можно через SM50.
Ну а feature, насколько я понимаю, это дополнение к CALL FUNCTION .. STARTING NEW TASK - PERFORMING .. AT END OF TASK, определяющее, какая процедура/метод будут вызваны после завершения параллельного ФМ (в нем вызывается оператор RECEIVE RESULTS FROM..).
Сценарии использования параллельных вычислений несколько:
1. обогащение данных по частям по одному алгоритму
2. параллельная выборка разных данных (вызов разных алгоритмов)
Сценарий использования ABAP параллельной обработки, в которой потоки должны взаимодействовать друг с другом как-то не приходят в голову из-за ограничения по количеству процессов, запускаемых одновременно из одной программы.
В ABAP я реализовывал много задач с распараллеливанием процессов - от "тяжелых" отчетов по MM, FI, CO, PP до экстракторов в BW.
Время выполнения обработки удалось уменьшать в 3-3,5 раза (при запуске 4 параллельных потоков по сценарию 1), в случае радикально тяжелых задач приходилось масштабировать через запуск фоновых задач, каждая из которых запускает по 4-5 процессов.