为何现在多核,不用并行,要用并发,是因为,l1,l2 是独立的,l3 缓存是共享的吗?在程序语言上也是支持并发,为啥程序语言上并发比比并行说的多?
有懂的老哥解点惑吗?
1
forgottenPerson OP 单核并发好理解,多核为啥不用并行啊,之前上课的时候多核并不一定比单核快,但是在程序语言上并发为啥比并行流行。懂的老哥可以解点惑吗,我给金币。
|
2
sagaxu 1 天前 1
并发在多核 CPU 上就是并行,多核不能并行,那还要多核何用?
|
3
forgottenPerson OP @sagaxu 那为啥讨论的都是各种并发模式,明明现在都是多核,不应该讨论并行吗
|
4
minami 1 天前 via Android 1
并行并发不是根据你的任务来的吗?说并发的多是因为 web 这块就是并发多,你要是搞科学计算就是并行多了
|
5
forgottenPerson OP 但是多核,你程序被不同核执行,那不就是并行吗,咋还是再说并发。你不可能程序跑起来了,只在单核上执行啊,你在多核上执行,不就是并行吗。
|
6
forgottenPerson OP |
7
sagaxu 1 天前 1
@forgottenPerson 怎么没有 https://www.jd.com/hprm/1713ebfed0a5edba7044.html
通用编程语言,考虑的是并发,CPU 上的并行是 OS 任务调度器在多核 CPU 上的调度结果,这个过程不需要程序员感知。 并行需要特定硬件支持,它不能自动获得,需要程序员编写特定代码才能实现,CUDA 和 OpenCL 就是例子。 |
8
thingingWoods 1 天前 1
io 密集型任务并行用处不大??不懂瞎猜的。。
|
9
leonshaw 1 天前 via Android 1
CPU 核数和并发任务数是一个量级吗?
|
10
foool 1 天前 1
"为何现在多核,不用并行,要用并发,
为啥程序语言上并发比比并行说的多?" 你这两个问题前提都错了。 |
11
forgottenPerson OP @leonshaw 是的,但是想不通的是,比如你有 8 个逻辑核,4 个物理核,我有 8 个 goroutine,每个 goroutine 执行一个任务,每个逻辑核执行 1 个 goroutine ,这不是并行吗,它的行为我如何预测,预测我不就涉及并行了。
|
12
forgottenPerson OP @foool 那老哥,正确的表述应该是什么
|
13
mumbler 1 天前 1
我猜你的意思是多线程和多进程区别吧,多线程是自己管理线程之间的调度,多进程是操作系统来管理进程之间的调度
这个问题,你跟大模型聊过吗,聊一会就清晰了吧 |
14
minami 1 天前 1
@forgottenPerson #4 是个锤子,你到底想讨论什么层级的并行并发,不同层级上的 task 完全是不同的含义。就单纯并行和并发两个词的区别,你看看 StackOverflow 的高赞就知道了
https://stackoverflow.com/questions/1050222/what-is-the-difference-between-concurrency-and-parallelism |
15
leonshaw 1 天前 via Android 1
@forgottenPerson 如果恰好被 Go runtime 和操作系统调度到几个核上同时运行就是并行。一般大家更关心系统能并发处理的任务数,而不是并行数。
|
16
hefish 1 天前
哈哈哈哈哈哈。。。。
|
17
forgottenPerson OP @leonshaw 但是老哥,那你的言外之意不就是 go 运行时和操作系统调度器把协程调度到多个核上是个不常见的情况吗,但是问题来,了如果调度到多核这种情况不是普遍现象,而是恰好,那我其他的核不是浪费了,性能不是损失了吗
|
18
wy315700 1 天前 1
@forgottenPerson #17
如果想要精准调用多核进行并行操作。可以手动绑定核心的啊。 https://www.duguying.net/article/set-cpu-affinity-binding-for-golang-program |
19
YsHaNg 1 天前 2
那你去读科学计算 openmp 文档不就满眼并行了 你不去看==人不说?
|
20
RightHand 1 天前 via Android 1
可能是因为现代编程都是各种框架,隐藏了线程调度。导致感知不到并行能力。只能简单的说并发
|