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

多线程 – 我不懂多线程编程

发布时间:2020-12-15 02:05:18 所属栏目:Java 来源:网络整理
导读:有人可以向我解释,当一个核心CPU一次只能做一件事时,多线程应用程序如何更快.如果我有10个线程,那么在单个核心cpu上的任何给定时刻,这些线程中只有一个真正“正在运行”,并且所有额外线程只会增加上下文切换开销.因此,如果每个线程有10个指令要处理,那么最后
有人可以向我解释,当一个核心CPU一次只能做一件事时,多线程应用程序如何更快.如果我有10个线程,那么在单个核心cpu上的任何给定时刻,这些线程中只有一个真正“正在运行”,并且所有额外线程只会增加上下文切换开销.因此,如果每个线程有10个指令要处理,那么最后我仍然按顺序处理100个指令加上上下文切换开销.我在这里错过了什么吗?

解决方法

是的,您错过了一个进程可能阻塞等待I / O的事实.因此,如果您在应用程序中仅使用一个THREAD,如果它阻止等待I / O完成,那么它将非常慢.

另一方面,如果您有多个线程,您的应用程序可能会有几个等待I / O完成,但其余的“执行”,而OS则允许它访问SINGLE PROCESSOR.

请记住,与CPU操作相比,I / O操作要慢几个数量级.

是的.即使在单核中,多线程应用程序也可能比单线程应用程序更快.考虑在单个线程上运行的服务器进程(如APACHE)的情况.每当有连接等待I / O完成时,连接的其余部分将停止等待I / O操作完成.当然有ASYNC-IO.但是,使用像ASYNC-IO在单个线程上运行像Apache这样的庞大服务器的编程模型将太复杂,无法维护,改进或其他任何东西.

(编辑:李大同)

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

    推荐文章
      热点阅读