您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
C# 对进程、线程概念的理解以及多线程与线程异步的区别
 
作者:枯叶蝶
   次浏览      
 2023-5-5
 
编辑推荐:
本文主要讲述了C# 对进程、线程概念的理解以及多线程与线程异步的区别。 希望能为大家提供一些参考或帮助。
文章来自于知乎,由火龙果Linda编辑推荐。

一、概念

进程:

• 进程是操作系统的一个基本概念,可以简单理解为“正在运行的程序” 。

• 进程之间是相互独立的。

• 利用Process类可启动、停止本机或远程进程。

线程:

• 一个进程划分为若干个独立的执行流,每个流都称为一个线程。

• 一个进程中既可以只包含一个线程,也可以同时包含多个线程。

进程与线程的关系如下图例所示:

1、C#中对进程的管理

(1)进程管理的内容:

(2)进程管理类(Process类)

Process类

• 引入System.Diagnostics命名空间

• Using System.Diagnostics

• 利用Process类,可以启动和停止本机进程、获取或设置进程优先级、确定进程状态,获取进程列表和各进程的资源占用情况等。

Process[] myProcesses = Process.GetProcesses( );

• Process类也可查询远程计算机上进程的相关信息

Process[] myProcesses = Process.GetProcesses("192.168.0.1");

(3)启动进程,控制界面

• 启动某个进程

01.设置startInfo属性

02.需要创建Process类的实例

03.关联StarInfo

04.调用Start方法启动该进程

05.等待启动成功

• 控制图形界面

• ProcessWindowStyle枚举指定进程如何显示窗口。

• Normal(正常窗口)

• Hidden(隐藏窗口)

• Minimized(最小化窗口)

• Maximized(最大化窗口

fileName:可执行文件的文件名称(应用程序的名称)

argument:可执行文件的路径(应用程序的路径)

(4)关闭进程

获取进程Handel

Process静态的GetProcessById方法

Process静态的GetProcessesByName方法

• 停止进程

• Kill方法和CloseMainWindow方法

• 前者用于强行终止进程,后者只是请求终止进程

• HasExited属性

• HasExited属性用于判断启动的进程是否已经停止运行

(5)双进程守候

2.C#中对线程的线程的管理

3.C#中线程同步和异步的区别

同步调用会阻塞线程,如果是调用一项繁重的工作(如大量IO操作)可能会让程序停顿很长时间,造成糟糕的用户体验。

(1)任务Task类

• Task在线程池的基础上进行了优化,并提供了更多的API

• ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:

• ThreadPool不支持线程的取消、完成、失败通知等交互性操作;

• ThreadPool不支持线程执行的先后次序;

• 以往,如果开发者要实现上述功能,需要完成很多额外的工作

• Task 类专门擅长异步操作

• 下一小节,会有眼花缭乱的例子来进行异步操作

Task类 对应void方法 Task(Action)

Task<TResult>类 有返回值的方法 Task<TResult>(Func<TResult>)

4.多线程与异步的区别

相同点:多线程和异步操作都可以达到避免线程阻塞的目的。

区别:.net中的异步执行使用的是异步委托,委托将要执行的方法提交到.net线程池,由于线程池中的线程来执行异步方法,异步调用并不是要减小线程的开销,它的主要目的是让调用方法的主线程不需要同步等待这个方法的调用,从而让主线程继续执行他下面的代码。与此同时,系统会通过从线程池取出的一个线程来执行帮助我们将要写的数据发送到设备。由于不需要我们的等待,我们等于同时做了两件事情。这个效果跟自己另外启动了一个线程等待方式的写操作是一样的,异步线程可以令操作系统或.net线程池,系统可以根据吞吐量动态地管理线程池的大小。,

多线程:多线程是顺序执行,因此编程简单,线程的使用会给系统带来上下文切换的额外负担,并且线程间的共享变量也可能造成死锁。

在.net发展过程中,出现过四种可用于异步编程的技术。

很多功能强大的程序都是多线程,打开windows任务管理器,可以看到一个应用程序是由多个线程同时进行工作的。

   
次浏览       
相关文章

深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
相关文档

重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
相关课程

基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程

最新活动计划
SysML和EA系统设计与建模 7-26[特惠]
Python、数据分析与机器学习 8-23[特惠]
软件架构设计方法、案例与实践 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
Linux内核编程及设备驱动 7-25[北京]
 
 
最新文章
.NET Core 3.0 正式公布:新特性详细解读
.NET Core部署中你不了解的框架依赖与独立部署
C# event线程安全
简析 .NET Core 构成体系
C#技术漫谈之垃圾回收机制(GC)
最新课程
.Net应用开发
C#高级开发技术
.NET 架构设计与调试优化
ASP.NET Core Web 开发
ASP.Net MVC框架原理与应用开发
成功案例
航天科工集团子公司 DotNet企业级应用设计与开发
日照港集 .NET Framewor
神华信 .NET单元测试
台达电子 .NET程序设计与开发
神华信息 .NET单元测试