加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 如果有更多线程,我的程序会获得更多的CPU时间吗?

发布时间:2020-12-15 02:18:05 所属栏目:Java 来源:网络整理
导读:如果当前内核正在调度60个线程,则它们属于3个进程: A: 10 threads B: 20 threads C: 30 threads 他们都在做计算(没有磁盘IO) C会比B获得更多的东西吗?B比A做得更多吗? 这对我来说似乎不太公平.如果我是一个不负责任的程序员,我可以产生更多的线程来占用更
如果当前内核正在调度60个线程,则它们属于3个进程:

A: 10 threads

B: 20 threads

C: 30 threads

他们都在做计算(没有磁盘IO)

C会比B获得更多的东西吗?B比A做得更多吗?

这对我来说似乎不太公平.如果我是一个不负责任的程序员,我可以产生更多的线程来占用更多的CPU资源.

这与golang有什么关系:
在go中,go调度程序通常具有#of-CPU-cores线程的线程池.如果具有更多线程的进程完成更多工作,为什么这是有意义的?

解决方法

It does not seem very fair to me. If I am a irresponsible programmer,
I can just spawn more threads to eat more CPU resource.

您还可以分配整个可用内存,导致操作系统故障并劫持网卡.你可以做各种各样的事情但是谁会想要使用你的软件?

How this relate to golang: In go,typically the go scheduler has a
thread pool of #of-CPU-cores threads. Why does this make sense if a
process with more threads gets more stuff done?

Golang goroutines基本上是一个线程池.每个goroutine都是一个线程池工作项.许多事情可以使你的线程池线程阻塞,比如使用同步IO,等待(非自旋锁)锁并手动睡眠或让步.在这些情况下,这是非常常见的,拥有比CPU更多的线程通常会提高应用程序的性能.请注意,并非所有IO都是磁盘IO.写入控制台是一个IO操作,但它实际上不是“磁盘IO”.另一件事是上下文切换可能不占用你的大部分CPU,并且拥有更多线程可能不会使你的任务 – 吞吐量降低.因此,在这种情况下,拥有更多线程意味着您的并行性更高,但您不会失去性能.这是一种常见的情况.这些天线程之间的上下文切换非常便宜.拥有比核心更多的线程可能没有必要杀死你的性能或以某种方式降低它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读