FaceFinance (Учет личных финансов)

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

Accounting of food (Учет продуктов питания)

Не можете правильно и быстро рассчитать необходимое количество продуктов?
Наша программа поможет вам в этом.

Work with clients (Работа с клиентами)

Не можете организовать работу с клиентами?
Наша программа является простой, удобной и функциональной CRM-системой.




МНОГОПОТОЧНЫЕ ПРИЛОЖЕНИЯ

Проход по ссылкам навигацииПомощь Многопоточные приложения

Что такое многопоточные приложения?

Если объяснить простыми словами, то это программы, в которых несколько «рабочих» потоков одновременно выполняют разные или похожие задачи. Зачем это нужно? Ресурсы компьютера не всегда используются максимально эффективно.

Представьте: ваша программа скачивает страницу из интернета, затем анализирует её и только после этого начинает загружать следующую. В момент анализа соединение простаивает, а когда идёт закачка – процессор «застревает» в ожидании. Можно обойти эту проблему, одновременно работая над разными этапами: пока анализируем текущую страницу, сразу качаем следующую.

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

Когда стоит распараллеливать?

Если у вас один поток данных, который нужно обрабатывать в строгом порядке без использования результатов предыдущего шага, то добавлять новые потоки смысла не будет. Но если этапы независимы, можно создать дополнительные потоки.

Пример из практики: два рабочих копают яму глубиной 2 метра за час. Вместе они сделают это за полчаса – звучит логично. Если взять 3600 таких рабочих, теоретически яма будет выкопана за 1 секунду. На деле же они будут мешать друг другу, топтаться и нервничать.

Таким образом, многопоточность полезна не всегда, и «чем больше потоков – тем лучше» – это миф. Потоки должны работать без конфликтов и эффективно использовать ресурсы системы.

Начало работы с потоками

Для начала подключаем пространство имён System.Threading:

using System.Threading;

В C# каждый поток – это метод. Поэтому создаём класс с нужным методом. Самый простой вариант: void MyThreadFunction() { … }.

Запуск потока выглядит так:

Thread thr = new Thread(MyThreadFunction);thr.Start();

После вызова Start() управление возвращается сразу, но новый поток уже работает параллельно. Если метод не возвращает значение – значит, его нет куда отправить после запуска.

Поток с параметром

Можно определить метод, принимающий объект:

void ThreadFunction(Object input) { … }

Это удобно, когда при создании потока нужно передать данные. Любой класс наследует Object, поэтому можно передавать любой объект.

Простой пример с двумя потоками

Ниже показан код программы, где главный поток выводит трижды «Это главный поток программы!», а дочерний – аналогично «Это дочерний поток программы!»:

using System;using System.Threading;namespace ThreadsExample{ class Program { static void Main(string[] args) { Thread thread = new Thread(ThreadFunction); thread.Start(); int count = 3; while (count > 0) { Console.WriteLine("Это главный поток программы!"); --count; } Console.Read(); } //Метод потока static void ThreadFunction() { int count = 3; while (count > 0) { Console.WriteLine("Это дочерний поток программы!"); --count; } } }}

Обратите внимание: метод потока объявлен static, чтобы его можно было вызвать из главного потока. Запускайте программу несколько раз – порядок вывода меняется, ведь планировщик ОС распределяет время процессора случайным образом.

Создание множества одинаковых потоков

Если все потоки выполняют одни и те же действия, можно использовать одну функцию. Пример создания 10 потоков в цикле:

using System;using System.Threading;namespace SomeThreadsExample{ class Program { static void Main(string[] args) { for (int i = 0; i < 10; ++i) { Thread thread = new Thread(ThreadFunction); thread.Start(); } Console.WriteLine("Создание потоков завершено!"); Console.Read(); } static void ThreadFunction() { Console.WriteLine("Я поток!"); } }}

Таким образом, 10 потоков используют одну и ту же функцию.

Потоки с разными действиями

Чтобы каждый поток делал что-то уникальное, можно либо создать разные функции, либо использовать один метод с параметром. Первый вариант:

using System;using System.Threading;namespace SomeThreadsExample{ class Program { static void Main(string[] args) { Thread thread1 = new Thread(ThreadFunction1); thread1.Start(); Thread thread2 = new Thread(ThreadFunction2); thread2.Start(); Console.Read(); } static void ThreadFunction1() { Console.WriteLine("Это первый поток!"); } static void ThreadFunction2() { Console.WriteLine("Это второй поток!"); } }}

Второй способ – один метод с булевым флагом:

using System;using System.Threading;namespace SomeThreadsExample{ class Program { static void Main(string[] args) { Thread thread1 = new Thread(ThreadFunction); thread1.Start(true); // первый поток Thread thread2 = new Thread(ThreadFunction); thread2.Start(false); // второй поток Console.Read(); } static void ThreadFunction(Object input) { bool flag = (bool)input; if (flag) Console.WriteLine("Это первый поток!"); else Console.WriteLine("Это второй поток!"); } }}

Синхронизация данных

В

Рекомендуем:

Новости
«Газпром-Медиа Холдинг» укрепил позиции в рейтинге «ТОП-1000 российских менеджеров»: 44 представителя в 2026 году
«Газпром-Медиа Холдинг» вошел в топ-50 лучших управленческих команд (сегмент «медиа и креативные индустрии») по итогам ежегодного рейтинга «ТОП-1000 российских менеджеров», который формируется Ассоциацией менеджеров при поддержке ИД «Коммерсантъ».
Дата публикации: 17.09.2026
«Ростелеком» обеспечил высокоскоростным интернетом деревню Ростилово
В Грязовецком округе Вологодской области стало заметно ближе к стабильной связи: «Ростелеком» завершил строительство распределительной оптической сети в деревне Ростилово, расположенной всего 10 км от административного центра округа.«Работы были выполнены и в многоквартирных домах, и в частном секторе.
Дата публикации: 17.09.2026
1234...
Статьи
МегаФон стал партнёром финансовой платформы Банки.ру
1 июня 2023 МегаФон и финансовая платформа Банки.ру (АО «Цифровые технологии») запускают партнёрство. Первый совместный проект позволит предоставить клиентам доступ к финансовым предложениям любого российского банка?участника платформы, независимо от наличия его отделения поблизости.
Автор: prteammf
Дата публикации: 30.07.2023
«МегаФон Облако» поможет учебным заведениям совершенствовать образовательный процесс
14 июня 2023 МегаФон предоставил виртуальную инфраструктуру Институту развития образования Свердловской области. Преподаватели, сотрудники и слушатели образовательного учреждения получили дополнительные возможности для развития дистанционных программ в безопасной облачной среде.
Автор: prteammf
Дата публикации: 30.07.2023
МегаФон разработает систему экомониторинга морской акватории Камчатского края
23 июня 2023 МегаФон стал партнёром Правительства Камчатского края в области обеспечения экологической безопасности морской среды. Оператор поможет внедрить технологии мониторинга для сохранения и восстановления морской экосистемы, а также предотвращения возможных природных и техногенных катастроф.
Автор: prteammf
Дата публикации: 30.07.2023
1234...
Вопросы
Отзывы
Информация
Разработка программ и автоматизация вашего бизнеса это основные направления нашей компании. Наше основное отличие это доступность и качество автоматизации.

Copyright © 2026
www.softbusiness.net
Контакты
Написать в отдел технической поддержки пользователей