C# 的线程是在用户级还是内核级创建的?

2023-11-26

最近在研究操作系统,遇到了这个问题。

线程是在C#用户级还是内核级创建的,比如:

Thread mythread=new Thread(ThreadStart(something));

据我所知,内核级CPU密集型线程的进程可以比用户级别的运行速度更快。因为《现代操作系统》一书中说“用户级线程的调度不会陷入内核,这就是为什么它们比内核级线程更轻量级”。
所以我认为用户级线程不能在不同的cpu上运行,这需要捕获到内核中。

在linux中,创建的线程是pthread_create是内核级别的。所以我很好奇.Net C# 的特性。


这是 UNIX 术语,在 Windows 上你会说“光纤或线程”。术语“绿色线程”也是“用户线程”的一种非常常见的说法。

这不是由 C# 或 CLR 决定的,而是由CLR host这决定了这一点。

主机是将 CLR 与操作系统或主机进程结合起来的粘合剂。针对 Silverlight、.NET Compact、.NETCore、Xbox、Windows Phone、Hololens 等的程序始终具有自定义主机来适应目标操作系统。 IIS 和 SQL Server 是非托管程序的常见示例,它们具有自定义主机以允许托管代码执行,分别是 ASP.NET 和 CLR 存储过程。许多其他程序允许使用自定义主机使用 C# 编写脚本,AutoCAD 就是典型的示例。

所以CLR本身并不创建线程,它要求宿主来创建线程。这ICLRTask and ICLR任务管理器接口可以完成这项工作。线程池也是主机的职责,ICorThreadpool接口.

因此,从形式上来说,你是否会得到纤维或线是未知的。值得注意的是,这些接口是应 SQL Server 团队的请求添加的。他们当时在光纤上投入了大量资金,并希望能够选择在光纤上执行 CLR 存储过程。一切都完成了,但大约在同一时间,2000 年代初的多核革命扰乱了这一局面。他们实际上并没有发货。我不知道有任何主机使用光纤,尽管您永远无法确定自定义托管是否常见。

因此,可以非常安全地假设您将获得“内核线程”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 的线程是在用户级还是内核级创建的? 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 内联 JavaScript 正则表达式更快吗?

    使用 RegExp 对象还是内联样式更好 为什么 根据 ES3 规范 它们略有不同 因为文字语法 regex 将创建一个RegExp初始扫描时的对象 正则表达式文字是 输入元素被转换为 RegExp 对象 第 15 10 节 当它 被扫描
  • 循环遍历 DataGridView 单元格

    我正在创建一个生成条形码然后打印运输标签的程序 我有一个功能 允许用户将电子表格上传到数据网格视图中 列名称之一是 跟踪号码 我希望能够循环遍历具有跟踪号码的每个单元格 然后在名为 条形码 的列中的新单元格中生成条形码 我知道有一个循环函数
  • 如何从 Capybara 和 ChromeDriver 中拖动 jQuery 滑块手柄?

    我可以执行以下代码来移动滑块手柄 但浏览器中触发的事件没有发生 page execute script Q slider handicap slider values 1 30 这正确地将右侧手柄设置为 30 但我需要它的行为就像我实际上拿
  • JQuery Mobile textarea:如何使用“rows”属性?

    我想使用 JQuery Mobile 动态生成具有不同行数的文本区域 我打算为此使用淘汰赛 将数据绑定到rows属性 例如 这里 http jsfiddle net j7b9A 2
  • 删除 .NET RichTextBox 中的特定行

    如何删除 RichTextBox 中的特定文本行 另一个解决方案 private void DeleteLine int a line int start index richTextBox GetFirstCharIndexFromLin
  • 如何使用 RLMArray 保存数组

    注意 我对 Realm 和 Swift 相当陌生 所以请原谅我不理解的任何明显的事情 我有一个正在工作的 UITableView 我计划用任务填充它 我希望用户能够根据需要添加和删除任务 因此我无法对任务进行硬编码 并且我希望在应用程序启动
  • 返回 JSONP 的 Restful api 的节点 HTTP 请求

    我正在尝试使用node js 对restful API 进行服务器端调用 JSONP JS 函数内的 JSON 容器 的返回返回错误 这似乎是节点 http get options callback API 的核心 节点或任何模块可以从 J
  • Android 音频编程噩梦 - soundpool、audiotrack arrghh?

    我构建了一个简单的音乐音序器 Android 应用程序 可以播放多个音频文件 最初我使用 SoundPool 来播放 mp3 文件 它在 2 3 4 上与旧的 HTC Droid Incredible 完美配合 然后我在运行 4 3 的 G
  • JPA多对多关系导致无限递归和堆栈溢出错误

    我正在开发一个 EclipseLink 项目 其中一个用户可以 关注 另一个用户 就像在社交媒体网站上一样 我有这个设置User实体 引用一个名为users 其中有一个 关注者 列表 关注该用户的用户 和另一个 关注 列表 该用户正在关注的
  • ASP.NET WSAT(网站管理工具)和自定义会员资格提供程序

    我正在构建一个 ASP NET MVC 应用程序 它将具有自定义角色和成员资格提供程序 我一直在研究管理工具来节省我们一些时间 WSAT已经横穿了我的道路 一眼看上去不错 都是开源的 而且很简单 如果不行我可以自己修复 第一个问题是 你们中
  • 为什么 MobX v6.x 在 React with Typescript 中不能按预期工作?

    我目前正在编写一个 React 应用程序 它应该能够在任何可观察到的值发生变化时重新渲染组件 问题是我无法得到email如果发生变化则重新渲染 store ts export class ExampleStore observable em
  • RewriteRule - 两个参数,但最后一个参数是可选的

    我无法重写以包含两个参数 但最后一个参数是可选的 例如 http www mywebsite com friends jamie 正斜杠也应该是可选的 这应该与此相同 http www mywebsite com friends php n
  • 隐藏奇怪的不需要的 Xcode 日志

    使用 Xcode 8 并创建新的空白项目时 运行应用程序时会出现以下日志 2016 06 13 16 33 34 406093 TestiOS10 8209 100611 bundleid com appc TestiOS10 enable
  • 在数据库中的任意位置查找值

    给定一个数字 我如何发现它可以在哪个表和列中找到 我不在乎它是否快 它只需要工作 这可能对你有帮助 来自纳拉亚纳 维亚斯 它搜索给定数据库中所有表的所有列 我以前用过它并且有效 这是上面链接中的存储过程 我所做的唯一更改是用临时表替换表变量
  • 有没有办法自动占据WrapPanel中的空白区域?

    WrapPanel 的子级按顺序填充 如所附屏幕截图所示 因此 Panel根据每个孩子的身长 制作了较长的空白 如何利用空白空间重新排列孩子们 到目前为止 似乎只有很少的人使用 WrapPanel 并且没有足够的示例 有一些自动的方法吗 或
  • EXECUTE 后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数

    我收到有关提交和回滚的异常 但不确定我的存储过程到底出了什么问题 我已阅读其他此类问题的答案 但无法找到提交计数到底在哪里混乱 所以 这是我使用的存储过程 this is a procedure used for the purge uti
  • 如何配置 leiningen 以使用最新的 Clojure 版本来在项目之外启动 repl?

    当我为特定项目启动 clojure repl 时 对于 leiningen 来说足以在具体中指定正确的 clojure 版本项目 clj如上所述的文件here 但是当我在项目之外启动 repl 时 旧版本就会启动 就我而言 旧版本是1 5
  • Airflow安装成功,但无法运行

    C Python27 Scripts gt airflow initdb airflow 不被识别为内部或外部命令 可运行的程序或批处理文件 C Python27 Scripts gt 气流初始化 airflow 不被识别为内部或外部命令
  • 如何从 Hibernate MetadataSources 发现完全限定的表列

    我有一个实体 我有一个实体Class
  • C# 的线程是在用户级还是内核级创建的?

    最近在研究操作系统 遇到了这个问题 线程是在C 用户级还是内核级创建的 比如 Thread mythread new Thread ThreadStart something 据我所知 内核级CPU密集型线程的进程可以比用户级别的运行速度更