首页 > 其他分享 >关于并行开发的一些概念整理

关于并行开发的一些概念整理

时间:2023-07-11 23:22:29浏览次数:40  
标签:异步 并发 编程 并行 概念 线程 处理器 整理 进程

〇、前言

想很好的理解并行开发,需要了解的知识还是有很多的,下边就简单罗列几个概念。

一、相关概念简介

1、任务管理器中的 基准速度、插槽、内核、逻辑处理器

基准速度

  就是处理器晶体管打开和关闭的速率,也就是 CPU 运作的参考速度。听起来像是速度越快越好,但是也有一定的局限性,也需要合适体量的内核才能发挥效用,另外速度的提高也伴随着更高的能耗。

插槽

  指的是主机支持插入几个物理 CPU。

内核

  又叫物理内核,一个物理 CPU 可以包含多个物理内核。

逻辑处理器

  即逻辑 CPU,一个物理内核可以包含多个逻辑 CPU。计算机设备管理器中显示的处理器个数对应的就是逻辑处理器的个数。

举个例子:

  如下图,因为只有一个插槽,所以就只能装机一个物理 CPU,然后一个物理 CPU 包含 6 个物理内核,一个内核中包含两个逻辑处理器,即 1 x 6 x 2 = 12。

  

2、进程与线程

进程-Process

  指的是程序的一次执行的过程,是一个动态概念,也是程序在执行过程中分配和管理资源的基本单位。

线程

  是 CPU 调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。每个进程都会有一个主线程(Main Thread)。

进程、线程、逻辑处理器之间的关系

  线程是进程的一部分,一个线程只能属于一个进程,而一个进程有一个到多个线程。

  进程和线程的根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。

  逻辑处理器的个数,代表计算机同时能有同样个数的线程在工作。

3、硬件线程和软件线程

硬件线程也叫逻辑处理器或逻辑内核,同样的,一个物理内核就可以包含多个硬件线程。

软件线程(Software Thread)就是我们常提到的线程。

Windows 将每一个硬件线程识别为一个可调度的逻辑处理器,每一个逻辑处理器可以运行软件线程代码,运行多个软件线程的进程可以充分发挥硬件线程和物理内核的优势,并行地运行指令。

Windows 会给每一个可用的硬件线程分配一块块的处理时间,并通过这种方式运行上百个千个软件线程。

4、并行与并发

并发:关键是你处理多个任务的能力一定要同时

并行:关键是你有同时处理多个任务的能力。

所以区别它们最关键的点就是:是否是“同时”。可见,能够“同时”的并行,效率相对更高。

举例:假如你吃饭吃到一半,电话来了,然后:

  • 你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。(按顺序一个一个处理)
  • 你停了下来接了电话,接完后继续吃饭,这说明你支持并发。(都可以做,但当时只能做一件事)
  • 你一边打电话一边吃饭,这说明你支持并行。(可以同时做多件事)

5、单线程与多线程

单线程

  就是一个进程只有一个线程。程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。

多线程

  就是一个进程有多个线程。在程序执行时,所有线程会交替执行。后面的线程不用等待前面的线程处理完毕。

多线程根据并行和并发又有不同的情况。

  • 在并发时,多个线程会抢占cpu资源执行一块逻辑,没有抢到cpu资源的就会进入等待状态,等cpu空闲后继续抢占资源。这就像一个车间只有一台机器,所有的工人都有相同的任务,他们都要使用这台机器,抢到的工人就执行任务,没有抢到的工人就等待任务执行完毕后,继续抢这台机器。
  • 在并行时,多个线程会同时执行一块代码逻辑。就像一个车间有四台机器,四个工人分别使用四台机器,同时执行任务,不用等待其它工人任务执行完毕。

使用场景的区别:

  • 单线程:当有三件事要处理,乙 需要在 甲 之后处理,同时 丙 需要在 乙 之后,这种事件有特定的先后顺序(甲-->乙-->丙)。
  • 多线程:需处理的多件事互相独立。例如下载大文件时的进度条和实际下载进度,就需要一边显示进度一边进行下载。

6、上下文切换

CPU 通过时间片轮转算法来循环执行线程任务,每次执行并不是直接将任务完成。这种切换用时很短,从而使各个程序的运行从表面上看是同时进行的。切换时会保存之前的线程任务状态,当切换到该线程任务的时候,会重新加载该线程的任务状态。而这个从保存到加载的过程称之为上下文切换。

比如我们拿了两本书,一本中英文词典,一本英文书,在读英文书时发现某个单词不认识,于是便打开中英文词典看单词的汉译,但是放下英文书之前,大脑必须记下这本书读到了多少页的多少行,等查询完单词之后,能够继续读这本书。但这样的切换是会影响读书效率的,同样上下文切换也会影响多线程的执行速度。

由于线程的状态保存和加载都是耗时的,所以在执行串行化代码时,多线程相比单线程效率低。

7、异步、同步、响应、函数式编程

异步编程

  是并发的一种形式,老式的异步编程采用回调的机制,以避免创建不必要的线程。异步编程的核心概念是异步操作,即启动的操作会在一定时间后才能完成,这个操作正在执行,却并不会阻塞原来的线程,启动了这个操作的线程还可以继续执行其他任务,等操作完成时,它会调用回调函数,已让程序知道操作已经结束了。

同步编程

  它和单线程的效果类似,进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。即前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。

响应编程

  是另一种形式的并发编程,它基于异步事件,而不是异步编程中的异步操作,异步操作有一个开始执行的概念,但是异步事件可以在任何时间发生,并且可以发生多次,大概类似于用户响应事件的概念。它是一种声明式的编程模式,程序在该模式中对事件做出与之对应的响应。

函数式编程

  大多数并发编程,其本质都是函数式的,函数式编程有两个原则,一个是简洁,有非常清晰的输入和输出,而且尽可能的避免全局或者共享变量。另一个原则就是不变性,指一段数据不能被修改,程序永远不需要对这些数据进行同步,就是非常简单的输入数据,输出数据。

部分参考:并行编程相关概念  C#并发编程相关名词解释  单线程和多线程?  异步,多线程和并行的区别? 并发与并行的区别是什么? 

注:个人整理,难免有疏漏,请大方的指正或补充,博主也会第一时间进行修改或补充。后续如果博主发现有需要补充的也会持续更新。

标签:异步,并发,编程,并行,概念,线程,处理器,整理,进程
From: https://www.cnblogs.com/czzj/p/ConcurrentConcept.html

相关文章

  • 关于数据治理一些容易混淆的概念
    容易混淆的数据治理的概念1、数据管理是不是数据治理不是、数据管理和数据治理的区别是数据管理包含数据治理,广义的数据治理和数据管理范围一样,目前国内大部分说的是广义的数据治理,数据治理是等于数据管理,但是国外数据治理是指制订治理规范,保障数据管理能够顺利完成的工作,是侠......
  • 第二节 Java基础概念
    题目1:(选择)下列关于java变量声明那个是错误的:A.intx=5;B.doubled=3.14;C.chargrade=‘C’;D.Stringname=‘黑马程序员’;讲解:D字符串需要用双引号引起来题目2:(看代码说结果)看代码说结果,不要去运行。doublemoney=10.0;money=money+5;money-=2.......
  • postgresql 统计表数据量并整理表
    selectt1.relnameas表名,pg_size_pretty(pg_relation_size(relid))as大小,(selectcast(reltuplesasINTEGER)frompg_classwhererelkind='r'andrelname=t1.relname)as记录数frompg_stat_user_tablesast1whereschemaname=......
  • 7月10日 今日所学 整理分享
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>intmain(){ intarr[]={1,2,3,4,5,6,7,8,9,10}; intk=6; intse=sizeof(arr)/sizeof(a......
  • 阿里p7闭关三月:整理出了这份java秋招面试必备指南
    从去年互联网寒冬的裁员潮,到今年受疫情影响的春招消失,金三银四变成铜三铁四,不过有一些朋友还是拿到了自己心怡的offer,有一些朋友还在为面试发愁,今天给大家分享一个阿里大佬闭关三个月的整理出的java秋招面试必备指南。大厂的面试从来不会是固定的,特别是像阿里这种一线互联网公司,想......
  • 腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!
    前言:可以毫不夸张地说,这篇文章介绍的SpringBoot教程基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个springboot的用法,文中都会都会有详细的教程解释。本文总共从29个章节,248页PDF,阐述springboot在各种环境下的各种用法,文中给大家列举出部分的springboot教程,需要这份10......
  • 求线性代数逆序数概念是啥意思?
    想要搞明白线性代数的“逆序”问题,不需要直接看生硬的概念,直接上手做几道题,循序渐进的就明白了——简单的说,只需要看下面这三篇笔记:你知道怎么判断一组数字的逆序数吗?你会使用逆序计算这个行列式吗?利用逆序求\(n\)阶行列式的值​......
  • 探索API接口:从概念到实践
    在当今数字化时代,API(ApplicationProgrammingInterface)接口成为了各种应用程序之间实现数据交互和功能集成的关键。无论是开发一个网站、构建一个移动应用还是进行数据分析,了解如何调用API接口是必不可少的技术。一、什么是API接口?API接口是应用程序之间进行通信的协议。它定义......
  • SSO单点登录基本概念实现思路以及小的实例详解
    一、什么是单点登录SSO(SingleSign-On)SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。二、单点登录解决了什么问题解决了用户只需要登录一......
  • Linux相关概念及操作
    目录linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。1./bin是Binary的缩写,这个目录存放着最经常使用的命令2./opt这是给主机额外安装软件所存放的目录。如安装ORACLE数据库就可放到该目录下。默认为空3./boot......