当前位置: 首页 > news >正文

协程库——面试问题

1 同步、异步

1.1 同步

代码顺序执行,完全由用户控制.

同步阻塞

等待可读、可写的时候阻塞,不让出cpu。读、写之后,下面的代码才能执行、

同步非阻塞

等待可读、可写时,不会阻塞cpu,返回失败,设置错误码为EAGAIN 或 EWOULDBLOCK ,告知应用程序此时没有数据可读,用户需要自行决定怎样等待数据到来

可以轮询,

使用epoll,为fd注册读事件,然后去执行其它操作

1.2 异步

代码不按照顺序执行,不完全由用户控制。

异步的实现方式:        

  1.           异步库和异步框架:libevent、ibuv、libev等
  2.           操作系统异步io接口
  3.           c++11异步机制:std::async 和 std::future

异步IO库大概逻辑

将套接字设置为非阻塞状态,然后为套接字的事件绑定回调函数,接下来进入IO多路复用的循环,等待事件发生,调用对应的回调函数。 

2 进程、线程、协程

进程是操作系统进⾏资源分配的基本单位,每个进程都有⾃⼰的独⽴内存空间;

线程是cpu调度的基本单位,线程共享父进程的虚拟地址空间;

协程是用户态线程,协程通常在线程中运行

2.1 切换上下文

进程

cpu上下文——寄存器

内存管理上下文——页表相关

资源管理上下文——文件句柄等

同步机制上下文——锁、信号量等

线程

线程切换不需要切换虚拟地址空间,

只需要切换cpu寄存器上下文和少量的资源管理上下文

协程

部分cpu寄存器,

当前调用栈栈基地址代码的执行位置等,当前的上下文保存到线程的堆区

2.2 多进程/线程/协程

多进程

fork()创建子进程,子进程拷贝父进程地址空间,写时复制,代码段相同,执行任务相同

exec 系列函数可以在子进程中加载新的可执行程序,将子进程的代码替换为新程序的代码。这样,子进程将执行与父进程不同的任务。

多线程

父进程创建多个线程,每个线程有自己的入口函数,执行不同的任务。多个线程共享父进程的资源。

协程

每个协程由自己的入口函数,执行不同的任务。

协程通常是在单线程中运行的,协程可以在线程中实现切换,开销比线程和进程切换小,可以实现高并发。

协程经常与多线程一起使用。

3 协程优缺点

协程优点

轻量级:创建和销毁开销小,占用资源少

高并发:协程切换开销小,速度快,可同时处理更多的协程,实现高并发。协程切换在线程中进行,由用户控制,避免了线程切换的开销。


 不是很理解!!!====================???=================================

简化异步编程使用类似于同步编程的方式编写异步代码,避免避免了回调函数嵌套和复杂的并发控制逻辑,使得代码更加清晰和易于理解。

缺点

⽆法利⽤多核资源:线程才是系统调度的基本单位,单线程下的多协程本质上还是串⾏执⾏的,只能⽤到单核计算资源,所以协程往往要与多线程、多进程⼀起使⽤。 

难以调试:由于协程的切换和异步执行,调试协程代码可能更加困难。当协程之间存在复杂的依赖关系和交互时,追踪问题的根因可能变得复杂。

4 协程适用于I/O密集型任务的原因

I/O密集型任务通常涉及等待外部资源,等待的过程中,需要释放cpu,切换到其它任务。协程切换快速,开销小。

使用线程的话,线程阻塞等待IO,会切换到其它线程,切换开销比协程大

单核

不管使用多线程还是协程,都只能串行处理。

如果是cpu密集型任务,多线程和协程区别不大,因为不会频繁因为阻塞切换;

如果是io密集型任务,需要经常切换,协程切换效率更高。

多核

多线程的优势就是可以利用多核处理器,而协程只能在一个线程上运行。

IO密集型任务,使用多线程+协程

5 协程实现的是真正的异步吗?

可以实现异步效果,但本身并不是异步机制。

本项目中,当一个协程等待io时,可以切换到其他协程。当io完成后,它可以被唤醒并继续执行。这种方式可以让程序在等待I/O的同时执行其他任务,充分利用 CPU 资源,从而达到类似于异步的效果。这并不是真正的异步。

异步编程中:

        各个任务是解耦的,某个任务被阻塞,只影响该任务本身,不影响其它任务的执行

而多线程或协程中:

        任务间仍有一些资源是共享的,当一个线程或协程阻塞或出现异常,可能会影响整个进程的执行。

衡量⼀个协程库性能的标准

响应时间 :衡量在给定负载下协程调度的快慢。较低的响应时间表示更⾼的性能。
吞吐量 :指在单位时间内执⾏的任务数量。较⾼的吞吐量表示更⾼的性能。
并发能⼒ :指同时处理的协程数量。更⾼的并发能⼒表示更好的性能。
上下⽂切换开销: 在协程库中,上下⽂切换是指从⼀个协程切换到另⼀个协程的操作。较低的上下⽂切换开销表示更⾼的性能,因为过多的上下⽂切换会浪费时间和资源。
资源利⽤率 :⼀个好的协程库应该有效地利⽤系统资源,例如处理器、内存和⽹络等。协程库在资源利⽤⽅⾯的优化程度可以影响性能。

7 Go协程

8 C++协程

9 为什么要有空闲协程

在任务队列为空时,阻塞在idel协程中的epoll_wait中。

idel协程负责使用epoll监听事件,实际发生后,将对应回调函数添加到调度队列中。

调度协程只负责任务调度。

降低不同功能之间的耦合,便于后序扩展和维护。

10 每建⽴⼀个⽤户连接就要创建⼀个协程,不会影响性能吗?

 会的,高并发时,会有大量的协程创建和销毁,会占用较多系统资源。

可使用协程池的方法解决。

11 怎样测试的

12 简单介绍项目

相关文章:

协程库——面试问题

1 同步、异步 1.1 同步 代码顺序执行,完全由用户控制. 同步阻塞 等待可读、可写的时候阻塞,不让出cpu。读、写之后,下面的代码才能执行、 同步非阻塞 等待可读、可写时,不会阻塞cpu,返回失败,设置错误码为…...

数据结构与算法题目集(中文)6-2顺序表操作集

题目地址 https://pintia.cn/problem-sets/15/exam/problems/type/6?problemSetProblemId725&page0 注意审题,返回false的时候不要返回ERROR,否则答案错误,机器规则是死的。 位置一般指数组下标,位序一般指数组下标1。但是思…...

8086 汇编笔记(十二):int 指令 端口 直接定址表

一、int 指令 int 指令的格式为:int n,n 为中断类型码,它的功能是引发中断过程 CPU 执行 intn 指令,相当于引发一个n号中断的中断过程,执行过程如下: (1) 取中断类型码 n; (2) 标志寄存器入栈,IF0&…...

揭开FFT时域加窗的奥秘

FFT – Spectral Leakage 假设用于ADC输出数据分析的采样点数为N,而采样率为Fs,那我们就知道,这种情况下的FFT频谱分辨率为δf,那么δfFs/N。如果此时我们给ADC输入一个待测量的单频Fin,如果此时Fin除以δf不是整数&a…...

【AI基础】第二步:安装AI运行环境

开局一张图: ​ 接下来按照从下往上的顺序来安装部署。 规则1 注意每个层级的安装版本,上层的版本由下层版本决定 比如CUDA的版本,需要看显卡安装了什么版本的驱动,然后CUDA的版本不能高于这个驱动的版本。 这个比较好理解&…...

【MySQL】聊聊唯一索引是如何加锁的

首先我们要明确,加锁的对象是索引,加锁的基本单位是next-key lock,由记录锁和间隙锁组成。next-key是前开后闭区间,间隙锁是前开后开区间。根据不同的查询条件next-key 可能会退化成记录锁或间隙锁。 在能使用记录锁或者间隙锁就…...

k8s-CCE使用node节点使用VIP--hostNetworkhostPort

CCE使用node节点使用VIP 背景:想在节点上使用VIP,将nodeport服务做到高可用。启动VIP后发现访问失败 部署 ! Configuration File for keepalived global_defs { router_id master-node }vrrp_instance VI_1 {state BACKUPinterface eth0mcast_src_ip 10.1.0.60virtual_rou…...

18、关于优化中央企业资产评估管理有关事项的通知

一、加强重大资产评估项目管理 (一)中央企业应当对资产评估项目实施分类管理,综合考虑评估目的、评估标的资产规模、评估标的特点等因素,合理确定本集团重大资产评估项目划分标准,原则上,企业对外并购股权项目应纳入重大资产评估项目。中央企业应当研究制定重大资产评估…...

AI大模型日报#0610:港大等1bit大模型“解决AI能源需求”、谷歌开源TimesFM时序预测模型

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE 4.0)、“零一万物”(Yi-Large)生成了今日要点以及每条资讯的摘要。欢迎阅读&#xf…...

速盾:图片cdn加速 免费

随着互联网的快速发展,图片在网页设计和内容传播中起着重要的作用。然而,随着网站访问量的增加和图片文件大小的增加,图片加载速度可能会成为一个问题。为了解决这个问题,许多网站使用图片CDN加速服务。 CDN(Content …...

贪心算法例子

贪心算法概述 贪心算法是一种在每一步选择中都做出局部最优选择的算法,以期望通过一系列局部最优选择达到全局最优。贪心算法在许多优化问题中表现良好,特别是在某些特定类型的问题中能够保证找到最优解。 活动选择问题(Activity Selection Problem)背包问题(贪心解法)霍…...

vivado HW_ILA_DATA、HW_PROBE

HW_ILA_DATA 描述 硬件ILA数据对象是ILA调试核心上捕获的数据的存储库 编程到当前硬件设备上。upload_hw_ila_data命令 在从ila调试移动捕获的数据的过程中创建hw_ila_data对象 核心,hw_ila,在物理FPGA上,hw_device。 read_hw_ila_data命令还…...

refault distance算法的一点理解

这个算法看了好几次了,都没太理解,今天记录一下,加深一下印象。 引用某个博客对这个算法的介绍 一次访问page cache称为fault,第二次访问该页面称为refault。page cache页面第一次被踢出LRU链表并回收(eviction)的时刻称为E&#…...

软件安全技术【太原理工大学】

没有划重点,只说了一句课后题和实验中的内容都可能会出。 2022考试题型:选择20个20分,填空10个10分,名词解释4个20分,简答6个30分,分析与论述2个20分,没找到历年题。 如此看来,这门考…...

异常(Exception)

异常是什么 异常就是程序在进行时的不正常行为,就像之前数组时会遇到空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等等。 在java中异常由类来表示。 异常的分类 异常…...

一文者懂LLaMA 2(原理、模型、训练)

引言 LLaMA(Large Language Model Meta AI)是Meta(前身为Facebook)开发的自然语言处理模型家族之一,LLaMA 2作为其最新版本,展示了在语言理解和生成方面的显著进步。本文将详细解读LLaMA 2的基本原理、模型…...

MySQL 存储函数及调用

1.mysql 存储函数及调用 在MySQL中,存储函数(Stored Function)是一种在数据库中定义的特殊类型的函数,它可以从一个或多个参数返回一个值。存储函数在数据库层面上封装了复杂的SQL逻辑,使得在应用程序中调用时更加简单…...

设计模式七大原则-单一职责原则SingleResponsibility

七大原则是在设计“设计模式”的时候需要用到的原则,它们的存在是为了保证设计模式达到以下几种目的: 1.代码重用性 2.可读性 3.可拓展性 4.可靠性(增加新的功能后,对原来的功能没有影响) 5.使程序呈现高内聚、低耦合的…...

msfconsole利用Windows server2008cve-2019-0708漏洞入侵

一、环境搭建 Windows系列cve-2019-0708漏洞存在于Windows系统的Remote Desktop Services(远程桌面服务)(端口3389)中,未经身份验证的攻击者可以通过发送特殊构造的数据包触发漏洞,可能导致远程无需用户验…...

Reinforcement Learning学习(三)

前言 最近在学习Mujoco环境,学习了一些官方的Tutorials以及开源的Demo,对SB3库的强化学习标准库有了一定的了解,尝试搭建了自己的环境,基于UR5E机械臂,进行了一个避障的任务,同时尝试接入了图像大模型API,做了一些有趣的应用,参考资料如下: https://mujoco.readthedo…...

hw meta10 adb back up DCIM

1. centos install adb 2. HW enable devlepment mode & enalbe adb debug 3. add shell root/zt/adb-sync python3 ./adb-sync --reverse /sdcard/DCIM/Camera /root/zt/meta10...

Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)

上期链接:Unity2D游戏制作入门 | 11(之人物属性及伤害计算)-CSDN博客 上期我们聊到了人物的自身属性和受伤时的计算,我们先给人物和野猪挂上属性和攻击属性的代码,然后通过触发器触发受伤的事件。物体(人物也好敌人也行&#xff…...

从河流到空气,BL340工控机助力全面环保监测网络构建

在环保监测领域,智能化、高效率的监测手段正逐步成为守护绿水青山的新常态。其中,ARMxy工业计算机BL340凭借其强大的处理能力、高度的灵活性以及广泛的兼容性,在水质监测站、空气质量检测、噪音污染监控等多个环保应用场景中脱颖而出&#xf…...

零拷贝技术

背景 磁盘可以说是计算机系统重最慢的硬件之一,读写速度相对内存10以上,所以针对优化磁盘的技术非常的多,比如:零拷贝、直接I/O、异步I/O等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的…...

Flutter_Android上架GooglePlay_问题

上架GooglePlay权限问题 问题描述 REQUEST_INSTALL_PACKAGES 权限问题解决方式 方式1 找到所有使用该权限的库修改删除该权限引用 方式2 打开项目 ~/andoird/app/src/main/AndroidMainfest.xml 添加文本<uses-permission android:name"android.permission.REQUES…...

【Java】解决Java报错:NumberFormatException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 字符串包含非数字字符2.2 空字符串或 null 字符串2.3 数值超出范围 3. 解决方案3.1 验证字符串格式3.2 使用异常处理3.3 处理空字符串和 null 4. 预防措施4.1 数据验证4.2 编写防御性代码4.3 单元测试 结语 引言 在Java编程中&a…...

视觉大模型(VLLM)学习笔记

视觉多模态大模型&#xff08;VLLM&#xff09; InternVL 1.5 近日&#xff0c;上海人工智能实验室 OpenGVLab 团队、清华大学、商汤科技合作推出了开源多模态大语言模型项目InternVL 1.5&#xff0c;它不仅挑战了商业模型巨头例如 GPT-4V 的霸主地位&#xff0c;还让我们不禁…...

【软考的系统分析师的考题考点解析2025】

2024-2025系统分析师考试&#xff08;简称软考&#xff09;是计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试中的高级资格考试&#xff0c;主要考察考生在系统分析、系统设计、项目管理等方面的知识和技能。以下是软考系统分析师的常见考点、考题和重点&#x…...

JavaScript前端技术入门教程

引言 在前端开发的广阔天地中&#xff0c;JavaScript无疑是最耀眼的一颗明星。它赋予了网页动态交互的能力&#xff0c;让网页从静态的文本和图片展示&#xff0c;进化为可以与用户进行实时交互的丰富应用。本文将带您走进JavaScript的世界&#xff0c;为您提供一个入门级的教…...

类和对象(上续)

前言&#xff1a;本文介绍类和对象中的一些比较重要的知识点&#xff0c;为以后的继续学习打好基础。 目录 拷贝构造 拷贝构造的特征&#xff1a; 自定义类型的传值传参 自定义类型在函数中的传值返回 如果返回值时自定义的引用呢&#xff1f; 在什么情况下使用呢&#…...

wordpress cn/百度直播

这里给大家介绍我在实际工作中用的两种切图方法&#xff0c;一种是“图层切图”&#xff0c;这种切图方式比较适合切形状不规则的png格式的小图标&#xff0c;如企业logo等等&#xff0c;而另外一种是“切片切图”&#xff0c;这种切图方式比较适合形状规则的jpg格式的大图。 一…...

wordpress+访问加速/品牌运营公司

本书介绍 本书系统性讲解深度神经网络&#xff08;DNN&#xff09;相关的关键原理和技术。DNNs目前广泛用于许多人工智能应用&#xff0c;包括计算机视觉、语音识别和机器人学。虽然数字神经网络在许多人工智能任务中提供了最先进的精度&#xff0c;但它是以高计算复杂性为代价…...

长沙网站创建/中国做网站的公司排名

一.前言我看了JessYan大神的MVPArms项目框架&#xff0c;使我开始对Android MVP认识更加深刻&#xff0c;通过该框架&#xff0c;确实使代码降低了耦合&#xff0c;因此我决定动手把老项目重构&#xff0c;用上MVPArms框架&#xff01;顺便记录一下我的学习历程&#xff01;二.…...

凡科用模板做网站/百度大全

标题说的可能不是很清楚&#xff0c;解释一下&#xff0c;函数模板&#xff0c;一般都是放在头文件里面&#xff0c;所以有些时候&#xff0c;我也会做一个特化&#xff0c;也放在这个头文件里面&#xff0c;当这个头文件出现多次的包含之后&#xff0c;就会出现链接多重定义的…...

mibt wordpress/黑帽seo寄生虫

android 6.0更新了全新的权限机制&#xff0c;在使用一些涉及用户隐私的权限时&#xff0c;会让用户做出选择是否该app可以使用此权限。在查看本文章之前&#xff0c;希望大家可以移步官方开发文档 使用权限。在该文章中&#xff0c;详细描述了新版本的权限机制的更改&#xff…...

怎么在网站做直播间/百度推广开户公司

1.源码下载首先是下载 git for windows&#xff1a;Git-2.14.1-64-bit.exe。然后新建D:mangos文件夹&#xff0c;在该文件夹下右键选择"Git Bash Here"&#xff0c;打开Git命令行。下载Mangos Zero源码&#xff1a;git clone https://github.com/mangoszero/server.g…...