C#异步编程----Thread
一、问题由来
多线程能实现的基础:
1、CPU运行速度太快,硬件处理速度跟不上,所以操作系统进行分时间片管理。这样,宏观角度来说是多线程并发 ,看起来是同一时刻执行了不同的操作。但是从微观角度来讲,同一时刻只能有一个线程在处理。
2、目前电脑都是多核多CPU的,一个CPU在同一时刻只能运行一个线程,但是 多个CPU在同一时刻就可以运行多个线程 。
多线程的优点:
可以同时完成多个任务;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。
多线程的缺点:
1、 内存占用 线程也是程序,所以线程需要占用内存,线程越多,占用内存也越多(每个线程都需要开辟堆栈空间,多线程时有时需要切换时间片)。
2、 管理协调 多线程需要协调和管理,所以需要占用CPU时间以便跟踪线程,线程太多会导致控制太复杂。
3、 资源共享 线程之间对共享资源的访问会相互影响,必须解决争用共享资源的问题。
二、详情
1、无参数
class Program { static void Main(string[] args) { ThreadTest test = new ThreadTest(); //无参调用实例方法 Thread t= new Thread(test.Func2);//此处应该是一个threadStart的委托,此处是语法简化 t.Start(); Console.ReadKey(); } } class ThreadTest { public void Func2() { Console.WriteLine("新线程"); } }
2、有参数
class Program { static void Main(string[] args) { ThreadTest test = new ThreadTest(); //有参调用实例方法,ParameterizedThreadStart是一个委托,input为object,返回值为void Thread t= new Thread(new ParameterizedThreadStart(test.Func1)); t.Start("有参的实例方法"); Console.ReadKey(); } } class ThreadTest { public void Func1(object o) { Console.WriteLine(o); } }