热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

并发要理解的进程、线程、协程,附并发编程72道面试题答案

一、进程1.什么是进程?进程是操作系统进行资源分配和调度的基本概念,可以说进程是线程的容器,一个进程里包括数据区域和堆栈存储着活动过程调用的指令和本地的

一、进程

1.什么是进程?

进程是操作系统进行资源分配和调度的基本概念,可以说进程是线程的容器,一个进程里包括数据区域和堆栈存储着活动过程调用的指令和本地的变量,进程没运行时候处于没有生命的一个实体的状态,运行时依赖处理器给他活体状,一个进程至少有一个线程,如果没有的话那么这个线程就是它本身。

文末领取并发编程72道面试题及答案

一、多进程的概念

理论上一个CPU只能给一个进程,如果想一个CPU运行多个进程的话,那就是多进程,就要使用并发技术,实现并发技术非常复杂,说一下简单的并发技术 "时间片轮转进程调度算法" 在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10ms),这样用户根本感觉不出来 CPU是在轮流为多个进程服务,但实际上在任何一个时间内有且仅有一个进程占有CPU。 如果一台计算机有多个CPU,情况就不同了,如果进程数大于CPU数的时候,使用这种并发技术。目前都是几核的CPU都能够处理。

同时,这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。

2.什么是线程?

线程是程序执行流的最小单元,一个线程的信息包括(线程ID,指令集合,堆栈组)组成的线程这种单位,上面进程提到进程是线程的一个容器,说明线程运行在进程里面的,那就是运行在进程里面的一个实体,它不拥有系统资源,但它拥有进程的资源。

一、线程的三种状态

1.就绪状态:

是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机的过程。

2.阻塞状态:

是指线程在等待某一个事件(信号量)。

3.运行状态:

是指线程占有处理机正在运行。

二、多线程

同时运行多个线程完成不同的工作,就叫做多线程,使用多线程的好处有:

1.资源利用率更好: 想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要14s,在这段时间里,CPU非常的空闲,它可以做一些别的事情,那么我们使用多个线程的话,是不是可以处理文件的同时去读取新的文件,这样就提高了时间效率,

2.程序响应更快:假设做某一个服务的时候,它在某一个端口监听进来的请求,当一个请求到来时,它去处理这个请求,然后再返回去监听。

3.程序设计简单

做多线程的时候运用多线程的技术设计非常简单易用,遵循好一些规则,避免造成阻塞等操作,基本可以很快设计程序的需求。

4.使用场景:

多线程:密集I/O任务(网络I/O,磁盘I/O,数据库I/O)使用多线程合适。

三、线程与线程主要依靠什么通信

线程间通信主要通过共享内存

3.什么是协程?

一个程序可以包含多个协程,线程相对独立有自己的上下文,协程也是,但是协程由自己控制,不受操作系统控制,可以不加锁的访问全局变量,所以上下文的切换非常快,可以说是轻量级的线程,也可以说称之为用户级别的线程就叫协程,一个线程可以多个协程,一个进程也可以单独拥有多个协程,线程进程都是同步机制,而协程则是异步。

1.使用场景:

又称微线程,在单线程上执行多个任务,用函数切换,开销极小。不通过操作系统调度,没有进程、线程的切换开销。genventmonkey.patchall

多线程请求返回是无序的,那个线程有数据返回就处理那个线程,而协程返回的数据是有序的,处理磁盘的I/O比较慢,处理网络I/O性能还是比较高。

4.进程线程上下文切换

顺便说一下上下文切换上下文切换就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。进程上下文切换与线程上下文切换最主要的区别就是线程的切换虚拟空间内存是相同的(因为都是属于自己的进程),但是,进程切换的虚拟空间内存则是不同的。同时,这两种上下文切换的处理都是通过操作系统内核来完成的。

并发要理解的进程、线程、协程,附并发编程72道面试题答案 - 文章图片


上面画了一个进程,线程,协程的调用关系图。

最后送福利了,加群即可获取并发编程72题及答案   群号:923116658

点击链接加入群聊【Java架构解析】:https://jq.qq.com/?_wv=1027&k=5e1QsXb

还有Java工程化、高性能及分布式、高性能、高架构、性能调优、Spring、MyBatis、Netty源码分析等多个知识点高级进阶干货的相关视频资料,还有spring和虚拟机等书籍扫描版,还有更多面试题等你来拿。



推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了Java虚拟机中的垃圾收集器,包括年轻代收集器Serial收集器、ParNew收集器、Parallel Scavenge收集器,以及老年代收集器Serial Old收集器、Parallel Old收集器和CMS收集器。对每种收集器的算法和特点进行了详细解析,希望对读者有参考价值。 ... [详细]
author-avatar
何cecilio
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有