什么是“线程”(实际上)?

2023-11-30

我一直在努力寻找一个好的定义,并理解什么是thread真的是。

看来我一定错过了一些明显的东西,但每次我读到线程是什么时,它几乎都是一个循环定义,就像“线程是执行线程”或“划分运行任务的一种方式”。呃呃。啊?

从我读到的内容看来,线程并不是真正的某物具体,就像一个过程一样。其实这只是一个概念。根据我对其工作方式的理解,处理器为程序执行一些命令(称为执行线程),然后当它需要切换到处理其他程序时,它会存储state它当前正在某处(线程本地存储)执行的程序的指令,然后开始执行其他程序的指令。来回。这样,线程实际上只是当前正在运行的程序的“执行路径之一”的概念。

与流程不同,流程确实是某种东西——它是资源等的集合。

作为一个定义的例子并没有真正帮助我。 。 。

From 维基百科:

“计算机科学中的线程是执行线程的缩写。线程是程序将自身划分(称为“分裂”)为两个或多个同时(或伪同时)运行的任务的一种方式。线程和进程不同于一个但是,一般来说,线程包含在一个进程内,同一进程中的不同线程共享相同的资源,而同一多任务操作系统中的不同进程则不共享相同的资源。”

那么我说得对吗?错误的?线程到底是什么?

Edit:显然,线程也有自己的调用堆栈,因此这在某种程度上是具体的thing.


线程是一个执行上下文,它是 CPU 执行指令流所需的所有信息。

假设您正在阅读一本书,并且您想立即休息一下,但您希望能够返回并从您停止的确切位置继续阅读。实现此目的的一种方法是记下页码、行号和字数。所以你阅读一本书的执行上下文就是这 3 个数字。

如果你有一个室友,并且她正在使用相同的技术,那么她可以在你不使用这本书时拿走这本书,并从她停止的地方继续阅读。然后您可以将其收回并从原来的位置恢复。

线程以同样的方式工作。 CPU 会给您一种它正在同时进行多项计算的错觉。它通过在每次计算上花费一些时间来实现这一点。它可以做到这一点,因为它为每个计算都有一个执行上下文。就像您可以与朋友共享一本书一样,许多任务可以共享一个 CPU。

在更技术的层面上,执行上下文(因此是线程)由 CPU 寄存器的值组成。

最后:线程与进程不同。线程是执行上下文,而进程是与计算相关的一堆资源。一个进程可以有一个或多个线程。

澄清:与进程相关的资源包括内存页(进程中的所有线程都具有相同的内存视图)、文件描述符(例如,打开的套接字)和安全凭证(例如,启动该进程的用户的 ID)。过程)。

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

什么是“线程”(实际上)? 的相关文章

  • 从另一个线程调用 show 后 Windows 窗体窗体挂起

    我的应用程序有一些异步运行的网络代码 我附加了一些在没有连接到服务器时抛出的事件 并且在发生这种情况时我正在创建一些 操作失败 表单 问题是我的表单在创建后挂起 我读到了相关内容 并尝试这样做 public void ShowView if
  • 如何在 Android 中检查与配对设备的蓝牙连接状态

    我开发了一个蓝牙应用程序 它将连接到配对的设备并发送消息 但我必须先测试连接 我尝试了很多选择 但没有一个效果很好 那么您能给我发送任何可以做到这一点的代码示例吗 我创建了一个线程 但无法获得良好的连接状态来构建 if 函数 这是代码 pa
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 从另一个线程在主线程中运行代码

    在 android 服务中 我创建了线程来执行一些后台任务 我遇到一种情况 线程需要在主线程消息队列上发布某些任务 例如Runnable 有没有办法得到Handler主线程和帖子的Message Runnable从我的另一个线程到它 注意
  • “威胁已经被清除了。”在测试中测试在后台线程上触发委托的代码

    我有一些旧代码正在尝试为其编写测试 该代码解析日志文件 在后台线程上 完成后触发传入的委托 i e public delegate void finread LogData l LRParseState l string e void Th
  • 如何启动低优先级进程? C#

    我想执行命令行工具来处理数据 它不需要阻塞 我希望它的优先级较低 所以我写了下面的内容 Process app new Process app StartInfo FileName bin convert exe app StartInfo
  • 核心蓝牙框架本质上是异步的吗?

    当我在应用程序中使用 CB 框架时 我没有引入任何并发性或反应性方法 并且一切正常 当我每秒从外设接收超过 100 个样本时 UI 不会被阻止 这是否意味着它被设计为异步工作 我没有找到任何说明它具有异步性质的资源 也没有找到任何在使用核心
  • 多线程读取xml文件

    我进行了很多搜索 但找不到适合我的问题的解决方案 我编写了一个 xml 文件 其中包含电视节目的所有剧集信息 它大小 38 kb 包含大约 680 个变量的属性和字符串 起初 我只是在 XMLTextReader 的帮助下阅读它 它在我的四
  • 启动 Firefox 并等待其关闭

    Question 我想启动 Firefox 网络浏览器作为访问特定网站的过程 然后等到它关闭 一种特殊情况是浏览器可能已经打开并正在运行 因为用户可能已经访问过某个网站 在这种情况下 浏览器可能会在现有窗口中打开一个新选项卡 并且新启动的进
  • Device.BeginInvokeOnMainThread 的用途是什么?

    我希望有人向我解释什么是 Device BeginInvokeOnMainThread 以及它的用途是什么 还有一些使用案例的示例 只是添加一个例子 假设你有一个异步方法DoAnyWorkAsync如果你这样称呼它 仅作为示例 DoAnyW
  • 在 foreach 循环中启动一个新线程

    我有一个对象列表 我想循环该列表并启动一个新线程 传入当前对象 我写了一个我认为应该这样做的例子 但它不起作用 具体来说 线程似乎在每次迭代中都被覆盖 但这对我来说并没有什么意义 因为我每次都会创建一个新的 Thread 对象 这是我写的测
  • java中线程之间的通信:如果另一个线程完成则停止一个线程

    仅当另一个线程也在运行时 如何才能使一个线程运行 这意味着 如果我从一个线程中的运行返回 那么我希望另一个线程也停止运行 我的代码看起来像这样 ClientMessageHandler clientMessagehandler new Cl
  • Time 方法在另一个线程中执行并在超时时中止

    您好 我正在尝试异步运行方法 以便计算持续时间并在超过超时时取消该方法 我尝试使用异步和等待来实现这一点 但没有运气 也许我过度设计了这个 任何输入都会受到赞赏 应该注意的是 我无法更改接口 TheirInterface 因此得名 到目前为
  • 完成任务时手动捕获并应用 SynchronizationContext

    我遇到了挂起等待的问题 已描述here https stackoverflow com questions 40992035 awaiting a task that is being completed on a background t
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • nHibernate 使用 Log4Net 进行日志记录,线程会话问题

    大家好 这里有一个小问题 我正在努力解决这个问题 我目前正在开始使用 nHibernate 由于工作需要 我不得不这样做 并且我在 nHibernate 的会话和多线程方面遇到了一些困难 我想在这里完成的任务是让 Log4Net 将所有内容
  • C++11 非阻塞生产者/消费者

    我有一个 C 11 应用程序 其中有一个生成数据的高优先级线程和一个消耗数据的低优先级线程 在我的例子中 将其写入磁盘 我想确保高优先级生产者线程永远不会被阻塞 即它仅使用无锁算法 使用无锁队列 我可以从生产者线程将数据推送到队列 并从消费

随机推荐

  • 将向量的向量打印到 ostream

    请考虑以下代码 我正在尝试将向量的向量输出到 ostream include
  • 如何从任何字符串网址获取网站名称[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我已经给出了包含任何有效 url 的字符串 我必须从给定的网址中找到网站的名称 我也忽略了子域 like http www yahoo com gt yahoo www google
  • 向多个图层组添加标记

    我使用 StyledLayerControl 和 markcluster 使用 leafletjs 创建了一张地图 https www wiva at v2 basemap kartentest 每个标记代表一个适合一个类别 图层组 的研究
  • 根据身体负荷向下滑动一个 div

    如何让 div 在页面加载时隐藏 然后在页面加载后向下滑动 我不想使用 CSSdisplay none 尝试一下这个小提琴 http jsfiddle net ahr3U 这基本上使用 CSS3 设置过渡的所有参数 过渡属性使动画成为可能
  • jshn - 如何解析 json 包

    我想知道如何在openwrt上轻松解析json 我有 jhsn 来解析 json 这是我的程序 sh 脚本 download weather wget api openweathermap org data 2 5 weather id 2
  • 在派生类中调用 super() 时,可以传入 self.__class__ 吗? [复制]

    这个问题在这里已经有答案了 我最近发现 通过 StackOverflow 要调用基类中的方法 我应该调用 super derived class self base class method 很好 它有效 但是 我发现自己在进行更改时经常在
  • 使用加密后在终结器线程中获取“ReleaseHandleFailed”MDA

    运行此代码后我得到了 MDA第二次在一个循环中 使用不同的file范围 byte encryptedData File ReadAllBytes file before this line it throws see exception b
  • .on("click") 在 iOS 上不起作用

    我注意到 body on click id function event 不适用于 iOS 而 id on click function event 工作完美 相同的站点 相同的 jQuery 最新 相同的 DOM 我不能使用后者 因为 i
  • Paypal Ipn 与 asp.net MVC 集成

    HomeControler Index cshtml页面如下 div div
  • 无法创建适合文本大小的 HTML Div 元素

    我无法让 div 适合其内部文本的大小 我有 2 个 div 我希望内部 div 能够 1 适合外部 div 内部 2 位于包装 div 内的中心 我遇到的问题是 当我调整视图的宽度时 文本和 div 边框之间出现了很大的不必要的间隙 如下
  • 这个素数相关谓词的瓶颈是什么?

    所以这里是 我正在尝试计算低于两百万的所有素数的总和 对于这个问题 但是我的程序非常慢 我确实知道该算法本身非常糟糕并且是一种蛮力算法 但对我来说它似乎比应有的速度要慢得多 这里我将搜索限制为 20 000 这样结果就不会等待太久 我不认为
  • 扩展 Wpf Treeview 以支持排序

    您好 我创建了这个小示例 我想扩展它以支持排序 public class Country public string Name get set public int SortOrder get set My xaml
  • 使用 Python 请求抓取整个滚动加载页面

    具体来说 我试图抓取整个页面 但只得到其中的一部分 如果我使用 r requests get http store nike com us en us pw mens shoes 7puZoi3 ipp 120 它只获取页面的 可见 部分
  • Oracle 批量导入

    Oracle 中的批量导入 我已经创建了表 emp 我需要将文件中的批量数据导入到 emp 中 For Ex CREATE TABLE emp c1 NUMBER c2 VARCHAR2 30 文件路径 C Documents and Se
  • 将更新的值从 jqGrid 弹出窗口传递到控制器 MVC3

    我有一个jqgrid在编辑行期间 弹出窗口会打开 更新值后必须将其发送到控制器 现在调用控制器中的方法 但我不确定如何将值传递给控制器 jqGrid jQuery jQGridDemo jqGrid url Url Action LoadD
  • python h5py:我可以存储不同列具有不同类型的数据集吗?

    假设我有一个表 有很多列 只有几列是浮点类型 其他都是小整数 例如 col1 col2 col3 col4 1 31 1 2 3 2 33 3 5 4 假设我使用 我怎样才能有效地存储它np float32对于这个数据集 存储被浪费了 因为
  • 比较 bash 中的负数[重复]

    这个问题在这里已经有答案了 如何完成涉及负数的数字比较 if 2 gt 1 then echo 2 gt 1 else echo 2 lt 1 fi 我也尝试过 if 2 lt 1 then 但条件总是表现为 2 大于 1 当我不使用负数时
  • 想要为添加的时间创建时间戳并创建唯一的增量用户 ID。还包括最后更改的列

    我正在使用 Google Sheets 作为 最初计划的 快速且简单的数据库 用户提交表单 然后将其发送到表格进行存储 我尝试通过 Google Apps 脚本自动更新三列 用户 ID 这应该在添加新行时自动创建 并且不能更改 create
  • 在 Android 上调整位图大小的最节省内存的方法?

    我正在构建一个图像密集型社交应用程序 其中图像从服务器发送到设备 当设备的屏幕分辨率较小时 我需要在设备上调整位图的大小 以匹配其预期的显示尺寸 问题是使用创建缩放位图导致我在调整大量缩略图的大小后遇到很多内存不足的错误 在 Android
  • 什么是“线程”(实际上)?

    我一直在努力寻找一个好的定义 并理解什么是thread真的是 看来我一定错过了一些明显的东西 但每次我读到线程是什么时 它几乎都是一个循环定义 就像 线程是执行线程 或 划分运行任务的一种方式 呃呃 啊 从我读到的内容看来 线程并不是真正的