powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Парралельный обход коллекции в строгом порядке с заданным числом потоков
90 сообщений из 90, показаны все 4 страниц
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542364
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть коллекция с датами.
нужно выполнить процедуру для каждой даты в несколько потоков но в строгом порядке (сортировка по дате).
Т.е. запускается сразу 4 потока с датой 1,2,3,4, время выполнения разное, закончилась обработка 2, сразу началась 5 и т.д.
Есть ли стандартный метод в дотнете (PLINQ там всякий)? Или нужно самому управлять созданием нового потока?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542368
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно Task использовать. https://metanit.com/sharp/tutorial/12.2.php
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542392
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
Код: c#
1.
2.
Цикл даты
   await RunList (list)


Вроде всё c 2012 года
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542492
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я и имел ввиду про ручное управление, а через таски, await или другие классы (хоть через бэкграудворкеры) не имеет принципиальной разницы.
как написать я себе представляю: метод выдающий следующую дату из коллекции через лок-объект, функция создающая поток с обработкой должна быть рекурсивна пока есть даты в коллекции и функцию вызвать сразу нужно число раз = желаемому кол-ву потоков.
я просто думал что есть уже готовое решение в PLINQ или Parallel.* чтобы не изобретать велосипед.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542499
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или просто нужное кол-во потоков с функцией внутри которой цикл пока даты не кончались. даты через лок-объект возвращаются.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542507
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ограничить количество потоков можно с помощью ThreadPool.SetMaxThreads (Int32, Int32)
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542576
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Task'и + шедулер на 4 потока с очередью выполнения .
пример такого шедулера есть в MSDN:
https://msdn.microsoft.com/ru-ru/library/ee789351(v=vs.100).aspx
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542591
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да вроде накидал сейчас через семафор и таски
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
   static int _pcount = 0;
      static object _lock = new object();
      static SemaphoreSlim _semaphore;

      static int PCount
      {
         get
         {
            lock (_lock)
            {
               return ++_pcount;
            }
         }
      }

      class PTaskTestItem
      {
         public int OrderNum;
         public int SleepSec;
         public int RunNum;

         public PTaskTestItem(int orderNum, int sleepSec)
         {
            OrderNum = orderNum;
            SleepSec = sleepSec;
            RunNum = -1;
         }

         public override string ToString()
         {
            return string.Format("{0} - {1} [{2}]", OrderNum, RunNum, SleepSec);
         }
      }


     public void Test3()
      {
         var taskList = new List<PTaskTestItem>()
         {
            new PTaskTestItem(1, 10),
            new PTaskTestItem(2, 5),
            new PTaskTestItem(3, 3),
            new PTaskTestItem(4, 8),
            new PTaskTestItem(5, 12),
            new PTaskTestItem(6, 7),
            new PTaskTestItem(7, 10),
            new PTaskTestItem(8, 8),
            new PTaskTestItem(9, 10),
            new PTaskTestItem(10, 4),
            new PTaskTestItem(11, 1),
            new PTaskTestItem(12, 3),
            new PTaskTestItem(13, 10),
            new PTaskTestItem(14, 12),
            new PTaskTestItem(15, 11),
            new PTaskTestItem(16, 4),
            new PTaskTestItem(17, 7),
            new PTaskTestItem(18, 6),
            new PTaskTestItem(19, 10),
            new PTaskTestItem(20, 14),
         };
         var po = new ParallelOptions() { MaxDegreeOfParallelism = 4 };
         _semaphore = new SemaphoreSlim(0, po.MaxDegreeOfParallelism);
         /*
         //1
         var pTaskList = taskList.ToArray().
                  AsParallel().
                  AsOrdered().
                  Select(x =>
                  {
                     x.RunNum = PCount;
                     Thread.Sleep(x.SleepSec * 1000);
                     return x;
                  });
         foreach (var res in pTaskList) // Выполнение 
         {
            Debug.WriteLine(res.ToString());
         }
         */
         //2
         //Parallel.ForEach(taskList, po, (x) =>
         //{
         //   x.RunNum = PCount;
         //   Thread.Sleep(x.SleepSec * 1000);
         //   Debug.WriteLine(x.ToString());
         //});

         //3


         var tasks = new Task[taskList.Count];
         for (int i = 0; i < taskList.Count; i++)
         {
            tasks[i] = Task.Run(() =>
            {
               _semaphore.Wait();
               var n = PCount;
               var x = taskList.FirstOrDefault(f => f.OrderNum == n);               
               x.RunNum = n;
               Thread.Sleep(x.SleepSec * 1000);
               Debug.WriteLine(x.ToString());
               _semaphore.Release();
            });
         }
         _semaphore.Release(po.MaxDegreeOfParallelism);
         Task.WaitAll(tasks);
}
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542606
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
Я тебе дал 2 строки. Ты написал 100 строк с семафорами)))))
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542607
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TОграничить количество потоков можно с помощью ThreadPool.SetMaxThreads (Int32, Int32)
Да.
await как раз через него.
Только ему мешать не надо и ограничивать.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542611
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabas,
Я тебе дал 2 строки. Ты написал 100 строк с семафорами)))))
а я не понял, как задать у тебя кол-во потоков. в ThreadPool.SetMaxThreads есть ограничения которые мне не подходят. т.к. сама обработка будет в БД, а не на клиентской машине и нужно иметь возможность полностью управлять параллельностью, а не зависить от кол-ва процессоров на клиенте
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542612
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasчерез лок-объект,
Потокобезоп.коллекцию возьми.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542617
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasа я не понял, как задать у тебя кол-во
Зачем?
Это пул потоков.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542618
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabas,
Я тебе дал 2 строки. Ты написал 100 строк с семафорами)))))
поэтому и спрашивал , т.к. не хотел изобретать велосипед, как сделать я знал и не один вариант.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542620
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasобработка будет в БД,
В смысле? В сиквеле или Оракле?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542621
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasPetro123barrabas,
Я тебе дал 2 строки. Ты написал 100 строк с семафорами)))))
поэтому и спрашивал , т.к. не хотел изобретать велосипед, как сделать я знал и не один вариант.
Тогда начни писать await, а то вопросы странные.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542624
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

при чем тут await вообще?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542630
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasчерез лок-объект,
Потокобезоп.коллекцию возьми.
ну да, можно и ConcurrentQueue конечно, ихмо не принципиально и тяжелее объект, там большая часть функционала не нужна мне в данной случае. внутри там такой-же лок
меня именно запуск интересовал в нужной последовательности с заданным кол-вом потоков, остальное
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542632
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
Он управляет очерёдностью.
Внутри task.run ставит в пул потоки.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542634
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasихмо не принципиально
Принципиален лаконичный код. Если нужно, на лямбдах.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542636
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasобработка будет в БД,
В смысле? В сиквеле или Оракле?
а есть принципиальная разница для данной темы? в данном случае в оракле, но с тем же успехом можно заменить на сторонний webservice. смысл что реальная тяжелая обработка происходит удалённо и не должна зависеть от параметров запускающей машины.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542640
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasихмо не принципиально
Принципиален лаконичный код. Если нужно, на лямбдах.
отладка неудобна :), некуда брейкпоинт поставить
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542647
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
В оракле JOB на своём ЯП.
Делай.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542650
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
Какие бряки в потоках? ))
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542652
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Roman Mejtes,
Он управляет очерёдностью.
Внутри task.run ставит в пул потоки.
если не сложно, измени мой пример, я больше plsql занимаюсь и "новые" фишки дотнета не сильно юзаю, по верхам прочитал, но что-то не складывается как можно через await решить с точным заданием кол-ва потоков.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542658
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
Извини, свой проект есть.
Готовый код альтруисты бывают, но редко.
Удачи!
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542662
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas
Код: c#
1.
2.
3.
4.
5.
...
            tasks[i] = Task.Run(() =>
            {
               _semaphore.Wait();
...


ИМХО Не очень хорошая идея повисать на Wait() внутри таска. Этим ты поток занимаешь из трэдпула.

Лучше при старте запустить 4 таска, а внутри таска цикл: извлечь очередной необсчитанный элемент taskList[] и обсчитать. Т.е. тасков столько, сколько надо потоков.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542663
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
        public class MyIndexer
        {
            int _currix = -1;
            public int GetNext()
            {
                lock (this) {
                    _currix++;
                    return _currix;
                }
            }
        }
        static void Main(string[] args)
        {
            var dts = new List<DateTime>();
            var rnd = new Random();
            for (int i = 0; i < 100; i++)
                dts.Add(DateTime.Now.AddDays(-100.0 * rnd.NextDouble()));
            dts = dts.OrderBy(i => i).ToList();
            var indexer = new MyIndexer();
            var tasks = new List<Task>();
            for (int i = 0; i < 4; i++) {
                var taskid = i + 1;
                var startix = indexer.GetNext();
                tasks.Add(Task.Run(() => {
                    var ix = startix;
                    while (ix < dts.Count) {
                        Console.WriteLine("{0} - {1} - task{2}", ix, dts[ix], taskid);
                        System.Threading.Thread.Sleep(TimeSpan.FromSeconds(rnd.NextDouble())); // обработка...
                        ix = indexer.GetNext();
                    }
                }));
                while (tasks.Last().Status == TaskStatus.WaitingToRun)
                    System.Threading.Thread.Sleep(1); // лучше не придумал, как упорядочить старт
            }
            Task.WaitAll(tasks.ToArray());
            Console.WriteLine("The end.");
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542666
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabas,
В оракле JOB на своём ЯП.
Делай.
как на plsql и джобах сделать я знаю.
но в данном конкретном случае мне нужно консольное приложение, которое будет запускаться в существующей инфраструктуре (принимать определенные уже параметры из вне, писать лог в нужном формате и т.д.), со своим шедулером, который все это обеспечивает, который умеет прибивать приложения, а останавливать джобы нет.
если отдать все в БД, то убив приложение, процесс не остановится.
в общем, есть готовая инфраструктура работающая и данная нам в ощущениях и выбор решения обусловлен именно этим.
Я конечно ценю советы, серьёзно, но вопрос был именно про дотнет.
как я уже сказал, что найденное решение может тиражироваться и на сторонние web-сервисы
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542670
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЛучше при старте запустить 4 таска, а внутри таска цикл: извлечь очередной необсчитанный элемент taskList[] и обсчитать. Т.е. тасков столько, сколько надо потоков.
Тоже так подумал, но возникает (небольшая) проблема на старте (см.код выше)
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542672
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tbarrabas
Код: c#
1.
2.
3.
4.
5.
...
            tasks[i] = Task.Run(() =>
            {
               _semaphore.Wait();
...


ИМХО Не очень хорошая идея повисать на Wait() внутри таска. Этим ты поток занимаешь из трэдпула.

Лучше при старте запустить 4 таска, а внутри таска цикл: извлечь очередной необсчитанный элемент taskList[] и обсчитать. Т.е. тасков столько, сколько надо потоков.
понятно, такой вариант описывал выше, но почему-то остановился не на нем.
наверное действительно будет лучше.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542673
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabas,
Извини, свой проект есть.
Готовый код альтруисты бывают, но редко.
Удачи!
да без проблем. спасибо
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542685
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так всего 4 потока.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
   static int _pcount = 0;
      static object _lock = new object();
      
      static int PCount
      {
         get
         {
            lock (_lock)
            {
               return ++_pcount;
            }
         }
      }

      class PTaskTestItem
      {
         public int OrderNum;
         public int SleepSec;
         public int RunNum;

         public PTaskTestItem(int orderNum, int sleepSec)
         {
            OrderNum = orderNum;
            SleepSec = sleepSec;
            RunNum = -1;
         }

         public override string ToString()
         {
            return string.Format("{0} - {1} [{2}]", OrderNum, RunNum, SleepSec);
         }
      }

      public void Test3()
      {
         var taskList = new List<PTaskTestItem>()
         {
            new PTaskTestItem(1, 10),
            new PTaskTestItem(2, 5),
            new PTaskTestItem(3, 3),
            new PTaskTestItem(4, 8),
            new PTaskTestItem(5, 12),
            new PTaskTestItem(6, 7),
            new PTaskTestItem(7, 10),
            new PTaskTestItem(8, 8),
            new PTaskTestItem(9, 10),
            new PTaskTestItem(10, 4),
            new PTaskTestItem(11, 1),
            new PTaskTestItem(12, 3),
            new PTaskTestItem(13, 10),
            new PTaskTestItem(14, 12),
            new PTaskTestItem(15, 11),
            new PTaskTestItem(16, 4),
            new PTaskTestItem(17, 7),
            new PTaskTestItem(18, 6),
            new PTaskTestItem(19, 10),
            new PTaskTestItem(20, 14),
         };
         var po = new ParallelOptions() { MaxDegreeOfParallelism = 4 };
        
         var tasks = new Task[po.MaxDegreeOfParallelism];
         for (int i = 0; i < po.MaxDegreeOfParallelism; i++)
         {
            tasks[i] = Task.Run(() =>
            {
               while (true)
               {
                  var n = PCount;
                  var x = taskList.FirstOrDefault(f => f.OrderNum == n);
                  if (x == null)
                     break;
                  x.RunNum = n;
                  Thread.Sleep(x.SleepSec * 1000);
                  Debug.WriteLine(x.ToString());
               }
            });
         }

         Task.WaitAll(tasks);
}



все в свою очередь запустились (return string.Format("{0} - {1} [{2}]", OrderNum, RunNum, SleepSec);)
3 - 3 [3]
2 - 2 [5]
4 - 4 [8]
1 - 1 [10]
6 - 6 [7]
5 - 5 [12]
8 - 8 [8]
7 - 7 [10]
10 - 10 [4]
11 - 11 [1]
12 - 12 [3]
9 - 9 [10]
16 - 16 [4]
13 - 13 [10]
14 - 14 [12]
15 - 15 [11]
17 - 17 [7]
18 - 18 [6]
19 - 19 [10]
20 - 20 [14]
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542686
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRDima TЛучше при старте запустить 4 таска, а внутри таска цикл: извлечь очередной необсчитанный элемент taskList[] и обсчитать. Т.е. тасков столько, сколько надо потоков.
Тоже так подумал, но возникает (небольшая) проблема на старте (см.код выше)
Потому что ты неправильно это написал
Код: c#
1.
2.
3.
4.
                var startix = indexer.GetNext();
                tasks.Add(Task.Run(() => {
                    var ix = startix;
...


надо так
Код: c#
1.
2.
                tasks.Add(Task.Run(() => {
                    var ix = indexer.GetNext();


В этом случае не надо дожидаться кто раньше стартанет, т.к. первый запустившийся начнет выполнять первое задание.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542689
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ этом случае не надо дожидаться кто раньше стартанет, т.к. первый запустившийся начнет выполнять первое задание.
Нет Дима, первый запустившийся не обязательно успеет взять первое задание, в этом то и проблема...
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542692
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRDima TВ этом случае не надо дожидаться кто раньше стартанет, т.к. первый запустившийся начнет выполнять первое задание.
Нет Дима, первый запустившийся не обязательно успеет взять первое задание, в этом то и проблема...
Внимательно посмотри на код 20903233
Я не про первого созданного, а именно про первого запустившегося. Номер первого задания надо получать внутри таска, а не снаружи. В этом проблема твоего кода.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542698
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВнимательно посмотри на код 20903233
Я не про первого созданного, а именно про первого запустившегося. Номер первого задания надо получать внутри таска, а не снаружи. В этом проблема твоего кода.
Так как ты предлагаешь у меня было с самого начала, результат мне не понравился, т.к. я не про "первого запустившегося", а про "первого запускаемого", понимаешь?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542708
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните дураку чем не подходит
Код: c#
1.
Parallel.Foreach(<ConcurrentQueue>, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item => {})
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542720
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pu4koffОбъясните дураку чем не подходит
Код: c#
1.
Parallel.Foreach(<ConcurrentQueue>, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item => {})


у еее

всем подходит
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542732
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pu4koffОбъясните дураку чем не подходит
Код: c#
1.
Parallel.Foreach(<ConcurrentQueue>, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item => {})


+5 Вроде именно для таких.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542743
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

вот как еще можно решить проблему со стартом (сигнализировать из задания, когда оно "подхватило" свой первый номер)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            var startEvent = new System.Threading.AutoResetEvent(true);
            for (int i = 0; i < 4; i++) {
                var taskid = i + 1;
                startEvent.Reset();
                tasks.Add(Task.Run(() => {
                    var ix = indexer.GetNext();
                    startEvent.Set();
                    while (ix < dts.Count) {
                        Console.WriteLine("{0} - {1} - task{2}", ix, dts[ix], taskid);
                        System.Threading.Thread.Sleep(TimeSpan.FromSeconds(rnd.NextDouble())); // обработка...
                        ix = indexer.GetNext();
                    }
                }));
                startEvent.WaitOne();
            }
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542811
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pu4koffОбъясните дураку чем не подходит
Код: c#
1.
Parallel.Foreach(<ConcurrentQueue>, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item => {})

Нет гарантии, что будет в нужном порядке.

Метод AsOrdered
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542827
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRDima T,

вот как еще можно решить проблему со стартом (сигнализировать из задания, когда оно "подхватило" свой первый номер)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            var startEvent = new System.Threading.AutoResetEvent(true);
            for (int i = 0; i < 4; i++) {
                var taskid = i + 1;
                startEvent.Reset();
                tasks.Add(Task.Run(() => {
                    var ix = indexer.GetNext();
                    startEvent.Set();
                    while (ix < dts.Count) {
                        Console.WriteLine("{0} - {1} - task{2}", ix, dts[ix], taskid);
                        System.Threading.Thread.Sleep(TimeSpan.FromSeconds(rnd.NextDouble())); // обработка...
                        ix = indexer.GetNext();
                    }
                }));
                startEvent.WaitOne();
            }


Зачем лишний тормоз? Не надо тут никакой синхронизации.
Похоже тебя смущает что Console.WriteLine() отрабатывает не так как ты ожидаешь. Это проблема вызова Console.WriteLine() и не более того. Замени Console.WriteLine() на добавление в ConcurrentQueue<string> и в конце выведи содержимое.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542828
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,
Дак в него нужно отдавать коллекцию на одну дату.
Иначе вообще никакой параллельности.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542830
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.с. бы ещё таймштамп ввёл и просил очерёдности выполнения)).
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542839
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗачем лишний тормоз? Не надо тут никакой синхронизации.
Похоже тебя смущает что Console.WriteLine() отрабатывает не так как ты ожидаешь. Это проблема вызова Console.WriteLine() и не более того. Замени Console.WriteLine() на добавление в ConcurrentQueue<string> и в конце выведи содержимое.
Да нет же)) Гипотетически "строгость" может быть необходимой и на старте по номерам заданий/потоков, т.е., чтобы задание/поток№1 обрабатывал первый элемент, №2 - второй, и т.д. Вот я и "усилил" условие задачки (больше из эстетических соображений), чтобы не было стартовой "путаницы", когда, к примеру, первый елемент хватает задание/поток№3, а №1 достается второй элемент... Впрочем, спорить что правильно а что нет не имеет смысла, т.к. мы не знаем зачем ТСу такой "строгий порядок".
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542982
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой поток из пула запустит первую дату не важно. важно чтобы моментом старта обработки у меньшей даты был меньше или равен следующей по порядку.
а причина довольна простая, чтобы можно было остановить процесс обработки и точно сказать, что обработалось от сих до сих, а а не в разнобой.
до этого код был написан немного не оптимально, бралось нужное кол-во дат и запускалось одновременно, дожидались код-да все завершаться, потом следующая партия. получалалось что потоки какое-то время простаивают, тк время обработки может быть разным.
вот заметил и решил исправить.
переписал на Parallel.Foreach(<ConcurrentQueue>, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item => {})
погонял тесты, вроде все норм, хотя тут есть комент что порядок не гарантирован.
по идее для получения элемента из очереди используется спецметоды, а foreach может использовать просто IEnumerable, тогда хз, гарантируется ли соблюдение очереди?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542985
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
время обработки разное но не кардинально, т.е. первая дата не будет обрабатываться когда уже в другом потоке обрабатывается 20я. поэтому допустимо такое упрощение имеет право на .. и опять же есть готовая инфраструктура запуска приложения и управления параметрами. ну и опять же прерывать и перезапускать будет человек и читать лог тоже.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542986
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
Так условие очерёдности в параллельной работе ты сам выдумал?
Заняться тебе нечем.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542987
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasпрерывать и перезапускать будет человек и читать лог тоже.
Вот и приведи задачу с точки зрения пользователя, а не ту что ты сам придумал.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542995
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregPu4koffОбъясните дураку чем не подходит
Код: c#
1.
Parallel.Foreach(<ConcurrentQueue>, new ParallelOptions { MaxDegreeOfParallelism = 4 }, item => {})

Нет гарантии, что будет в нужном порядке.

Метод AsOrdered
в PLINQ не нельзя задать ЛЮБОЕ число потоков, они зависят от кол-ва процессоров на клиенте

Точно нет гарантии с ConcurrentQueue?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39542999
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabas,
Так условие очерёдности в параллельной работе ты сам выдумал?
Заняться тебе нечем.
нет, оно было, просто реализовано не оптимально (обработка партиями и простой более быстрых потоков).
изменив время обработки сократилось минут 8-10, не час сорок а полтора стало на целевом периоде. это хоть и не много, но окончания процесса ждут люди чтобы начинать следующие действия и у них есть жесткие временные рамки в рамках закрытия месяца и формирования всех документов.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543011
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasпрерывать и перезапускать будет человек и читать лог тоже.
Вот и приведи задачу с точки зрения пользователя, а не ту что ты сам придумал.
пользователь запускает процедуру расчета конечной стоимости в каждой операции за период, период дробится по дням для визуализации и для понимания что можно потом работать с определенным меньшим периодом если что-то пошло не так. Описывать все ньюансы и обсуждать все бизнес-процессы нет желания.
просто не очень понятно какое имеет отношение к изначальному вопросу.
как раз формулирование абстрактной задачи и приводит к получению реальных ответов по теме, а вы уводите тему в другую сторону , но это вообще фишка данного форума и вообще рунета :).
в принципе я получил ответы, повторюсь, меня интересовало именно стандартное решение, которое я не знал, как написать рабочий код на многопоточных примитивах я занал вполне, но как и вы люблю лаконичность (не и ущерб читаемости и поддержке конечно)
В общем всем спасибо большое.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543016
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasне час сорок а полтора
А ты не сравнивал решения СубдJob ---- АппСерверКоллекции.
Вдруг там на порядок быстрее?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543017
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasно это вообще фишка данного форума и вообще рунета :).
Конечно. Тут люди за хобби, а не за деньги решают ваши задачи.
Удачи!
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543019
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasкакой поток из пула запустит первую дату не важно. важно чтобы моментом старта обработки у меньшей даты был меньше или равен следующей по порядку.
а причина довольна простая, чтобы можно было остановить процесс обработки и точно сказать, что обработалось от сих до сих, а а не в разнобой.
Понятно, а я уж подумал, что это имеет отношение к автоматизации какого-то производства. Например, на кладбище есть четыре бригады гробокопателей, от лучшей 1-й (самая быстрая, аккуратная, наименее пьющая и т.п.) до худшей 4-й (пьяницы, прогульщики и т.п.), и вот надо оптимально распределять периодически поступающие пачки с энным количеством (иногда меньше 4) заявок))) Ну, или четыре станка в цеху разной эффективности (разное энергопотребление, скорость и точность изготовления), и т.п.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543033
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasно это вообще фишка данного форума и вообще рунета :).
Конечно. Тут люди за хобби, а не за деньги решают ваши задачи.
Удачи!
ветка "работа" немного в другом месте, удачи!!! и хорошего настроения
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543039
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasно это вообще фишка данного форума и вообще рунета :).
Конечно. Тут люди за хобби, а не за деньги решают ваши задачи.
Удачи!
ради интереса зашел в профиль посмотреть ваши темы, походил по первой странице, не увидел где вы предлагаете вознаграждение за ответы на ваши вопросы, немного в замешательстве :)
но вы держитесь там...
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543048
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
Вы тоже держитесь).
На улицу и в публичные места, форумы не выходите.
Вас таких 1%, кто спрашивая на форуме, на него и пинает (обобщает).
А на заправке если предложат чаю не по делу, вы сразу в профиль полезете).
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543050
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRотношение к автоматизации какого-то производства.
Ну, я в его профиль не лазил. А по тз понял так, что нарезается пачка записей по датам grouo by
А далее, в очередь, пул потоков. А очерёдность в пуле не важна. Тогда быстрее на порядок.
Если важна, то медленно.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543058
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabas,
Вы тоже держитесь).
На улицу и в публичные места, форумы не выходите.
Вас таких 1%, кто спрашивая на форуме, на него и пинает (обобщает).
А на заправке если предложат чаю не по делу, вы сразу в профиль полезете).
спасибо за совет, но думаю воздержусь.
на форум я не пиняю, яж не мазохист, я сам, как можно заметить, люблю пофлудить иногда.
особенности (большое число флуда) в рунете это факт, но я не говорил что это что-то омерзительное, это фишка
я как раз и написал, имея опыт общения, что если хочешь ответ по теме, лучше сформулировать ее абстрактно, что-бы не читать что нужно все переписать и переделать, т.к. для того чтобы давать такие советы нужно быть 100% в теме всех деталей и процессов, а описывать всю подноготную это не вариант по трудозатратам.

а профиль я посмотрел из образовательных целей, я думал что человек, который не дурак давать советы бесплатно, должен на своем примере показывать как это делается и возможно здесь это уже стало негласным правилом (как можно понять по моему профилю, я теперь очень редко посещяю форум), а я по старой привычке залез своим свиным рылом ....
но видимо все проще, есть 1% нас и 1% вас, в остальном все в порядке.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543066
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasне час сорок а полтора
А ты не сравнивал решения СубдJob ---- АппСерверКоллекции.
Вдруг там на порядок быстрее?
порядок врятли, т.к. вся работа как раз в БД, клиент только вызывает ХП с параметрами (период,в данном случае день, и пара настроек). все миллионы записей обрабатываются внутри БД без закачки на клиент, разумеется.
время организации цепочки вызовов бесконечно мало по сравнению в обработкой.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543069
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,
Да милый. Это старость.
Я про принципы публичного форума вам напомнил не от себя лично.
А вы как в анекдоте - Солдат! У вас сапоги не чищены!
))).
Кончайте впадать в старость и брюзжание.
Идите с миром.
На форуме всё хорошо. Мы флудим только на технические темы....для молодых.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543073
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasPetro123пропущено...

А ты не сравнивал решения СубдJob ---- АппСерверКоллекции.
Вдруг там на порядок быстрее?
порядок врятли, т.к. вся работа как раз в БД, клиент только вызывает ХП с параметрами (период,в данном случае день, и пара настроек). все миллионы записей обрабатываются внутри БД без закачки на клиент, разумеется.
время организации цепочки вызовов бесконечно мало по сравнению в обработкой.
Спс. Именно ваш опвт на земле я и хотел услышать.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543077
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasЕсть коллекция с датами.
нужно выполнить процедуру для каждой даты в несколько потоков но в строгом порядке (сортировка по дате).
Т.е. запускается сразу 4 потока с датой 1,2,3,4, время выполнения разное, закончилась обработка 2, сразу началась 5 и т.д.
Есть ли стандартный метод в дотнете (PLINQ там всякий)? Или нужно самому управлять созданием нового потока?

А можно поинтересоваться, зачем такая задача? И для чего управлять очередностью запуска потоков в строгом порядке, если по идее время завершения недетерминировано и в общем случае не совпадает по порядку старта?

Я бы делал так: Parallel.ForEach(список, Action). Количество потоков на усмотрение фреймворка.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543080
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, не дочитал до конца. Про Parallel.ForEach уже сказали )) Но я так и не понял, что это за такая бизнес-задача?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543081
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JOBы в конкретном случае не приведут заметному ускорению обработки, но придется делать подсистему мониторинга и управления ими, т.к. клиент в простейшем случае отправляет ванвей вызов и дальше ничем не управляет.
есть процесс запускаемый клиентов из UI (тут согласен будет удобнее, с учетом создания центра управления такими заданиями), есть вариант запуска из консольной программы по своему шедулеру и логами и уведомлениями стандартными для всех процессов компании,не только связанными с БД, коих много как и систем (тут скорее наоборот, нужно привязать сессию в приложению).
иногда лучше потерять несколько секунд-минут, но иметь единообразную и всем участникам привычную архитектуру, чем каждую задачу решать по своему, пусть и наиоптимальнейшим образом.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543085
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Так, не дочитал до конца. Про Parallel.ForEach уже сказали )) Но я так и не понял, что это за такая бизнес-задача?
сама обработка происходит удалённо, а не на машине где организуется очередь, нагрузка на удаленный сервер не связана с кол-вом процессоров на клиенте, вот и все
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543092
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas... по своему шедулеру ...Свой не нужен, есть готовый, из "коробки": Using the Task Scheduler
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543099
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasиногда лучше потерять несколько секунд-минут, но иметь единообразную и всем участникам привычную архитектуру, чем каждую задачу решать по своему, пусть и наиоптимальнейшим образом.
В этом всё дело.
У меня проект поменьше чем у вас, но когда я отпустил потоки без всякой очерёдности и управляемости в кавычках, у меня время уменьшилось в 3 раза.
Да. Это именно в моём контексте. Не в вашем.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543106
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кbarrabas... по своему шедулеру ...Свой не нужен, есть готовый, из "коробки": Using the Task Scheduler
вот об этом и говорил выше
задача должна быть сформирован абстрактна.
вы серьезно думаете что тут кто-то не знает про виндовый шедулер?
и люди бы писали свой (тут я участия почти не принимал), если бы удовлетворял нужным критериям, не в части запуска задач по расписанию, а именно управления задачами запуска, логами и уведомлениями разных приложений (как своих там и сторонних)и скриптов, цепочной задач (последовательными и параллельными группами) с настройкой поведения в зависимости от резулткода, с возможностью через удаленный UI продолжить прерванную цепочку в нужного места и т.д.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543111
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasАлексей Кпропущено...
Свой не нужен, есть готовый, из "коробки": Using the Task Scheduler
вот об этом и говорил выше
задача должна быть сформирован абстрактна.
вы серьезно думаете что тут кто-то не знает про виндовый шедулер?
и люди бы писали свой (тут я участия почти не принимал), если бы удовлетворял нужным критериям, не в части запуска задач по расписанию, а именно управления задачами запуска, логами и уведомлениями разных приложений (как своих там и сторонних)и скриптов, цепочной задач (последовательными и параллельными группами) с настройкой поведения в зависимости от резулткода, с возможностью через удаленный UI продолжить прерванную цепочку в нужного места и т.д.
причем через UI (управлеющего удаленной службой) понятного для простого юзера, чего про виндовый шедулер не скажешь совсем.
типа запустить задачу, простомтреть журнал запусков с фильтрами, по клику получить лог, перезапустить/продолжить(в случае с задачами в которых много действий остановленных при ошибке в одном из и т.д. )
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543126
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasвот об этом и говорил выше
задача должна быть сформирован абстрактна.
вы серьезно думаете что тут кто-то не знает про виндовый шедулер?
Агрессивный вы наш.
Этот топик не только для вас.
Я как новичок), с удовольствием прочту про эту возможность.
Потолерантнее немного).
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543141
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasвы серьезно думаете что тут кто-то не знает про виндовый шедулер?Да. Если люди не в состоянии написать банальный ThreadPool, не задавая вопросов на форуме, то вполне вероятно и такое.
barrabas... причем через UI (управлеющего удаленной службой) понятного для простого юзера, чего про виндовый шедулер не скажешь совсем.
типа запустить задачу, простомтреть журнал запусков с фильтрами, по клику получить лог, перезапустить/продолжить(в случае с задачами в которых много действий остановленных при ошибке в одном из и т.д. )Написать нужный UI для "виндового шедулера", вроде как, проще, чем писать всё с "нуля". Да и его родной UI, всяко, будет полезен.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543143
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123barrabasвот об этом и говорил выше
задача должна быть сформирован абстрактна.
вы серьезно думаете что тут кто-то не знает про виндовый шедулер?
Агрессивный вы наш.
Этот топик не только для вас.
Я как новичок), с удовольствием прочту про эту возможность.
Потолерантнее немного).
приношу пардоны, не хотел обидеть никого.
просто совпало :)
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543153
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кbarrabasвы серьезно думаете что тут кто-то не знает про виндовый шедулер?Да. Если люди не в состоянии написать банальный ThreadPool, не задавая вопросов на форуме, то вполне вероятно и такое.
barrabas... причем через UI (управлеющего удаленной службой) понятного для простого юзера, чего про виндовый шедулер не скажешь совсем.
типа запустить задачу, простомтреть журнал запусков с фильтрами, по клику получить лог, перезапустить/продолжить(в случае с задачами в которых много действий остановленных при ошибке в одном из и т.д. )Написать нужный UI для "виндового шедулера", вроде как, проще, чем писать всё с "нуля". Да и его родной UI, всяко, будет полезен.
если почитаете топик, написать как раз нет проблем. интересовало именно наличие стандартного решения в пару строчек (черeз PLINQ или Parallel) или его отсутствие, вот и весь вопрос был. вопрос как написать самому, тут от меня не звучал, разве что просил продемонстрировать варинат на await, т.к. не понял из приведенного ответа как ограничить потоки.

запуск заданий по времени лишь малая часть функционала, хотя разумеется важнейшая.не говоря про права на управление стандартным шедулером еще и на удаленном сервере для юзера.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543163
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas... не говоря про права на управление стандартным шедулером еще и на удаленном сервере для юзера.Ну сделать сервер приложений, управляющий "шедулером" на сервере. На первый взгляд тут напрашивается Web UI.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543171
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasawait, т.к. не понял из приведенного ответа как ограничить потоки.
Я по задаче не понял, зачем ограничивать потоки.
У меня задач 100 сразу. По умолчанию пул где то 10 - 15 стартует.
Потом он сам выбирает задачи и ОПТИМИЗИРУЕТ.
По моему впечатлению работает отлично. И в сети читал, что лезть туда и писать с нуля тоже не надо.
Конкретно, про await можно рассуждать когда попробуешь.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543177
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
многие архитектурные решения вынужденные и со стороны человека не знающего внутренней кухни могут выглядеть кривыми и странными, а для человека в теме наоборот супер элегантным выходом из ситуации.
закрытые порты, отсутствие всяких "пользовательских прав" в крупных компаних это норма, приходится через один порт пропихивать кучу потоков, наворачивая разные проксисислужбы и вебсервисы. открыть порт для дочерней компании с защитой решения не архсовете это на месяцы, окажется что внутренняя система вообще не имеет паспорта в глобальной корп среде и о каких портах для нее может идти речь, пусть даже они не выходят за пределы конкретной дочки, а бизнесу нужно решение уже сейчас
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543182
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasзакрытые порты, отсутствие всяких "пользовательских прав" в крупных компаних это норма, приходится через один порт пропихивать кучу потоков, наворачивая разные проксисислужбы и вебсервисы. открыть порт для дочерней компании с защитой решения не архсовете это на месяцы, окажется что внутренняя система вообще не имеет паспорта в глобальной корп среде и о каких портах для нее может идти речь, пусть даже они не выходят за пределы конкретной дочки, а бизнесу нужно решение уже сейчасНу сервер приложений, предложенный выше, решает эти проблемы. Ну дело Ваше, конечно же...
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543187
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasесли почитаете топик, написать как раз нет проблем. интересовало именно наличие стандартного решения в пару строчек (черeз PLINQ или Parallel) или его отсутствие, вот и весь вопрос был.И решение было предложено практически сразу: 20902755
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543188
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
Конечно, это будет по взрослому, без обид для автора.
Пока, как я понял, он запустит демон или процесс на другой машинке и всё.
Удачи аффтару.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543194
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Удачи аффтару. +1 :-)
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543195
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кbarrabas... не говоря про права на управление стандартным шедулером еще и на удаленном сервере для юзера.Ну сделать сервер приложений, управляющий "шедулером" на сервере. На первый взгляд тут напрашивается Web UI.
все что умеет виндовый шедулер это просто запускать процесс (действие), он не понимает ответов от приложений не умеет работать с его логами не может объединять действия в задания с разными уровнями и паррарельностью, а запуск процесса самому это несколько строк кода всего.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543215
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas... он не понимает ответов от приложенийОн понимает process exit code, этого достаточно.
barrabas не умеет работать с его логами не может объединять действия в задания с разными уровнями и паррарельностью,Это не его задачи, он не для этого.
barrabas а запуск процесса самому это несколько строк кода всего.Да. :-)
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543246
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasArm79Так, не дочитал до конца. Про Parallel.ForEach уже сказали )) Но я так и не понял, что это за такая бизнес-задача?
сама обработка происходит удалённо, а не на машине где организуется очередь, нагрузка на удаленный сервер не связана с кол-вом процессоров на клиенте, вот и все

Посему клиент должен управлять нагрузкой на СЕРВЕРЕ? А что, сервер сам не умеет планировать свои ресурсы?
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543254
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79barrabasпропущено...

сама обработка происходит удалённо, а не на машине где организуется очередь, нагрузка на удаленный сервер не связана с кол-вом процессоров на клиенте, вот и все

Посему клиент должен управлять нагрузкой на СЕРВЕРЕ? А что, сервер сам не умеет планировать свои ресурсы?
нет, как раз не должен, поэтому он должен только получить сколько потоков он имеет право создать запуская группу действий и действовать в рамках этих условий.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543264
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кbarrabas... он не понимает ответов от приложенийОн понимает process exit code, этого достаточно.
barrabas не умеет работать с его логами не может объединять действия в задания с разными уровнями и паррарельностью,Это не его задачи, он не для этого.
barrabas а запуск процесса самому это несколько строк кода всего.Да. :-)
ну вот и не подошел он по списку того, что требовалось и считалось задачей шедулера в конкретной компании.
что тут рассуждать, программа написана более 10 лет назад, и последние года 3 не менялась вообще, а глобально так еще дольше.
люди которые ее писали уже не работают, а прога живет.
у меня есть своё мнение чего там не хватает и как можно было бы лучше сделать и удобнее, но нет времени.
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543270
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasArm79пропущено...


Посему клиент должен управлять нагрузкой на СЕРВЕРЕ? А что, сервер сам не умеет планировать свои ресурсы?
нет, как раз не должен, поэтому он должен только получить сколько потоков он имеет право создать запуская группу действий и действовать в рамках этих условий.
Получилось на выходе, что вы пишите свой пул потоков. У которого MaxThread, MinThread, время простоя и т.д.
Поэтому у вас АппСервера нет. Т.к. там админ просто имеет это как параметр.
IMHO
...
Рейтинг: 0 / 0
Парралельный обход коллекции в строгом порядке с заданным числом потоков
    #39543319
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasrefregпропущено...
Нет гарантии, что будет в нужном порядке.

Метод AsOrdered
в PLINQ не нельзя задать ЛЮБОЕ число потоков, они зависят от кол-ва процессоров на клиентеWithDegreeOfParallelism

barrabasТочно нет гарантии с ConcurrentQueue?Причем тут это, если Parallel.Foreach использует IEnumerable? Правда, есть еще перегрузка:
Код: c#
1.
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource, ParallelLoopState, Int64>)
...
Рейтинг: 0 / 0
90 сообщений из 90, показаны все 4 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Парралельный обход коллекции в строгом порядке с заданным числом потоков
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]