浅谈C#中的单线程与多线程问题
2013-06-19 19:34
267 查看
1、单线程与多线程的区别,以及多线程的好处
单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到。
多线程,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于操作一次需要网络的返回信息 花的时间比较长,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。 而如果用多线程就可以在等待期间 加入其他的搜索,然后等待,这样可以提高效率。
2、下面通过举例来实现单线程与多线程之间的内容,大家可以给例子当中看出单线程与多线程之间的区别,这个也看各自的电脑的运行的速度,可能会因各自的电脑的运行的速度有关,因而大家可能会看到不同的线程运行结果
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//单线程的内容
/*Stopwatch stwatch = new Stopwatch();
stwatch.Start();
PrintNumb();
PrintStr();
stwatch.Stop();
Console.WriteLine(stwatch.Elapsed.TotalMilliseconds);
Console.ReadKey();*/
//Thread 这也许是最复杂的方法,但它提供了对线程的各种灵活控制。首先你必须使用它的构造函数创建一个线程实例,它的参数比较简单,只有一个ThreadStart 委托
//多线程的内容
ThreadStart printnumb = new ThreadStart(PrintNumb);
Thread readnum = new Thread(printnumb);
ThreadStart printstr = new ThreadStart(PrintStr);
Thread readstr = new Thread(printstr);
//接下来我们结合线程的ThreadState属性来了解线程的控制。ThreadState是一个枚举类型,它反映的是线程所处的状态。当一个Thread实例刚创建时,它的
//ThreadState是Unstarted;当此线程被调用Start()启动之后,它的ThreadState是 Running;
Stopwatch star = new Stopwatch();
star.Start();
readnum.Start();
readstr.Start();
while (true)
{
if (readstr.ThreadState == System.Threading.ThreadState.Stopped && readnum.ThreadState == System.Threading.ThreadState.Stopped)
{
star.Stop();
Console.WriteLine(star.Elapsed.TotalMilliseconds);
break;
}
}
Console.ReadKey();
}
public static void PrintNumb()
{
for (int i = 0; i < 1000; i++)
{
Console.WriteLine(i);
}
}
public static void PrintStr()
{
for (int i = 0; i < 1000; i++)
{
Console.WriteLine("输出的是" + i.ToString());
}
}
}
}
单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到。
多线程,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于操作一次需要网络的返回信息 花的时间比较长,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。 而如果用多线程就可以在等待期间 加入其他的搜索,然后等待,这样可以提高效率。
2、下面通过举例来实现单线程与多线程之间的内容,大家可以给例子当中看出单线程与多线程之间的区别,这个也看各自的电脑的运行的速度,可能会因各自的电脑的运行的速度有关,因而大家可能会看到不同的线程运行结果
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//单线程的内容
/*Stopwatch stwatch = new Stopwatch();
stwatch.Start();
PrintNumb();
PrintStr();
stwatch.Stop();
Console.WriteLine(stwatch.Elapsed.TotalMilliseconds);
Console.ReadKey();*/
//Thread 这也许是最复杂的方法,但它提供了对线程的各种灵活控制。首先你必须使用它的构造函数创建一个线程实例,它的参数比较简单,只有一个ThreadStart 委托
//多线程的内容
ThreadStart printnumb = new ThreadStart(PrintNumb);
Thread readnum = new Thread(printnumb);
ThreadStart printstr = new ThreadStart(PrintStr);
Thread readstr = new Thread(printstr);
//接下来我们结合线程的ThreadState属性来了解线程的控制。ThreadState是一个枚举类型,它反映的是线程所处的状态。当一个Thread实例刚创建时,它的
//ThreadState是Unstarted;当此线程被调用Start()启动之后,它的ThreadState是 Running;
Stopwatch star = new Stopwatch();
star.Start();
readnum.Start();
readstr.Start();
while (true)
{
if (readstr.ThreadState == System.Threading.ThreadState.Stopped && readnum.ThreadState == System.Threading.ThreadState.Stopped)
{
star.Stop();
Console.WriteLine(star.Elapsed.TotalMilliseconds);
break;
}
}
Console.ReadKey();
}
public static void PrintNumb()
{
for (int i = 0; i < 1000; i++)
{
Console.WriteLine(i);
}
}
public static void PrintStr()
{
for (int i = 0; i < 1000; i++)
{
Console.WriteLine("输出的是" + i.ToString());
}
}
}
}
相关文章推荐
- Java面试题--多线程、并发及线程的基础问题
- 关于java中多线程的问题的一点思考(什么情况下需要考虑到线程,以及线程安全的问题?)
- 多线程(四)线程的同步之线程安全问题
- 多线程经典问题1——主线程子线程交替问题
- 静态变量、实例变量、局部变量在多线程环境下的线程安全问题 java 多线程
- [置顶] java多线程之多线程的线程安全问题
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
- java线程堆栈问题定位第二讲:多线程中的锁解读
- 设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- 黑马程序员自学笔记————多线程 线程间通信之生产者消费者问题;
- JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决
- C++线程 -- boost::barrier解决多线程分工问题
- iOS多线程全套:线程安全问题,GCD的使用,NSOperation的使用
- 多线程——用创建线程的两种方式分别解决经典窗口卖票问题
- java一道多线程题,子线程循环10次,主线程接着循环100次,如此循环50次的问题
- Java 中的多线程-两种创建方式,定时器的应用,线程的安全问题可以用银行转账来说明
- 黑马程序员------多线程(No.2)(死锁、线程间通信、生产者消费者问题)
- winform 利用 多线程 处理窗体假死,利用 Invoke BeginInvoke 处理子线程调用 UI 控件报错的问题
- 多线程 生产者消费者模式 线程之间的通讯问题