首页 > 系统相关 >进程&线程、并行&并发

进程&线程、并行&并发

时间:2024-05-21 09:40:37浏览次数:25  
标签:一个 程序 并行 并发 线程 进程

什么是进程

开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。

  • 通俗解释
    当我们运行一个程序,那么我们将运行的程序叫进程。

  • 专业解释
    进程是申请一块内存空间,将数据放到内存空间中去, 是申请数据的过程是最小的资源管理单元
    进程是线程的容器

程序与进程的区别

程序是数据和指令的集合, 是一个静态的概念, 就是一堆代码, 可以长时间的保存在系统中
进程是程序运行的过程, 是一个动态的概念, 进程存在着生命周期, 也就是说进程会随着程序的终止而销毁, 不会永久存在系统中

进程之间交互

进程之间通过 TCP/IP 端口实现

什么是线程

线程是操作系统能够进行运算调度的最小单位。
它被包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

  • 专业解释
    进程的一条流水线, 只用来执行程序,而不涉及到申请资源, 是程序的实际执行者最小的执行单元

线程之间交互

多个线程共享同一块内存,通过共享的内存空间来进行交互

进程与线程的关系

可以说 "进程" 包含 "线程", "线程" 是 "进程" 的子集

例子:
我们打开一个聊天软件,这就是开启了一个进程;当我们在软件里面打开一些功能,比如空间, 扫一扫, 设置...,这些操作就是线程

  • 进程是线程的容器

并发

并发是多个任务交替使用CPU,同一时刻只有一个任务在跑;
针对一个问题,想到了一个可以拆解为多个【并发】的任务,这些任务执行时因为只有一个CPU只能“切换”的跑。

  • 单核下使用多道技术实现

并行

并行是多个任务同时跑;
并行必须有多核才能实现,否则只能实现并发(伪并行)
如果这些并行执行的任务是解决同一个问题的,那么他们既是【并发】的,同时也是【并行】的。

串行

一个程序完完整整的运行完,再运行下一个进程。

高并发

不像【并发】说的是“处理”,【并行】说的是“执行”,【高并发】说的是最终效果。只要能达到效果,不管怎么实现都行。
因此,极端一点【高并发】甚至并不一定需要【并行】,只要处理速度快的足够满足要求就可以。
如启动一个nginx的【OS进程】,它只能用到一个CPU核心,也就不可能【并行】。但是他如果能每秒能处理10万个请求,而业务需求只要求8万个请求就可以了,那么这个单进程的nginx本身就算【高并发】了。

【高并发】是指可以让软件系统在一段时间内能够处理大量的请求。比如每秒钟可以完成10万个请求。这是互联网系统的一个重要的特征。

除了【并发】和【并行】,【高并发】还需要:

数据表普遍被分库分表,否则单机放不下,或者查询性能不足解决分布式事务因为机器都可能坏,为了保证少数机器坏掉不会影响处理的性能,必须引入HA机制因为系统都有极限,超过极限响应能力就会急剧下降。因此必须引入限流的方案来保护系统这么复杂的系统会涉及到N个service,N个存储,N个队列…… 这些资源的管理又成为了新的问题,这又需要对集群和服务做管理这么多服务,肯定要解决分布式的Tracing和报警问题……当面试的时候提起【高并发】,大概率是希望面试者聊聊上面这些主题。但请特别特别留意,不同领域的【高并发】实际的意思(怎么算“高”,如何达成,哪些问题是关键问题)会非常不同。电商的高并发,抖音的高并发,12306卖火车票的高并发,基金交易系统的高并发,海量数据处理的高并发,这些问题其实都很不同。所以我很建议每次都讨论具体的问题,而非泛泛谈论【高并发】这个名词。

参考和转载
https://www.zhihu.com/question/307100151
https://www.zhihu.com/question/307100151/answer/894486042

标签:一个,程序,并行,并发,线程,进程
From: https://www.cnblogs.com/OpenSourceSite/p/18203319

相关文章

  • 小米面试:如何实现优先级线程池?
    我们知道,线程池中的所有线程都是由统一的线程工厂来创建的,当我们指定线程工厂时,线程池中的所有线程会使用我们指定的线程工厂来创建线程;但如果没有指定线程工厂,则会使用默认的线程工厂DefaultThreadFactory来创建线程,核心源码如下:DefaultThreadFactory(){@SuppressWarnin......
  • C++ 多线程编程要点总结
    C++多线程编程要点总结:选择合适的线程库:C++11引入了 <thread> 头文件,提供了对线程的原生支持。也可以使用第三方库,如Boost.Thread,它提供了更多高级功能和更好的跨平台兼容性。线程创建与管理:使用 std::thread 类创建新线程,并传入函数或可调用对象作为线程的入口......
  • 多个CPU--多核--核心线程数​理解
    今天在创建简单线程池时,使用Runtime.getRuntime().availableProcessors()有些不懂网上这么配置的理由,百度说是计算资源(逻辑核心数)与CPU有关,但是和CPU具体啥关系还是一知半解,今天通过看资料,整理一下我的理解。importcom.google.common.util.concurrent.ThreadFactoryBuild......
  • 多线程和多进程 - 初窥
    一、说明在平常工作中,我们使用top命令查看一台linux服务器的cpu使用情况时,会发现某个进程的cpu使用率会超过100%,这是为什么?二、举例实验环境为CentOS7.6+Python2.71.多线程、多进程在操作系统中的表现形式我们首先看两个例子,test1.py和test2.py,都是执行死循环,test1.py两......
  • go高并发之路——go语言如何解决并发问题
    一、选择GO的原因作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比GO快很多。现在工作中也还是有一些老项目在使用PHP,但21年之后的新项目基本......
  • 线程安全使用 HashMap 的四种技巧
    这篇文章,我们聊聊线程安全使用HashMap的四种技巧。1方法内部:每个线程使用单独的HashMap如下图,tomcat接收到到请求后,依次调用控制器Controller、服务层Service、数据库访问层的相关方法。每次访问服务层方法serviceMethod时,都会在方法体内部创建一个单独的HashMap,......
  • php 异步并行后续--兼容FPM使用的组件
    上次给人推荐了这篇文章,关于PHP异步并行的文章,之后有人评论问这个组件能不能给fpm用,我测试了一下发现不行,于是又找到一个可以给fpm用的http请求组件.安装很简单,就这样  composerrequireguzzlehttp/guzzle 进行安装一下.然后代码示例如下:我们先建一个文件作为一个长......
  • PHP的多样化执行方式(parallel PHP多线程实现,原生协程实现,多进程实现,ZTS、NTS、TS又是
    进程、线程、协程进程:应用程序的启动实例,运行起的代码叫进程,有独立的内存空间,类比工厂的P个(P=1单进程,P>1多进程)车间。线程:线程是CPU调度的最小单位,是进程内的执行单元,多个线程共享所属进程的资源。类比车间内的T个员工(T=1单线程,T>1多线程)车间。协程:类似线程,协程是用户态(CPU受......
  • 一次惨痛的面试:“网易提前批,我被虚拟线程问倒了”
    一、写在开头昨晚收到一个粉丝在私信的留言如下:build哥,今天参加了网易的提前批,可以说是一次惨痛的面试体验......
  • 线程
    3.线程线程介绍线程是需要上下文环境的线程一定绑定在某个进程上的内核线程只有一个堆栈(在内核中创建线程如果不指定进程的话,默认是绑定在system进程)R3中线程有2个堆栈,在R3进R0的时候会切换堆栈,这时候用的就不是R3的堆栈而是R0的(R0和R3的上下文环境)线程没有cr3的概念,只有......