Хотите прямо сейчас получить бесплатный видеокурс по программированию для начинающих?

C# Многопоточность для новичков

Сентябрь 23, 2013

image_560804121430202379429

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

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

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

Рассмотрим следующую консольную программку:

using System;
using System.Threading; //Именно это пространство имен поддерживает многопоточность
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread myThread = new Thread(func); //Создаем новый объект потока (Thread)
 
            myThread.Start(); //запускаем поток
 
            for (int i = 0; i < 10; i++ )
            {
                Console.WriteLine("Поток 1 выводит " + i);
                Thread.Sleep(0);
            }
 
            Console.Read(); //Приостановим основной поток
 
        }
 
        //Функция запускаемая из другого потока
        static void func() 
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Поток 2 выводит " + i.ToString());
                Thread.Sleep(0);
            }

Мы видим, что было импортировано пространство имен using System.Threading; именно в нем содержится класс Thread для работы с потоками. Мы создаем объект потока Thread myThread = new Thread(func); где в конструкторе передаем имя void метода, который будет выполняться в отдельном потоке. Далее методом Start() мы запускаем наш поток.

Итак, что мы имеем: у нас запущен поток, который выполняет функция func(), но помимо этого у нас есть просто цикл, который не будет дожидаться завершения функции func(); а выполниться параллельно. Вот таким образом можно работать с потоками.

Конечно это еще не все, функция func() могла бы принимать параметры и возвращать значения и тогда, такой способ уже не подошел бы. О более сложных вещах поговорим в следующей статье.



2 Комментариев к записи C# Многопоточность для новичков

  1. TamaraCen on 04.01.2015 at 20:48

    Всем здрасте! Заранее извиняюсь если пишу не в том топике…

    Люди добрые и не очень, посоветуйте пожалуйста хороший видео-курс для создания сайтов, или даже скорее одностраничников или как их там нынче называют )))
    Хотелось бы научиться создавать сайты, но даже не понимаю с чего начать, не знаю элементарного, какими программами люди пользуются…

    Видео-курс желательно платный, что бы если, что вопросы можно было позадавать, ну что бы тех. поддержка была хоть какая-то, а то считаю что вопросов будет много ))
    2-е требование к видео-курсу, что бы понятный был даже полным «чайникам».
    Ну и на последок, 3-е пожелание, это цена, подещевле бы, и качественный урок.

    Абсолютно всем отписавшим спасибо! =)

Добавить комментарий для TamaraCen Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Поддержите проект

Хит продаж:

Случайный анекдот

Моя вторая книга

Что это???

Программирование для Android:

Мы вконтакте

Помощь сайту

Понравился сайт? Он сильно нуждается в раскрутке.

Чтобы помочь в раскрутке - опубликуйте ссылку на сайт (или любую его страницу) на любом другом сайте в интернете. Тогда сайт станет чуточку популярнее.

Или просто нажмите на кнопки социальных сетей которые стоят в конце каждой статьи

Вместе мы сможем сделать программирование более популярным и более понятным для всех!

Заранее спасибо!
Артём Кашеваров.