C# Многопоточность для новичков
Обычно, начинающие программисты, создавая свои программы, пишут код, который выполняется в одном потоке. Это означает, что для выполнение последующего оператора, необходимо дождаться завершения предыдущего.
Но среда .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-е требование к видео-курсу, что бы понятный был даже полным «чайникам».
Ну и на последок, 3-е пожелание, это цена, подещевле бы, и качественный урок.
Абсолютно всем отписавшим спасибо! =)
Посмотрите у нас на сайте есть такой курс. Или вас интересуют продающие элементы?