V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
forgottenPerson
V2EX  ›  问与答

单 cpu 多核为啥不用并行

  •  
  •   forgottenPerson · 1 天前 via Android · 1141 次点击

    为何现在多核,不用并行,要用并发,是因为,l1,l2 是独立的,l3 缓存是共享的吗?在程序语言上也是支持并发,为啥程序语言上并发比比并行说的多?

    有懂的老哥解点惑吗?

    21 条回复    2025-01-07 00:03:46 +08:00
    forgottenPerson
        1
    forgottenPerson  
    OP
       1 天前 via Android
    单核并发好理解,多核为啥不用并行啊,之前上课的时候多核并不一定比单核快,但是在程序语言上并发为啥比并行流行。懂的老哥可以解点惑吗,我给金币。
    sagaxu
        2
    sagaxu  
       1 天前   ❤️ 1
    并发在多核 CPU 上就是并行,多核不能并行,那还要多核何用?
    forgottenPerson
        3
    forgottenPerson  
    OP
       1 天前 via Android
    @sagaxu 那为啥讨论的都是各种并发模式,明明现在都是多核,不应该讨论并行吗
    minami
        4
    minami  
       1 天前 via Android   ❤️ 1
    并行并发不是根据你的任务来的吗?说并发的多是因为 web 这块就是并发多,你要是搞科学计算就是并行多了
    forgottenPerson
        5
    forgottenPerson  
    OP
       1 天前 via Android
    但是多核,你程序被不同核执行,那不就是并行吗,咋还是再说并发。你不可能程序跑起来了,只在单核上执行啊,你在多核上执行,不就是并行吗。
    forgottenPerson
        6
    forgottenPerson  
    OP
       1 天前 via Android
    sagaxu
        7
    sagaxu  
       1 天前   ❤️ 1
    @forgottenPerson 怎么没有 https://www.jd.com/hprm/1713ebfed0a5edba7044.html

    通用编程语言,考虑的是并发,CPU 上的并行是 OS 任务调度器在多核 CPU 上的调度结果,这个过程不需要程序员感知。

    并行需要特定硬件支持,它不能自动获得,需要程序员编写特定代码才能实现,CUDA 和 OpenCL 就是例子。
    thingingWoods
        8
    thingingWoods  
       1 天前   ❤️ 1
    io 密集型任务并行用处不大??不懂瞎猜的。。
    leonshaw
        9
    leonshaw  
       1 天前 via Android   ❤️ 1
    CPU 核数和并发任务数是一个量级吗?
    foool
        10
    foool  
       1 天前   ❤️ 1
    "为何现在多核,不用并行,要用并发,
    为啥程序语言上并发比比并行说的多?"

    你这两个问题前提都错了。
    forgottenPerson
        11
    forgottenPerson  
    OP
       1 天前 via Android
    @leonshaw 是的,但是想不通的是,比如你有 8 个逻辑核,4 个物理核,我有 8 个 goroutine,每个 goroutine 执行一个任务,每个逻辑核执行 1 个 goroutine ,这不是并行吗,它的行为我如何预测,预测我不就涉及并行了。
    forgottenPerson
        12
    forgottenPerson  
    OP
       1 天前 via Android
    @foool 那老哥,正确的表述应该是什么
    mumbler
        13
    mumbler  
       1 天前   ❤️ 1
    我猜你的意思是多线程和多进程区别吧,多线程是自己管理线程之间的调度,多进程是操作系统来管理进程之间的调度

    这个问题,你跟大模型聊过吗,聊一会就清晰了吧
    minami
        14
    minami  
       1 天前   ❤️ 1
    @forgottenPerson #4 是个锤子,你到底想讨论什么层级的并行并发,不同层级上的 task 完全是不同的含义。就单纯并行和并发两个词的区别,你看看 StackOverflow 的高赞就知道了
    https://stackoverflow.com/questions/1050222/what-is-the-difference-between-concurrency-and-parallelism
    leonshaw
        15
    leonshaw  
       1 天前 via Android   ❤️ 1
    @forgottenPerson 如果恰好被 Go runtime 和操作系统调度到几个核上同时运行就是并行。一般大家更关心系统能并发处理的任务数,而不是并行数。
    hefish
        16
    hefish  
       1 天前
    哈哈哈哈哈哈。。。。
    forgottenPerson
        17
    forgottenPerson  
    OP
       1 天前 via Android
    @leonshaw 但是老哥,那你的言外之意不就是 go 运行时和操作系统调度器把协程调度到多个核上是个不常见的情况吗,但是问题来,了如果调度到多核这种情况不是普遍现象,而是恰好,那我其他的核不是浪费了,性能不是损失了吗
    wy315700
        18
    wy315700  
       1 天前   ❤️ 1
    @forgottenPerson #17
    如果想要精准调用多核进行并行操作。可以手动绑定核心的啊。

    https://www.duguying.net/article/set-cpu-affinity-binding-for-golang-program
    YsHaNg
        19
    YsHaNg  
       1 天前   ❤️ 2
    那你去读科学计算 openmp 文档不就满眼并行了 你不去看==人不说?
    RightHand
        20
    RightHand  
       1 天前 via Android   ❤️ 1
    可能是因为现代编程都是各种框架,隐藏了线程调度。导致感知不到并行能力。只能简单的说并发
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1097 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:46 · PVG 06:46 · LAX 14:46 · JFK 17:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.