多线程的概念定义这里不再赘述,网上资料一搜一大把。个人觉得为什么使用多线程需要从以下几个方面来理解:
多线程有什么用
- 发挥多核CPU的优势
单核CPU的多线程并不是真正的多线程,同一时间处理器只能处理一段逻辑,其利用线程间上下文切换来实现,频繁的切换势必会导致性能降低。多线程的在多核系统的使用才能真正发挥其优势。
- 防止阻塞
如果单核CPU上运行多线程程序会降低性能,为什么还要使用呢?可以想象,如果都是单线程处理,一个需要等待的线程占用了CPU肯定会整个程序不可用。多线程的价值就是哪怕一个线程阻塞了,也不影响其他线程的处理。
- 任务分解
一个大的任务分解成多个子任务,一定程度上可以加快任务的处理。
C#中创建线程的方式
C#中实现线程应用开发的类都包含在了System.Threading命名空间中,比较常用的是Thread,ThreadPool类
Thread类构造函数作用是创建线程,有两个重载版本,一个带参数,一个不带参数:
public Thread(ThreadStart start);
public Thread(ParameterizedThreadStart start);
ThreadStart或者ParameterizedThreadStart类型的声明如下:
public delegate void ThreadStart();
public delegate void ParameterizedThreadStart(Object obj);
创建线程的步骤:
//创建不带参数的线程(线程所关联的函数没有参数)
ThreadStart myThreadStart=new ThreadStart(myFunction);//把线程要启动的函数传(委托?)进ThreadStart变量去
Thread myThread=new Thread(myThread);//创建线程
myThread.Start();//启动线程
//创建带参数的线程
ParameterrizedThreadStart myThreadStart=new ParameterrizedThreadStart(myFunction);//把线程要启动的函数传(委托?)进ThreadStart变量去
Thread myThread=new Thread(myThread);//创建线程
myThread.Start(obj);//启动线程
但是在手动创建线程的时候不得不考虑几个问题:
- 太多的线程浪费内存资源
- 太多线程有损性能
为了设计和实现可伸缩的、可响应的和可靠的应用程序或组建,线程池是你必须采用的核心技术。
有关线程池,参考002