0

0

c# 线程和进程的区别

煙雲

煙雲

发布时间:2026-02-10 10:28:03

|

824人浏览过

|

来源于php中文网

原创

进程是操作系统资源分配的基本单位,拥有独立内存空间和安全上下文;线程是进程内调度最小单元,共享堆内存与全局变量,需同步机制保障线程安全。

c# 线程和进程的区别

进程是操作系统分配资源的基本单位

一个 Process 对应一个独立的内存空间、句柄表和安全上下文。你启动一个 dotnet MyApp.dll,系统就创建一个新进程;再开一个,就是另一个完全隔离的进程。它们之间默认不共享内存,通信得靠 NamedPipeMemoryMappedFileWCF 这类跨进程机制。

常见误区是以为“多开几个控制台窗口跑同一个程序,它们能互相改对方的变量”——不能。每个窗口背后是独立 Processstatic 字段也互不影响。

线程是进程内执行代码的最小调度单元

同一进程里的多个 Thread(或 Task)共享堆内存、全局变量和文件句柄。比如你在 Main 方法里声明一个 static List shared = new();,所有线程都能读写它——但这也意味着必须手动加锁(lockMonitorConcurrentQueue),否则容易出现数据错乱。

注意:.NET 中推荐用 Task 而不是裸 Thread,因为 ThreadPool 会复用线程,避免频繁创建销毁的开销。直接 new Thread 只在需要长时间独占、设置特定优先级或避免被线程池回收时才用。

  • Thread 启动开销大,Task.Run 更轻量
  • UI 线程(如 WinForms/WPF 的主线程)不能被 Thread.Sleep 阻塞,否则界面冻结;要用 await Task.Delay
  • async/await 不一定新建线程,它只是释放当前线程去干别的事,回调时可能回到原线程(尤其 UI 上下文)

看任务管理器就能直观区分

打开 Windows 任务管理器 → “详细信息”页,每一行是一个 Process(比如 devenv.exechrome.exe)。右键 → “转到服务”或“转到进程”,能看到它下面挂了多少个线程(列名是 “线程数”)。这个数字是该进程内所有线程的总和,包括主线程、GC 线程、ThreadPool 线程、Timer 回调线程等。

如果你用 Process.GetCurrentProcess().Threads.Count,拿到的就是当前进程的线程总数,不是你代码里显式 new Thread() 的个数。

BJXSHOP网上购物系统 - 书店版
BJXSHOP网上购物系统 - 书店版

BJXSHOP购物管理系统是一个功能完善、展示信息丰富的电子商店销售平台;针对企业与个人的网上销售系统;开放式远程商店管理;完善的订单管理、销售统计、结算系统;强力搜索引擎支持;提供网上多种在线支付方式解决方案;强大的技术应用能力和网络安全系统 BJXSHOP网上购物系统 - 书店版,它具备其他通用购物系统不同的功能,有针对图书销售而进行开发的一个电子商店销售平台,如图书ISBN,图书目录

下载

什么时候该用进程,什么时候该用线程

选进程:需要强隔离(比如插件沙箱、用户代码执行)、崩溃不能影响主程序、或必须加载不同版本的同一 DLL(如两个插件依赖不同版 Newtonsoft.Json)。

选线程(或 Task):同一业务逻辑并行处理(如批量下载、图像处理)、响应式 UI、I/O 等待期间不阻塞主线程。

特别注意:AppDomain 在 .NET Core/.NET 5+ 已被移除,不能再靠它做隔离——现在只有进程级隔离最可靠。

var p = Process.Start("notepad.exe");
Console.WriteLine($"新进程 ID: {p.Id}");
// 此时 notepad 和当前程序完全无关,杀掉它也不会影响本程序

线程间共享内存是双刃剑:快,但也容易出竞态。别指望“我只读不写”就绝对安全——没有 volatile 或内存屏障,CPU 可能缓存旧值;没加锁的写操作也可能被重排序。真要共享,优先选 ConcurrentDictionary 这类线程安全集合,而不是自己上 lock

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

435

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

543

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

79

2025.09.10

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

922

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

773

2023.11.06

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

85

2025.09.18

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

153

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9万人学习

C 教程
C 教程

共75课时 | 4.6万人学习

C++教程
C++教程

共115课时 | 16.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号