AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.01.2016, 09:17   #1  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Пул потоков
ДОбрый день!
Подскажите пожалуйста вот а АХ делают вот так вот чтобы создать потоки:

X++:
while {
if(!batchHeader)
            {
                batchHeader = BatchHeader::construct(this.parmCurrentBatch().RecId);
                
            }

            // create a new instance of the batch task class
            klForUpdateCustomersMultiThreadTask = KlForUpdateCustomersMultiThreadTask::newcustTable(custTable);

            // add tasks to the batch header
            batchHeader.addRuntimeTask(klForUpdateCustomersMultiThreadTask, this.parmCurrentBatch().RecId
}
Вопрос: Сколько поток создастся в этом случае?
А как сделать чтобы было вот так вот:?
X++:
public class TestThreadPool {  
     public static void main(String[] args) {  
        ExecutorService executor = Executors.newFixedThreadPool(5);//creating a pool of 5 threads  
        for (int i = 0; i < 10; i++) {  
            Runnable worker = new WorkerThread("" + i);  
            executor.execute(worker);//calling execute method of ExecutorService  
          }  
        executor.shutdown();  
        while (!executor.isTerminated()) {   }  
  
        System.out.println("Finished all threads");  
    }  
 }
Старый 19.01.2016, 10:47   #2  
axm2013
Гость
 
n/a
Цитата:
Сообщение от Art_Tanis Посмотреть сообщение
Вопрос: Сколько поток создастся в этом случае?
А как сделать чтобы было вот так вот:?
Сколько создадите потоков столько и выполнится с учетом настроек ax (в настройках конфигурации сервера указывается максимальное количество потоков)

Практически так же думается с небольшими изменениями в конце зависящими от того как вы хотите реализовать вывод информационного сообщения
Старый 19.01.2016, 11:24   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Art_Tanis Посмотреть сообщение
в АХ делают вот так вот чтобы создать потоки:
X++:
// create a new instance of the batch task class
klForUpdateCustomersMultiThreadTask = KlForUpdateCustomersMultiThreadTask::newcustTable(custTable);
// add tasks to the batch header
batchHeader.addRuntimeTask(klForUpdateCustomersMultiThreadTask, this.parmCurrentBatch().RecId
Вопрос: Сколько поток создастся в этом случае?
В приведенном примере не создаются потоки - в нем создаются пакетные задачи по аналогии с тем, как в .NET создаются Task'и в рамках TPL. Сколько под эти задачи создать потоков, решает пакетный сервер (или серверы) на основе своих настроек и загрузки другими пакетными заданиями. Пакетным заданиям назначается пакетная группа, которую по умолчанию наследуют пакетные задачи, создаваемые в runtime, также пакетные группы назначаются для обработки пакетным серверам. Исходя из этого, число потоков для выполнения задач определенной пакетной группы ограничено сверху тем, скольким пакетным серверам эта группа назначена для обработки и какое число потоков настроено для каждого из этих серверов.
Цитата:
Сообщение от Art_Tanis Посмотреть сообщение
А как сделать чтобы было вот так вот?
X++:
public class TestThreadPool {  
     public static void main(String[] args) {  
        ExecutorService executor = Executors.newFixedThreadPool(5);//creating a pool of 5 threads
Чтобы жестко ограничить пакетную обработку определенным числом потоков, есть два основных подхода:
  • выделить под обработку отдельную пакетную группу, эту группу назначить пакетному серверу и ограничить его число потоков под пакетные задачи. Минус подхода в том, что пакетные сервера - ресурс платный, и ставить новый пакетный сервер под ту или иную обработку в общем случае накладно.
  • написать пакетную обработку таким образом, чтобы она при запуске узнавала, сколько отдельных задач ей надо обработать (клиентов, накладных, номенклатур, etc), затем паковала эти свои задачи в "пакеты" (bundles) и на каждый пакет создавала уже пакетную задачу - в этом случае число потоков сверху будет ограничено числом созданных пакетных задач (т.е. числом "пакетов", на которые нарезана обработка). Минус этого подхода в усложнении кода пакетной обработки, но зато упрощается администрирование.
См. также Batch Parallelism in AX –Part - I. К большому сожалению, пакетная инфраструктура не умеет ограничивать число потоков для задач пакетной группы в рамках одного пакетного сервера.
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (5).
Старый 19.01.2016, 12:23   #4  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Вот спасибо большое тебе, добрый человек! Все рассказал - все понятно.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Код X++ на формах может штатно выполняться в несколько потоков? gl00mie DAX: Программирование 1 21.11.2011 01:24
Накладная после регистрации не попадает в пул plumbum DAX: Функционал 0 22.08.2011 14:06
1.1.2.1. Аналитический учет финансовых потоков Filip DAX: Функционал 15 23.09.2004 10:13
Схема моделей данных LTA DAX: Программирование 8 05.08.2003 15:34
Несколько || процессов в Axapta Patriot DAX: Программирование 2 29.10.2002 17:02
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:08.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.