windows查询每个线程占用的内存_C#多线程

一、基本概念

1、进程

首先打开任务管理器,查看当前运行的进程:

4eeb3f88c174d31e1fcd3b55d4579beb.png

从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢?

进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。是应用程序的一个运行例程,是应用程序的一次动态执行过程。

二、线程

在任务管理器里面查询当前总共运行的线程数:

b5af57da4cdee16993f6e2e2221cb887.png

线程(Thread)是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。线程主要是由CPU寄存器、调用栈和线程本地存储器(Thread Local Storage,TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。

二、多线程

多线程的优点:可以同时完成多个任务;可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。

那么可能有人会问:为什么可以多线程执行呢?总结起来有下面两方面的原因:

1、CPU运行速度太快,硬件处理速度跟不上,所以操作系统进行分时间片管理。这样,从宏观角度来说是多线程并发的,因为CPU速度太快,察觉不到,看起来是同一时刻执行了不同的操作。但是从微观角度来讲,同一时刻只能有一个线程在处理。

2、目前电脑都是多核多CPU的,一个CPU在同一时刻只能运行一个线程,但是多个CPU在同一时刻就可以运行多个线程。

然而,多线程虽然有很多优点,但是也必须认识到多线程可能存在影响系统性能的不利方面,才能正确使用线程。不利方面主要有如下几点:

(1)线程也是程序,所以线程需要占用内存,线程越多,占用内存也越多。

(2)多线程需要协调和管理,所以需要占用CPU时间以便跟踪线程。

(3)线程之间对共享资源的访问会相互影响,必须解决争用共享资源的问题。

(4)线程太多会导致控制太复杂,最终可能造成很多程序缺陷。

当启动一个可执行程序时,将创建一个主线程。在默认的情况下,C#程序具有一个线程,此线程执行程序中以Main方法开始和结束的代码,Main()方法直接或间接执行的每一个命令都有默认线程(主线程)执行,当Main()方法返回时此线程也将终止。

一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。在C#中,线程是使用Thread类处理的,该类在System.Threading命名空间中。使用Thread类创建线程时,只需要提供线程入口,线程入口告诉程序让这个线程做什么。通过实例化一个Thread类的对象就可以创建一个线程。创建新的Thread对象时,将创建新的托管线程。Thread类接收一个ThreadStart委托或ParameterizedThreadStart委托的构造函数,该委托包装了调用Start方法时由新线程调用的方法,示例代码如下:

Thread thread=new Thread(new ThreadStart(method));//创建线程

thread.Start(); //启动线程

上面代码实例化了一个Thread对象,并指明将要调用的方法method(),然后启动线程。ThreadStart委托中作为参数的方法不需要参数,并且没有返回值。ParameterizedThreadStart委托一个对象作为参数,利用这个参数可以很方便地向线程传递参数,示例代码如下:

Thread thread=new Thread(new ParameterizedThreadStart(method));//创建线程

thread.Start(3); //启动线程

创建多线程的步骤:
1、编写线程所要执行的方法
2、实例化Thread类,并传入一个指向线程所要执行方法的委托。(这时线程已经产生,但还没有运行)
3、调用Thread实例的Start方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定

2.1 System.Threading.Thread类

Thread类是是控制线程的基础类,位于System.Threading命名空间下,具有4个重载的构造函数:

96be17d2f242c0bd7c227f0100d08707.png

ThreadStart是一个无参的、返回值为void的委托。委托定义如下:

public delegate void ThreadStart()

通过ThreadStart委托创建并运行一个线程:

b60352efa3a2d619042fd10bc576ca9f.png

运行结果

590babd1f678e7d8ebd61e1b4f65742b.png

除了可以运行静态的方法,还可以运行实例方法

b98dea87e64b6f75aa5ab5f4469dd223.png

运行结果:

d97db1f2d95664f6cbe6bacc92017a23.png

如果为了简单,也可以通过匿名委托或Lambda表达式来为Thread的构造方法赋值

06764724c03ade95e0da4f879d6a734a.png

运行结果:

f35c827c5dfb092fa8b981363354817e.png

ParameterizedThreadStart是一个有参的、返回值为void的委托,定义如下:

public delegate void ParameterizedThreadStart(Object obj)

20da5095c8138c967966bbe60784bbba.png

注意:ParameterizedThreadStart委托的参数类型必须是Object的。如果使用的是不带参数的委托,不能使用带参数的Start方法运行线程,否则系统会抛出异常。但使用带参数的委托,可以使用thread.Start()来运行线程,这时所传递的参数值为null。

191ff04a5b796cd97773416698262e6f.png

aad09cc55f0270ae5de929e937f3e86b.png

本文转载自博客园:https://www.cnblogs.com/dotnet261010/p/6159984.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 录屏软件 按键,linux下常用的截图、录屏工具

linux下常用的截图、录屏工具(2010-01-05 10:47:21)由于和老公一起做一个百度俱乐部的小项目,在编写测试文档时要使用截图、录屏的小工具,于是展开搜索什么工具比较好使。录屏:在linux下常用的录屏工具有5种,可以baidu或者google下…

实体类blob类型_Mysql的数据类型和JPA的实体类

​MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型Int,4字节,(-2147483648,2147483647), (0,4294967295)BIGINT,8 字节,(-9223372036854775808,92…

python升级版本命令_如何在python中安装和配置kivy库

kivy是python的UI开发工具包,主要关注用户界面显示效果,可以在Android、IOS、Linux、OS X和Windows上运行。如果python开发中使用kivy,需要安装和配置相关文件和依赖模块。1、在电脑左下角打开开始菜单,输入cmd打开终端窗口在电脑…

linux系统如何安装bt5,BT5硬盘安装(多系统linux + win + BT5)

BT5硬盘安装(多系统linux win BT5)实际上,Win BT5的安装不是很困难,但据我所知我也有两种: 1如官方说明中所述,工具unetbootin,运行unetbootin,在“ CD映像”中,选择BT5的ISO,在“类型”中选…

android主板读取vga线数据_智锐通掘金新基建上新系列之3.5quot; 与ATX工业主板图鉴...

4月份,工信部正式公布了《工业互联网体系架构(版本2.0)》!5G、大数据、人工智能、区块链、边缘计算等新技术加速融入并不断拓宽工业互联网的内涵与赋能潜力。新一代信息技术为驱动的数字浪潮正在深刻重塑经济社会各个领域的当前,智锐通科技聚…

Python 爬虫之下载视频(五)

爬取第三方网站视频 文章目录 爬取第三方网站视频前言一、基本情况二、基本思路三、代码编写四、注意事项(ffmpeg)总结 前言 国内主流的视频平台有点难。。。就暂且记录一些三方视频平台的爬取吧。比如下面这个: 一、基本情况 这次爬取的方…

c语言json映射,GitHub - xujun621/cson: 基于C语言的json数据映射解析库

CSON基于cJSON,运行于C语言平台的json-struct模型解析工具简介CSON是一个简单的cJSON的二次封装,相比于使用原生cJSON一层一层解析的方式,CSON采用模型映射的方式,使用模型将结构体的特征进行描述,然后根据模型,将json…

cad渐变线怎么画_怎么画压力线和支撑线

支撑线与压力线的基本画法画法:将两个或两个以上的相对低点连成一条直线即得到支撑线将两个或两个以上的相对高点连成一条直线即得到压力线用法:1.支撑线和压力线的作用支撑线又称为抵抗线。当股价跌到某个价位附近时,股价停止下跌&#xff0…

c语言为什么要建项目,一个C语言小项目为什么都说牛逼

原标题:一个C语言小项目为什么都说牛逼意在鼓励C语言学者。更有兴趣,学习更富有创业和乐趣!推荐加学习交流群:658807522 可以在一起学习交流,既是参赛选手,又是学者,也可以先学习再参赛&#xf…

单片机c语言 oxfe,AVR单片机入门及C语言高效设计实践(五)

ATMEAGl6L的中断系统什么是“中断”?顾名思义中断就是中断某一工作过程去处理一些与本工作过程无关或间接相关或临时发生的事件,处理完后,则继续原工作过程。比如:你在看书,电话响了,你在书上做个记号后去接电话&…

android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...

Vector矢量图在Android项目中的利用愈来愈广泛,但是如果你想用Android Studio自带的工具将SVG图片转化成Vector资源文件却是相当麻烦,首先能支持的SVG规范较少,其次操作流程麻烦。而另外一种方式就是通过http://inloop.github.io/svg2android…

android微信朋友圈相册背景,Android 仿微信朋友圈图片拖拽返回

目前的app的动画效果是越来越炫了,很多主流app的图片预览返回都有类似功能,比较常见的是ios自带相册,微信朋友圈等等。自己项目中也有类似功能,最近整理了一下这个功能的代码,做个笔记记录,有兴趣的朋友可以…

erp采购总监个人总结_《用友 ERP 培训教程:财务核算/供应链管理/物料需求计划》ERP概述 : ERP基础知识...

第1章 ERP概述本章重点_- _ERP概要_- _ERP实施成功的必要条件_- _ERP几个重要的名词解释用友ERP-U8(V8 .72)简介及功能按钮说明1.1 ERP基础知识1.1.1 ERP基本概念ERP(Enterprise Resources Planning)中文叫做企业资源规划&…

soc 设计soc设计 uml实务手册_企业内训“软件需求设计建模方法学全程实例剖析”训练方案(2020年)...

※训练介绍※利润需求-设计。软件开发中,需求是解决“系统怎样好卖”的问题,设计是解决“降低开发成本”的问题。要迈向“低成本制造好卖的产品”的境界,并非喊喊口号就能达到。口号:我们只做最重要的需求,尽快把系统推…

鸿蒙分布式通讯子系统,【鸿蒙】分布式通信子系统--让华为手机发现Hi3861开发板...

目录:工具步骤运行结果工具:1. 华为手机,需要有多设备协同功能。在设置->更多连接->多设备协同,查看是否有多设备协同功能,此功能使用的就是coap协议。2. Hi3861开发板步骤:1. 修改源码,…

winform 统计大量数据重复的元素个数_DAY10——推断统计之概率与概率分布:常见的离散型概率分布...

「数学期望——某件事情大量发生之后的平均结果」----------------分割又分割----------------------昨天文章排版出了问题,今天重新排版。数据的三个统计维度:集中程度、离散程度、分布情况。集中程度:期望离散程度:方差、标准差…

xss跨站脚本攻击_常见攻击之xss跨站脚本攻击

前言随着互联网的不断发展,web应用的互动性也越来越强。相应的,在用户体验提升的同时安全风险也会跟着有所增加。今天,我们就来讲一讲web渗透中常见的攻击方式之一,XSS攻击。首先需要了解他是如何工作的,以及我们如何利…

缺陷调研报告_质量零缺陷 | 打造极致产品的质量管理之道

质量是政治质量是生命质量是效益为强化全员“零缺陷”质量意识,坚决打赢质量提升攻坚战,现开设“质量零缺陷”专栏,着力宣传全院各单位在加强质量管理,落实零缺陷理念等方面的典型做法和质量故事。今天为大家带来的是曾获得“全国…

oracle 从右往左截取_截取GIF、调分辨率、快捷拨号,三星这些功能让人爱不释手...

昨天三星5G手机正式上市后,今天又爆出苹果被三星拒绝后要转向华为购买5G芯片,苹果如此操作是真的走投无路了?再看看吃瓜群众们,吐槽一波接一波。​一会儿,嫌弃三星信号频段不完全,10nm的工艺制程太差。一会…

html中表单的校验的插件,功能强大的jquery.validate表单验证插件

本文实例为大家分享了jquery.validate表单验证的使用方法,供大家参考,具体内容如下1 、表单验证的准备工作在开启长篇大论之前,首先将表单验证的效果展示给大家。1.点击表单项,显示帮助提示2.鼠标离开表单项时,开始校验…