扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
进程:进程是一个程序运行时,占用全部计算资源的总和,指在系统中正在运行的一个应用程序;程序一旦运行就是进程;或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。
线程:线程是程序执行流的最小单位,系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。任何操作都是由线程完成的;线程是依托于进程存在的,一个进程可以包含多个线程;线程也可以有自己的计算资源;
进程——资源分配的最小单位,线程——程序执行的最小单位。
多线程:多个执行流同时运行。
(1) CPU太快了,分时间片–上下文切换(加载环境–计算–保存环境)微观角度,一个核同一时刻只能执行一个线程;宏观的来说是多线程并发
(2) 名CPU多核可以独立工作,例如我们常说的 “4核8线程”–其中核是物理的核 8线程是指虚拟核,并不是上述我们所说的线程。
Thread:是c#语言对线程对象的封装
下面我们可以通过一个示例看一下,分别执行5次
1.同步方法同步方法
异步方法
当我们调用同步方法时,程序是按照顺序执行,而下面的异步方法则是无序的,且执行速度也比较快。
由上我们也可以看出同步和异步多线程方法的特点
下图可以清楚看到资源换时间的情况;
从上面的示例中我们使用了异步多线程方式解决了很多问题,但也发现了一个特殊情况,异步是无序的,这时候我们如果想要控制顺序要怎么做呢。这个时候我们就可以使用回调的方式。
首先我们想在计算完成后,在完成后续动作,当我们在BeginInvoke中设置后续两个参数为null,可以看到下图的执行结果,我们的计算明明还没有完成,确提示我们已经完成了,只是主线程完成了。肯定不符合我们的结果。
这时候我们把鼠标放到BeginInvoke上可以发现框架已经帮我们提供好了异步回调AsyncCallback
我们可以看到AysncCallback是一个参数为IAsyncResult类型的委托
接下来我们修改代码把AsyncCallback传进来
这时我们再看执行结果,就可以看到我们结果实在最后输出的。
进行到这里你会想知道这是为什么呢,这个步骤是怎么完成的,callback的参数ia是怎么回事?
当我们继续把鼠标方法BeginInvake上,我们会发现它其实是一个IAsyncResult类型
你会发现这不是和上面AsyncCallback的参数ia是一样的吗,接下来我们做个验证
结果返回True
这时我们可以理解为,.net框架帮我们做了一个小封装,在执行BeginInvoke的时候会去申请一个线程,线程会先完成委托的调用,执行完成后会产生一个IAsyncResult结果,最后把这个结果作为参数传递给AsyncCallback委托,这也就能解释为什么BeginInvoke结果类型和AsyncCallback的参数类型是一致的。
接下来我们看BeginInvoke的第三个参数,这时我们随便传入一个“hao”字符串。那么在AsyncState时我们就可以得到,这是为了我们在回调的时候如果想传递某些信息时使用。
这种情况我们可以使用asyncResult.IsCompleted来进行判断委托是否执行完成。在执行完成之后给用户指定提示信息,如下为文件上传操作的示例
但是这么写是由弊端的就是会有延迟,也会卡主界面。优点就是我们可以在等待的时候做一些其它操作,例如给用户一些友好提示等。
2.asyncResult.AsyncWaitHandle.WaitOne()信号量,即时等待
Console.WriteLine("Do Something Else.....");
Console.WriteLine("Do Something Else.....");
Console.WriteLine("Do Something Else.....");
asyncResult.AsyncWaitHandle.WaitOne();//等待任务的完成
也可以给asyncResult.AsyncWaitHandle.WaitOne(1000);设置等待时间做超时用,也叫做限时等待。
3.action.EndInvoke()action.EndInvoke(asyncResult);
EndInvoke可以不仅等待也可以获取返回值,接下来介绍怎么获取返回值。
上述我们使用EndInvoke可以不仅等待也可以获取返回值;如下我们可以看到结果正是我们设置的字符串
EndInvoke也可以写在回调函数里面,方便我们获取其结果值,但只能写一次,写在里面就不可以写在外面了。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流