RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1278396
Accepted
Betflop
Betflop
Asked:2022-05-05 20:48:15 +0000 UTC2022-05-05 20:48:15 +0000 UTC 2022-05-05 20:48:15 +0000 UTC

两个过程如何在铁水平上竞争?

  • 772

多线程/多处理器程序的交互是如何在硬件层面实现的,即 我想想象它是如何发生的,2+ 电荷沿着电路从 2+ 核处理器“运行”,他们都想访问磁盘,他们相遇的地方以及如何达成这样的理解:某人是第一个,某人是第二、第三等 ? 如果它们绝对同时发生会怎样?或者,例如,相同的事情,但写入 RAM,每个进程如何设法为自己占据一个位置,但保证不会在同一毫秒内被其他人占据。

многопоточность
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. gbg
    2022-05-05T21:31:02Z2022-05-05T21:31:02Z

    多线程程序的交互主要是在逻辑同步原语的基础上实现的,而这些原语又是使用非常容易理解的逻辑节点来实现的。无需深入到单个电子元件的水平。

    一个小的具体示例是逻辑原语“原子变量(C++ 中的 std::atomic)”。为了在没有缓存和指令流水线的原始处理器中实现它,对该变量的读取和写入在一条机器指令中执行。

    在原子变量的基础上,已经可以构造更复杂的同步原语——互斥体和信号量。有了这样的武器库,你可以做很多事情。

    为了以某种方式将其系统化和标准化,具有多线程的严格编程语言(C、C++ 等)引入了内存和机器的正式模型,并在该模型内以标准描述它们的工作。模型在特定硬件上的实现取决于编译器开发人员,而他们又拥有处理器机器代码的部分规范。

    同时,该规范的某些部分是硬件开发人员非常昂贵的知识产权,并且是在严格的 NDA 下发布的。

    • 2
  2. Best Answer
    nick_n_a
    2022-05-05T21:59:21Z2022-05-05T21:59:21Z

    磁盘和内存有很大的不同。唯一对磁盘和内存都适用的是最后一次进入的人——那个和运动鞋。那些。如果您不使用强制锁定 - 可能会证明在您写入信息的地址处 - 它已经被并行工作的线程擦除。

    关于内存。有三个因素——CPU、CACHE、OS、多通道。有了 RAM,一切都变得更简单,而一个 CPU 可以访问物理内存——其余的 CPU 正在等待。等待优先级究竟是如何组织的——我很难说。很可能是处理器编号,并且可能与 CPU 版本不同。由于该程序通常不会专门使用内存,因此在等待之后,另一个 CPU 将获得对 RAM 的访问权限。我们不能忘记,如果操作系统需要并行执行一些其他任务,包括操作系统维护,它可以限制/抑制过多的线程活动。因此,优先级还取决于操作系统的版本、它的工作量和同时运行的程序的数量以及哪些程序(因为一个程序可以将 CPU 加载到满,而另一个程序可以休眠)。相同的缓存CPU内置内存——极大地方便了内存操作。现代 PC 不再有外部缓存。禁用高速缓存时,CPU 会慢得多。启用缓存时访问 RAM - 如果所有内容都适合缓存,则可能不会发生。当使用双通道内存或多通道时 - 可以将两个线程对 RAM 的访问打包成一个访问,这也会带来性能上的小幅提升(因为这种可能性的概率具有一定的 % 概率) .

    使用磁盘,一切都会复杂得多。首先,与磁盘的工作不是直接进行的,而是通过驱动程序进行的,因此访问的优先级或同时性由驱动程序决定。考虑到磁盘操作经常组合在一起并被缓存,线程很可能会在不同的时间进入等待,但等待磁盘操作的时间大约会在同一时间结束。在物理 I/O 操作之后,控制权将传递给 I/O 驱动程序,而 I/O 驱动程序将控制权传递给操作系统。最有可能的是,操作系统会优先考虑最被剥夺的线程,以平衡性能偏差(如果线程具有相同的优先级)。直接绕过驱动程序使用磁盘是一项非常复杂的任务 - 实际上不使用它。

    在多线程环境下工作时,针对不同的情况采用不同的方法来加快工作速度。我认为铁的知识在这里没有多大帮助。最好阅读有关多线程排序的文章,例如,还有其他多线程进程的描述 - 并阅读那里的功能。这些特征有些是由于铁,有些是通过实验获得的。

    • 0

相关问题

  • Golang 限制为 6 个连接

  • 当您在服务器上启动电报机器人时,负责处理命令及其响应的线程会脱落

  • 停止线程的执行

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5