进程、线程、多线程

1.什么是进程?

   进程是系统中正在运行的一个程序,程序一旦运行就是进程。

进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。

           一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。线程与进程的一个主要区别是,统一进程内的一个主要区别是,同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。

示例:任务管理器中可看,一个个应用都代表一个 进程

 

 

 

 

 

 

 

 

 

 

 2.什么是线程?

线程是操作系统进行运算调度的最小单位。

进程在执行任何一个 操作或者响应,都是由线程去完成的,进程包含线程,线程一定属于进程,进程和线程之间是一对多的关系

3.什么是多线程?

一个进程里面有多个执行流并发执行。比如一个人既可以某一段时间内即看电视有吃东西,每个动作类似于线程,在同一段时间内做不同的事,并且还可以进行信息共享。

4.任何实现单线程、多线程?单线程跟多线程之间有什么区别?

以下实现都基于C#进行实现。

UI界面展示:

 

计算耗时方法代码:

public void DoSomething(int n)
        {
            var threadId = Thread.CurrentThread.ManagedThreadId;

            Console.WriteLine($"button1_Click{n} ==》线程ID:{threadId} ==》当前时间:{DateTime.Now.ToLongTimeString()} start......");

            var num = 0;
            for (int i = 0; i < 1_000_000_000; i++)
            {
                num += i;
            }
            Console.WriteLine($"button1_Click{n} ==》线程ID:{threadId} ==》当前时间:{DateTime.Now.ToLongTimeString()} end......");

        }

  同步方法代码:

//同步方法
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++)
            {
                this.DoSomething(i);//执行耗时方法
            }
        }

  异步多线程方法代码:

//异步多线程方法
        private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++)
            {
int k = i; var task=Task.Run(() => { this.DoSomething(k); });//执行耗时方法

} }

  同步方法跟异步多线程方法执行后效果对比:

控制台数据结果:

 

 

 

CPU占用资源结果:

 

结果分析:

从执行结果来看,总结几点

1.同步比异步执行时间更长,同步只有一个线程参与计算(主线程),由于主线程参与计算,导致UI界面卡顿,计算完成后主线程闲置,UI界面不卡顿,

异步执行时间短,界面不卡顿,主线程闲置,启用五个线程参与计算,效率高,但占用CPU资源较多。

2.同步符合正常程序逻辑,有序执行,异步执行顺序是无序的,执行顺序是有CPU调度决定。

3.从执行时间来看,单线程执行时间为16582ms,启用五个线程执行时间为3460ms,以正常思维来看,一个线程执行16582ms,五个线程执行应该是3316ms才对,并没有起到五倍的效率。

原因有两点:1.资源是有限的 2.线程调度会有损耗

 

 

5.总结

同步单线程方式执行效率低,界面卡顿,用户体验性不太好,占用CPU资源少。

异步多线程方式执行效率高,界面不卡顿,用户体验性较好,占用CUP资源多。

有时候使用多线程并不是越多越好,应酌情使用。

posted @ 2019-05-26 16:16  *小嘻嘻*  阅读(388)  评论(0编辑  收藏  举报