美文网首页
多线程概念

多线程概念

作者: 小丸子的呆地 | 来源:发表于2021-07-16 11:10 被阅读0次

什么是多线程?

我们已经知道了线程是CPU 调度的最小单位,多线程就是我们在进程中启用多个线程去执行处理任务。

为什么要用多线程?

image.png

在单核时代,如果是纯运算的操作是不需要多线程的,一个线程一直执行运算即可。但如果这个线程正在等待 I/O 操作,此时 CPU 就处于空闲状态,这就浪费了 CPU 的算力,因此有了多线程,在某线程等待 I/O 等操作的时候,另一个线程顶上,充分利用 CPU,提高处理效率。
多线程的本意是充分利用CPU,让CPU一刻不停的为我们执行任务。为此,我们使用多线程技术,哪怕有一个线程因为程序或者IO等操作阻塞了,不能让CPU傻等着,而是去执行其他的任务。

线程越多越好吗?

答案是否定的,线程肯定不是越多越好。因为创建线程需要消耗资源,维持一个线程同样需要消耗资源,执行一个线程更需要切换上下文。
CPU执行别的线程是需要切换线程上下文的,需要开销,比如替换寄存器的内容、高速缓存的失效等等。如果线程数太多,CPU为了雨露均沾,切换的频率就变高,可能使得多线程带来的好处抵不过线程切换带来的开销,得不偿失。

线程数设置多少比较合理

线程数的设置数量本身不是一个十分确定的事,需要根据其他很多的引入,比如CPU的核数、期望的CPU利用率、任务执行的情况。

常规标准

  1. IO密集型程序,使用 核数*2+1
  2. 计算密集型程序,使用 核数+1

《Java并发编程实战》的作者 Brain Goetz 推荐的计算方法如下:

线程数 = CPU 核心数 * (1 + IO 耗时/ CPU 耗时)

有一派的计算方式是《Java虚拟机并发编程》中提出的:

线程数 = CPU 核心数 / (1 - 阻塞系数)
其中计算密集型阻塞系数为 0,IO 密集型阻塞系数接近 1,一般认为在 0.8 ~ 0.9 之间。

相关文章

  • iOS多线程.md

    2018-05-22 iOS多线程-概念iOS多线程:『pthread、NSThread』详尽总结 多线程-概念图...

  • 我看谁还不懂多线程之间的通信+基础入门+实战教程+详细介绍+附源

    一、多线程之间的通信(Java版本) 1、多线程概念介绍 多线程概念 在我们的程序层面来说,多线程通常是在每个进程...

  • GCD方式的多线程

    GCD方式的多线程 概念讲解 NSOperation方式实现多线程

  • Java篇-多线程

    多线程的概念已经写过很多了,java的多线程的概念和之前讲解的 OC 与 python多线程相同,这里就不再赘述了...

  • 多线程整理

    多线程概念 先通过一幅图来了解一下多线程 多线程技术对比

  • Java一多线程

    目录: 一、进程与线程的概念 二、多线程的概念 三、多线程所存在的问题(线程安全问题、上下文切换) 四、多线程的三...

  • iOS - Multi-Thread

    概念篇 进程 线程 多线程 单核多线程 & 多核多线程 并行 & 并发 同步 & 异步 队列 队列 & 任务 的执...

  • Java 多线程之多线程原理

    一、线程的概念、特点及其作用 二、线程的工作原理 三、多线程的概念、特点及其作用 四、多线程中线程安全的概念及其原...

  • Java入门系列09 -- 多线程,I/O

    进程,线程,多线程的相关概念这里就不做阐述,可参考 iOS底层系列22 -- 多线程基础概念[https://ww...

  • iOS多线程详解:概念篇

    讲多线程这个话题,就免不了先了解多线程相关的技术概念。本文涉及到的技术概念有CPU、进程、线程、同异步、队列等概念...

网友评论

      本文标题:多线程概念

      本文链接:https://www.haomeiwen.com/subject/pkovpltx.html