22

2015-11-12 01:14:28 +08:00   1

LZ ,你没有完全理解多线程的意义。或者没有完全理解什么是多线程,包括现在很多写代码的人,总在说多线程,有时候甚至把多线程和多并发或者多线程和多吞吐处理给混为一谈。

首先说一下一个进程里面为何要开多线程问题,和 cpu 是否多核,或者主板是否多路 cpu 关系是有的,但也是有限定条件的,具体内容如下:

1 ,由于部分 api 不支持异步方式执行,仅仅支持同步执行。例如读取一个文件,当每次读取的文件的数据很大时,内存缓存中没有足够的内存提交给调用者,这时 api 或者操作系统会代用户去从磁盘上读取文件,而磁盘相对于内存和 cache 来说属于慢速设备,并且在操作系统调度层面,对于此类操作是,现成被阻塞住(即挂起),然后转为执行其他任务。

为了让整个进程不进入假死(僵死)情况,需要在开一个线程来维持其他任务的执行。

2 ,在多路 cpu 的系统中,多线程可以提高任务处理的效率。即理想情况下,每个线程独占一路 cpu 处理能。

3 ,特殊多路系统,在非对称多路系统中,每个线程(进程)都执行在不同的核上,所访问的硬件资源不同,所以需要开多个线程。

至于你说的抢 cpu 执行时间问题,要分操作系统看,目前我们常用的 windows 和 linux 都是抢占式操作系统。对于 linux 我不是很熟,对 windows 略知一二:

1 ,操作系统调度粒度是线程+进程。即操作系统调度的最小单位是线程,但是否决定该线程执行,除了看线程执行时间和未执行间隔以外,还需要看总进程内的执行情况。

其中还存在进线程优先级问题,中断优先级, cpu 执行平衡问题,就近执行原则等。

2 ,一个进程中,线程并非越开越多就好。因为非分时的非实时操作系统的任务调度周期很有可能是不准的,操作系统是否要打断一个线程的执行,转而交给另外一个线程执行,除了调度周期到来的调度扫描,还有任务执行的优先级, IRQL 级别,线程处于什么状态等。

3 ,过多的线程不仅不能抢到有效的 cpu 执行时间,还会导致线程环境切换的浪费。因为每次线程的切换其中伴随的态转换,以及堆栈移动、寄存器恢复、内存调度等问题。频繁切换线程,只会得不偿失,不管是 python 或者 java 或者 c++或者 c#都是一样的,因为是操作系统在管理线程执行。

至于你提出的第四个疑问,在单核 cpu 里面开多线程的事情。我只能和你说,设计决定一切。

java多线程阻塞和cpu_对于单核 cpu 而言,开多线程的目的难倒只能是为了防止阻塞么?...相关推荐

  1. 单核CPU如何执行多线程

    概述 在多处理器系统中,多个线程在不同的内核上同时执行. 例如,如果有两个线程和两个内核,则每个线程将在单个内核上运行.在单处理器系统中,多个线程执行一个接一个的执行,或者等到一个线程完成或被操作系统 ...

  2. 多线程与单核cpu,多核cpu概念

    1.多线程在单核和多核CPU上的执行效率问题的讨论  a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢)  多个cpu的话就可以在两个cpu中同时执 ...

  3. 对多线程程序,单核cpu与多核cpu如何工作相关的探讨

    对多线程程序,单核cpu与多核cpu如何工作相关的探讨 我们程序员在编码的时候,涉及到技术方案时,往往会忽略掉代码对性能方面的影响,或者没有足够的敏感度来帮助自己判断自己的技术方案对系统性能造成的影响 ...

  4. 对于多线程程序,单核cpu与多核cpu是怎么工作的

    此文中的大部分资料来自于网络上,我只是觉得把有道理的整理一下,方便以后查阅. 1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个 ...

  5. c语言如何多核运行程序,对于多线程程序,单核cpu和多核cpu如何工作?

    1. 单核和多核CPU上多线程执行效率的探讨 a1: 多线程实际上是在单个CPU中按顺序执行的,但是系统可以帮助您切换该执行,但是它不是很快的(相反,是缓慢的) 如果有多个cpus,则可以同时在两个c ...

  6. 多线程在单核cpu与多核cpu下如何工作

    1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢) 多个cpu的话就可以在两个cpu中同时执行了 ...

  7. 单核CPU,多线程与性能

    单核CPU,多线程与性能   问题概述 单核CPU的计算机上, 多线程能够提高程序运行的性能吗? 这个问题看起来简单,实际很复杂,设计到多方面的因素. 首先我们要把概念搞清楚, 那就是什么是性能? 一 ...

  8. 单核CPU是否有线程可见性问题?

    本文仅是本人对问题的思考记录,并没有实操验证,有误请大家评论指出. 今天见到了一个经典的问题,单核CPU是否有线程可见性问题,学完操作系统应该可以直接回答,不会有线程安全问题.但如果结合JVM虚拟机来 ...

  9. 单核CPU, 1G内存,也能做JVM调优吗?

    最近,笔者的技术群里有人问了一个有趣的技术话题:单核CPU, 1G内存的超低配机器,怎么做JVM调优? 这实际上是两个问题.单核CPU的超低配机器,怎么充分利用CPU?单核CPU, 1G内存的超低配机 ...

最新文章

  1. Vita Helper v0.08 Build 20140722
  2. 您能否提供一些示例,说明为什么用正则表达式很难解析XML和HTML? [关闭]
  3. CSS在ASP.NET中使用
  4. 红帽集群套件RHCS
  5. LNMP下提示File not found问题的解决方法
  6. Python爬虫框架Scrapy 学习笔记 6 ------- 基本命令
  7. Gradle语法基础解析
  8. Linux 平台安装 Oracle Timesten
  9. 这些科技大佬们的星座你知道吗
  10. 语音识别数据库成为了人工智能的核心(转发)
  11. (非本校)湖南工业大学个人选拔赛第一场 解题报告
  12. 小学计算机应用到英语课教案,人教版小学英语三年级上册unit one hello!文具单词教学信息技术应用成果(教学设计方案).doc...
  13. 关于搭建Hybrid App所需要的基础技术一文
  14. SICNU ACM新生第一次考核
  15. 男人也离不开维生素(转)
  16. 分隔符中的分页符与分节符
  17. 【数据库】ER图进行描述某系统之学习七
  18. Project2016创建WBS并且进行相关设置
  19. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 概率与期望+高斯消元
  20. C++学习之第八天-解析RSS文件

热门文章

  1. activity工作流流程部署(自动部署与动态BPMN部署)
  2. java dbscan_聚类算法之DBScan(Java实现)
  3. 余数之和(数论、数学题)
  4. Linux运行911,韦东山-Linux下编写GT911触摸驱动 - 百问网嵌入式问答社区
  5. linux 查看当前用户密码
  6. Python3 基础爬虫
  7. java使用插件播放mp3,同时只播放一首歌
  8. 医疗保险、公积金、养老、生育、工伤、失业保险
  9. np.std() 计算矩阵标准差
  10. JavaScript算法题整理