首页 > 其他分享 >并行与并发

并行与并发

时间:2023-11-20 22:31:39浏览次数:21  
标签:操作系统 并行 并发 时间 进程 CPU

单核

单核 cpu 下,线程实际还是串行执行的。操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是同时运行的 。总结为一句话就是: 微观串行,宏观并行

一般会将这种线程轮流使用 CPU 的做法称为并发,concurrent

时间片

时间片:CPU的时间片(Time Slice)是操作系统中进行多任务处理的一种调度算法。在多任务处理环境下,当有多个进程需要共享CPU资源时,操作系统会将CPU的运行时间划分为若干个时间片段,每个时间片段被分配给一个进程使用

时间片的长度是一个固定的时间单位,通常是几毫秒到几十毫秒之间。当一个进程的时间片用完后,操作系统会暂停该进程的执行,并将CPU分配给另一个处于就绪状态的进程,以此实现多个进程的并发执行。

采用时间片轮转调度算法的操作系统,每个进程按照就绪队列中的顺序依次获得CPU的时间片,当一个进程用完时间片后,它会被移到队列的末尾,而其他等待的进程则按顺序向前移动,准备获取CPU的时间片。

时间片的设置可以影响到系统的响应速度和吞吐量。较短的时间片可以提高系统的响应速度,但会增加上下文切换的开销;而较长的时间片可以提高系统的吞吐量,但可能导致用户的交互响应不及时。因此,在设计操作系统时需要根据具体应用场景和系统需求来合理设置时间片的长度。

并行与并发_调度算法

并行与并发_时间片_02

多核

多核 cpu下,每个核(core) 都可以调度运行线程,这时候线程可以是并行的。

并行与并发_多线程_03

并行与并发_并发与并行_04

引用 Rob Pike 的一段描述:

并发(concurrent)是同一时间应对(dealing with)多件事情的能力

并行(parallel)是同一时间动手做(doing)多件事情的能力

例子

  • 家庭主妇做饭、打扫卫生、给孩子喂奶,她一个人轮流交替做这多件事,这时就是并发 。
  • 家庭主妇雇了个保姆,她们一起这些事,这时既有并发,也有并行(这时会产生竞争,例如锅只有一口,一个人用锅时,另一个人就得等待)
  • 雇了3个保姆,一个专做饭、一个专打扫卫生、一个专喂奶,互不干扰,这时是并行。


标签:操作系统,并行,并发,时间,进程,CPU
From: https://blog.51cto.com/AmbitionGarden/8491922

相关文章

  • Vue公共loading升级版(处理并发异步差时响应)
    公共loading是项目系统中很常见的场景,处理方式也不外乎三个步骤:1.通过全局状态管理定义状态值(vuex、pinia等)。2.在程序主入口监听状态值变化,从而展示/隐藏laoding动画。3.在请求和相应拦截器中变更状态值。第一二步骤处理大同小异,但在第三步中,网上很多博文分享的方法是:在请求......
  • [转]Golang线程池实现百万级高并发
     转,原文: https://lk668.github.io/2021/03/22/2021-03-22-Golang%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%AE%9E%E7%8E%B0%E7%99%BE%E4%B8%87%E7%BA%A7%E9%AB%98%E5%B9%B6%E5%8F%91/--------------Golang线程池实现百万级高并发2021-03-22本文基于Golang实现线程池,从而可以达到百......
  • 多核CPU条件下的并发和并行理解
    操作系统课本上的并发和并行并发​是指两个或多个事件在同一时间间隔内交替发生并行是指两个或多个事件在同一时刻发生并行编程中的并发和并行在接触并行编程之前,认为多线程是并发的一种,因为一个处理单元每次只能处理一个线程,因此多个线程也只是一个时间间隔内的交替执行而已......
  • go并发 - channel
    概述并发编程是利用多核心能力,提升程序性能,而多线程之间需要相互协作、共享资源、线程安全等。任何并发模型都要解决线程间通讯问题,毫不夸张的说线程通讯是并发编程的主要问题。go使用著名的CSP(CommunicatingSequentialProcess,通讯顺序进程)并发模型,从设计之初Go语言就注重如......
  • 性能测试---并发线程数&QPS&平均耗时&95分位耗时
    文章转发,原文来自:https://cloud.tencent.com/developer/article/1784548?ivk_sa=1024320u【概念解释】并发线程数:指的是施压机施加的同时请求的线程数量。比如,我启动并发线程数100,即我会在施压机器上面启动100个线程,不断地向服务器发请求。QPS:每秒请求数,即在不断向服务器发送请......
  • go并发 - goroutine
    概述Go并发模型独树一帜,简洁、高效。Go语言最小执行单位称为协程(goroutine),运行时可以创建成千万上个协程,这在Java、C等线程模型中是不可想象的,并发模型是Go的招牌能力之一。很多文章描述协程是轻量级的线程,并不准确,两者在底层有本质区别。线程是由操作系统维护,以Linux为例,系统......
  • 【Python自动化】定时自动采集,并发送微信告警通知,全流程案例讲解!
    目录一、概要二、效果演示三、代码讲解3.1爬虫采集行政处罚数据3.2存MySQL数据库3.3发送告警邮件&微信通知3.4定时机制四、总结一、概要您好!我是@马哥python说,一名10年程序猿。我原创开发了一套定时自动化爬取方案,完整开发流程如下:采集数据->筛选数据->存MySQL数据库......
  • 28_rust_无畏并发
    无畏并发Concurrent:程序不同部分之间独立执行;Parallel:程序不同部分同时运行。rust无畏并发:允许编写没有细微Bug的代码。并在不引入新Bug的情况下易于重构。这里所说的“并发”泛指concurrent和parallel。使用线程同时运行代码1:1模型:实现线程的方式:通过调用OS的API创建线程。......
  • 无涯教程-D语言 - 并发
    并发使程序在多个线程上运行,一个示例是Web服务器同时响应多个客户端,并发通过消息传递很容易,但是它们基于数据共享则很难编写。启动线程函数spawn()将指针作为参数,并从该函数启动新线程,该函数执行的任何操作,包括它可能调用的其他函数,都将在新线程上执行。importstd.stdio;im......
  • 并发之AQS源码学习
    /****学习AbstractQueuedSynchronizer**1.state是aqs的重要属性,说明锁的使用次数*2.CustomAbstractQueuedSynchronizer,存在head与tail属性,所以其本身就是一个链表。并没有使用集合*3.双向链表(等待队列)*1.head永远都是伪节点(thead=null)*......