Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116

Время многопоточного выполнения функции

07.07.2016, 22:26. Показов 2172. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Этот код исполняется за 0.4 сек на моём компьюетере
C#
1
2
3
4
     private void Foo()
      {
            for (int i = 0; i < 100000000; i++) { }
      }
Я вызываю 10 раз foo в потоке и надеюсь, они выполнятся за время соизмеримым со временем выполнения Foo
breakpoint1
C#
1
2
3
4
5
6
7
8
9
10
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
            new Thread(() => { Foo(); }).Start();
breakpoint2
Однако время выполнения строк между breakpoint1 и breakpoint2 = около 2 сек. это для меня долго, нужно около 0.5 сек.
Мои предположения: что кроме этих потоков планировщик обрабатывает и другие. Поправьте если я неправ и помогите добиться нужной скорости.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2016, 22:26
Ответы с готовыми решениями:

Как ограничить время выполнения функции
Есть функция main, которая вызывает функцию doter. doter должна работать заданное время. Я не могу ни чего править в doter, доступ есть...

Прерывание выполнения функции в момент выполнения события
Добрый день, возникла проблема. Есть функция в процессе ее выполнения происходит некое событие, как сделать так что бы функция...

Время выполнения функций
нужно посмотреть на чем алгоритмы выполняются эффективнее, использую stopwatch и показывает все время разное, также не понял для чего...

32
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18406 / 14338 / 5370
Регистрация: 17.03.2014
Сообщений: 29,024
Записей в блоге: 1
08.07.2016, 15:28
Студворк — интернет-сервис помощи студентам
olegall, я тебе предлагаю сделать парсер в виде отдельного консольного приложения. С веб-приложением оно никак не будет связано. Парсер будет запускаться по расписанию с помощью Task Scheduler, качать страницы, парсить их, заносить в БД и т.д. Веб-приложению останется только отображать её.
0
 Аватар для jahtemg
19 / 21 / 12
Регистрация: 24.06.2016
Сообщений: 71
08.07.2016, 15:41
DataPlanner вообщем то прав... Тут надо учитывать ещё и такие факторы как тип поставленной задачи, количество работы к выполнению, ОС, и даже железо на котором всё это крутится. А так, для примера: хоть сколько нормальный веб-сервер работать в 1 потоке ну просто не может...

Для использования всех ядер процессора для обработки количество потоков как минимум должно равнятся количеству ядер.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18406 / 14338 / 5370
Регистрация: 17.03.2014
Сообщений: 29,024
Записей в блоге: 1
08.07.2016, 15:46
Цитата Сообщение от olegall Посмотреть сообщение
парсер уже сделан, использовал CsQuery. Я столкнулся с тормозами (времена ответов от сервера) при парсинге с большого количества источников.
Молодец. Значит теперь пора заняться оптимизацией парсера.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
08.07.2016, 15:48
Цитата Сообщение от jahtemg Посмотреть сообщение
Для использования всех ядер процессора для обработки количество потоков как минимум должно равнятся количеству ядер
Насколько помню, вам об этом уже неоднократно говорили.
Если вам так хочется попробовать распараллелить вашу работу, то для начала попробуйте использовать TPL. Для чего-то же она существует. Заодно и потренируетесь, лишним не будет.
Ниже элементарный пример.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Net;
 
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            string[] urls = { "http://yandex.ru", "http://google.com", "http://mail.ru", "http://rambler.ru" };
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var result = urls.AsParallel()
                .WithDegreeOfParallelism(Environment.ProcessorCount)
                .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                .Select(url => Parse(url));
            sw.Stop();
            Console.WriteLine(sw.Elapsed.ToString());
            foreach (string res in result) {
                Console.WriteLine(res);
            }
            Console.ReadLine();
        }
        static string Parse(string url) {
            using (WebClient client = new WebClient()) {
                return client.DownloadString(url);
            }
        }
    }
}
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,958
Записей в блоге: 14
08.07.2016, 15:58
jahtemg, вообще-то есть некие такие параметры как вычислительная мощность процессоров, вычислительная нагрузка, процессорное время.
По мере приближения суммарной нагрузки к 100% (полной) эффективность и время реакции падает. Количество потоков/задач тут особо не важно, пока планировщик имеет ресурсы на их обработку.
А вот когда говорят о соответствии количества потоков числу ядер, имеют в виду потоки со 100% нагрузкой своего ядра. Хороший пример тому - кодирование видео. Слабенькие или спящие потоки из диспетчера задач - это фигня.

Добавлено через 5 минут
И вот поэтому же приведённое выше явное указание числа процессоров - часто излишне.
0
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
08.07.2016, 16:02  [ТС]
Мне так и не понятно - мой автономный парсер будет работать на моём домашнем компе 24х7?
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,958
Записей в блоге: 14
08.07.2016, 16:03
olegall, планировщик используется на сервере, 24/7.
0
 Аватар для jahtemg
19 / 21 / 12
Регистрация: 24.06.2016
Сообщений: 71
08.07.2016, 16:04
Ну так я и говорю, что надо учитывать железо .
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
08.07.2016, 16:06
jahtemg, тебе уже 2 человека сказали - гоняй парсер отдельным приложением в фоне сохраняя куда-нибудь результат, а когда пользователь заходит на сайт тупо передавай ему последние полученные значения.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18406 / 14338 / 5370
Регистрация: 17.03.2014
Сообщений: 29,024
Записей в блоге: 1
08.07.2016, 16:07
Цитата Сообщение от olegall Посмотреть сообщение
Мне так и не понятно - мой автономный парсер будет работать на моём домашнем компе 24х7?
Это тебе решать. Есть необходимость и возможность так делать - значит делай.
0
 Аватар для jahtemg
19 / 21 / 12
Регистрация: 24.06.2016
Сообщений: 71
08.07.2016, 16:13
Причём здесь вообще я ? Я не ТС...
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
08.07.2016, 16:14
jahtemg, ))) извиняюсь, промахнулся
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
09.07.2016, 03:24
Коллеги, поток это всего лишь стек в памяти, которому назначен вектор прерывания. Таблица векторов прерываний реализует многозадачность процессора, хотя на самом деле все выполняется на одном процессоре.

В зависимости от контекста работы программы дополнительное прерывание может улучшить или ухудшить общую производительность процессора, поэтому сводить производительность потока к операциям вычислений или ввода/вывода не совсем корректно, поток должен решать атомарную задачу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2016, 03:24

Время выполнения программы
Подскажите пожалуйста как на C# определить за какое время выполнилась программа... функция какая нибудь есть? типо clock() в си

Время выполнения блока
Здравствуйте, Уважаемы программисты!!! Кто может мне подсказать простую вещь: как вычислить, сколько времени выполняется код в блоке?

Время выполнения циклов.
Есть массив: int count = 300000000; var arr = new int; И четыре цикла: for (int i = 0; i &lt; count; i++) s += arr; for...

Остановка выполнения в указанное время
Доброго времени суток. Господа, как заставить приложение прекратить выполнение через 10 секунд после запуска? Спасибо ) using...

Измерить время выполнения програмы
Нашел класс Stopwatch на msdn, не совсем понимаю как его использовать. Вот пример оттуда же: using System; using System.Diagnostics; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru