并发
- 多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换
- 调度器切换CPU给不同进程使用的速度非常快,于是在使用者看来程序是在同时运行,这就是并发,而实际上CPU在同一时刻只在运行一个进程
并行
- 每个线程分配给独立的核心,线程同时运行。
- 如果这个CPU是多核的话,那么进程中的不同线程可以使用不同核心,真正的并行出现了
多核下线程数量选择
计算密集型
-
程序主要为复杂的逻辑判断和复杂的运算。
-
cpu的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源
IO密集型
-
程序主要为IO操作,比如磁盘IO(读取文件)和网络IO(网络请求)。
-
因为IO操作会阻塞线程,cpu利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高cpu利用率。
-
一个cpu分成多个内核,这是物理的分隔
-
在单CPU计算机中,有一个资源是无法被多个程序并行使用的:CPU
进程与线程之间的联系
- 两者都是多任务编程方式,都能够使用计算机的多核资源
- 进程的创建删除消耗的计算机资源比线程要多
- 进程空间独立,数据相互不干扰,有专门的IPC,线程使用全局变量进程通信
- 一个进程可以创建多个线程分支,两者之间存在包含关系
- 多个线程公用进程的资源,在资源操作时往往需要同步互斥
- 进程线程在系统中都有自己特有的属性,ID,代码段,栈区等资源
网友评论