计算机-编程相关

news2024/11/15 9:47:52

在 Linux 中、一切都是文件、硬件设备是文件、管道是文件、网络套接字也是文件。

for

https://juejin.cn/post/6844904103437582344

fork 进程的一些问题

fork 函数比较特殊、一次调用会返回两次。在父进程和子进程都会返回。

每个进程在内核中都是一个 taskstruct 结构、fork 的时候、内核把内核中原来的 task_struct 拷贝了一份

还创建了一个全新的地址空间和堆栈

在这里插入图片描述

进程的地址空间没有拷贝,子进程和父进程是在共享内存空间的。都是映射到同一个物理内存页上的

在这里插入图片描述

内核把这些页面都设置成只读、如果你们是读的话、不会有问题、但是有一方尝试写入、就会触发异常。内核发现异常后再分配一个新的页面让你们分开使用。这个就是写时复制。

在这里插入图片描述

线程的栈

线程的栈默认是 8M、实际上一开始分配给栈并不是那么大的空间。会按需自动增大。直到大于 8M 就会栈溢出。

进程间如何通信

信号

信号时 Linux 上的一种软中断通信机制、可以向制定进程发送通知。总共有 64 种信号、不过信号只能作为通知使用。没办法传输数据。

socket 套接字

网络通信使用。可以将连接的地址设置为 127.0.0.1 作为本地计算机通信。这样子的话、不需要经过网卡、因为 127.0.0.1 是本地回环地址,数据在协议栈就转发。 但是抓包可以抓到、因为在虚拟的回环网卡lo上抓到。

匿名管道

单向。满了会阻塞

需要有亲缘关系的进程继承指挥才能通信。

命名管道

只要指明管道名称就能通信。不需要进程间有关系。

消息队列

共享内存

IO 多路复用

自己写了一个 web 服务进程。监听某个端口、如何处理客户端的连接请求。(单线程 while 去接受处理客户端连接请求)

当客户连接成功之后、但是一直不传输数据、线程会一直卡在那里、并且没法再处理其他客户的连接请求了

多线程去应对

每一个连接过来都去创建一个新的线程去处理。

select 模型

越来越多的连接过来了、线程越来越多、终于顶唔住了。。。。

I/O 多路复用

有个叫 select 的函数、你把文件描述符批量传给他,平时他阻塞在那里、只要其中有一个有消息来、它就会返回,你这个时候去检查睡来消息,并去处理就行了。

select 函数是怎么做到的?

它会遍历所有的文件描述符、把你挂入与这些文件描述符相关联的设备等待队列中、如何交出执行权进入阻塞,等后面这些设备来消息、然后通过回调函数通知你。把你唤醒。

但是 select 函数底层时使用位图数组来存储要管理的文件描述符的、容量有上线。最多只能同时处理 1024 个文件描述符。

poll

但是 poll 和 select 一样。慢!!

为啥慢?

1、 每次返回后不告诉程序到底是哪一个文件描述符有消息、需要程序一个个遍历。耽搁了不少时间

2、每次调用他们的时候、都要把所有的文件描述符从用户态地址空间拷贝到内核中,这样子经常拷贝也费时间。

epoll

epoll 这个多路复用模型、不需要每次拷贝全部的数据、只需要增减就行。因为它内部采用红黑树来管理监听的文件描述符,所以查找起来很快。而且它内部还有一个队列、所有就绪的文件描述符都会进入中国队列。程序不再需要遍历所有的文件描述符去找来消息的那个了。

像访问内存一样读写文件

在这里插入图片描述

因为磁盘太慢了、所以在内核空间中给每一个要读取的文件建立一个数据结构。里面记录了已经缓存的文件数据块信息。从硬盘读过来的数据就缓存到内存。并记录到这个数据结构中。

以后读取文件的时候、先通过这个数据结构去查询、查到就直接拷贝给应用、查不到才去找磁盘要。

CPU的局部性原理在这里也适用。

在写文件的时候是先写到这个缓存里面、并不会立即同步刷到磁盘的、这时候突然断电、缓存的数据就会丢掉了。

sync 函数、只要你调用它、就会马上进行同步、写入硬盘。

内存映射文件

读取文件时需要进行两次拷贝、第一次从磁盘拷贝到内核的缓存页中、第二次把它从缓存中拷贝到应用程序的缓冲区中。

写的时候也是同理。

把文件的数据缓存页映射到用户态地址空间、这样用户态地址空间的缓冲区和缓存页就能映射到同一个物理内存页。

在这里插入图片描述

再进一步的话就是

在进程的地址空间划分一块区域和文件内容简历映射关系、等到应用程序访问这部分区域的时候、会发生缺页中断错误、这时我们把数据从硬盘读取到缓存页中、再把缓存页和进程中缺页中断的页面关联起来。

这样子对应用无感。不用再使用 read、write、fseek 这样麻烦地读写文件。

在这里插入图片描述

这个 api 叫 mmap 内存映射文件。

协程

A:Java 线程执行阻塞函数时被操作系统挂起、切换到别的线程。

B:线程切换是否需要成本?如果大量线程频繁切换、成本又当如何?

A:如果担心这个问题、那就不用阻塞函数、通过异步回调进行。

B:异步回调确实不用阻塞、不过它有两点不好、其一就是割裂了原来的业务代码、其二就是回调地狱。

协程

线程可以在执行函数遇到阻塞后,保存执行的上下文、转而执行别处到代码。待阻塞请求完成后、再回去继续执行。

线程是有操作系统统一调度管理的。那么在一个线程中、同样可以抽象出多个执行流、由线程来统一调度管理、这线程智商抽象的执行流就是协程。

在这里插入图片描述

线程时操作系统在调度管理、那线程里抽出来的执行流、也就是协程、该怎么调度管理?

OS 通过时钟中断和系统调用进入内核来剥夺线程的执行权、那线程如何剥夺协程的执行权来实现调度管理?

协程:协作式程序。它会主动交出执行权。

Java19 已经支持了虚拟线程(协程)、或者使用第三方协程框架 Quasar

https://zhuanlan.zhihu.com/p/425978232

https://book.douban.com/subject/36428782/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软MSBuild大会发布Copilot+PC:技术革新还是隐私噩梦?

微软在最近的MSBuild 2024大会上发布了全新的CopilotPC概念,这一技术结合了高通骁龙X Elite芯片,将人工智能与PC紧密结合。此次发布引起了广泛关注,不仅是因为其技术创新,还因为潜在的隐私问题。甚至连Elon Musk也对此表示担忧&am…

第197题|奇偶性的四则运算,你掌握了吗?|函数强化训练(四)|武忠祥老师每日一题 5月22日

解题思路:这道题如果我们会21号的题的话,简直是小菜一碟!主要就是要用到下面这个结论: (A) 直接看奇偶性我们不好看,我们需要拆项: 我们先看前一项的奇偶性,x是奇函数&a…

自动化测试用例结构

标准的用例结构: 用力标题前提条件用例步骤预期结果实际结果 测试用例对比:

高稳定数显芯片防干扰抗噪数码屏驱动高亮LED驱动IC-VK16K33A/AA 最大13×3的按键扫描

产品型号:VK16K33A/AA 产品品牌:永嘉微电/VINKA 封装形式:SOP28/SSOP28 原厂,工程服务,技术支持! 概述 VK16K33A/AA是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有数据…

MoonDream2微调指南【最小VLM】

在本指南中,我们将探讨如何使用计算机视觉数据集对完全开源的小型视觉语言模型 Moondream2 进行微调,以计数项目(这是 GPT-4V 一直表现不一致的任务),并以一种可以依赖输出用于生产应用程序的方式进行微调。 视觉语言…

k8s之yaml文件详解

文章目录 k8s之yaml文件详解一、关于yaml文件1、k8s支持的文件格式2、YAML语言格式3、查看api资源版本标签4、编写nginx-test.yaml资源配置清单4.1 编写资源配置清单4.2 创建资源对象4.3 查看创建的pod资源 5、创建service服务对外提供访问并测试5.1 编写nginx-svc-test.yaml5.…

ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

软考中级嵌入式系统设计师知识点

主要介绍一些软考中级嵌入式系统设计师涉及到的一些考点。 文章目录 前言 一、嵌入式系统设计师 二、知识点 总结 前言 主要介绍一些软考中级嵌入式系统设计师涉及到的一些考点。 提示:以下是本篇文章正文内容,下面案例可供参考 一、嵌入式系统设计师 …

科研——ICONIP论文修改和提交

文章目录 Springer Nature Code of Conduct and Book Publishing Policies行为准则和出版的道德规范文章的准备Structing Your paperLengths of Paper文章长度FontsPage Numbering and Running HeadsFigures and TablesFormulaeFootnotesCitation by Number Additional Informa…

C++ | Leetcode C++题解之第107题二叉树的层序遍历II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> levelOrderBottom(TreeNode* root) {auto levelOrder vector<vector<int>>();if (!root) {return levelOrder;}queue<TreeNode*> q;q.push(root);while (!q.e…

【情感大师智能体】:定制专属情感支持

文章目录 &#x1f4d1;前言一、快速创建智能体二、配置表单2.1 基础配置2.2 指令配置什么是指令&#xff08;prompt&#xff09;&#xff1f; 2.3 我的指令如下&#xff1a; 三、体验发布四、小结 &#x1f4d1;前言 随着智能体技术的快速发展&#xff0c;用户对智能体的需求不…

基于ucos-ii操作系统的生产者消费者-问题

目 录 第1章 题目分析. 1 1.1 生产者线程... 1 1.2 消费者线程... 1 1.3 缓冲区... 1 1.4 进程的同步与互斥... 1 第2章 解决方案. 2 2.1 总体方案... 2 2.2 生产者问题... 2 2.3 消费者问题... 3 2.4 进程问题... 5 第3章 实验结果. 6 3.1 运行结果... 6 3.2 结果分析... 8 第…

【OpenGL实践10】关于几何着色器

目录 一、说明 二、几何着色器 2.1 设置 2.2 基本几何着色器 2.2.1 输入类型 2.2.2 输出类型 2.2.3 顶点输入 2.2.4 顶点输出 2.3 创建几何着色器 2.4 几何着色器和顶点属性 三、动态生成几何体 四、结论 练习 一、说明 几何着色器的应用比较高级&#xff0c;关于…

探索 Rust 语言的精髓:深入 Rust 标准库

探索 Rust 语言的精髓&#xff1a;深入 Rust 标准库 Rust&#xff0c;这门现代编程语言以其内存安全、并发性和性能优势而闻名。它不仅在系统编程领域展现出强大的能力&#xff0c;也越来越多地被应用于WebAssembly、嵌入式系统、分布式服务等众多领域。Rust 的成功&#xff0…

databricks~Unity Catalog

Unity Catalog hierarchy 包含了用户授权管理信息和元数据信息 workspace with unity catalog hierarchy unity metastore Ref: https://www.youtube.com/playlist?listPLY-V_O-O7h4fwcHcXgkR_zTLvddvE_GfC

欢乐钓鱼大师攻略大全,游戏自动辅助,钓鱼大全!

欢迎来到《欢乐钓鱼大师》的攻略大全&#xff01;本文将为你详细介绍游戏中的各类玩法、技巧和注意事项&#xff0c;帮助你快速掌握游戏精髓&#xff0c;成为一名真正的钓鱼大师。攻略内容包括新手鱼竿选择、锦标赛攻略、实用技巧、藏宝图玩法、箱子开法等多个方面。让我们一起…

数字信号处理:matlab解差分方程

1. 验证全响应 %验证全响应零状态响应零输入响应 %y(n)4y(n-1)x(n),其中x(n)δ(n),y(-1)2.clc;%清屏 clear all;%清除所有变量的值 b[1]; a[1,-4]; ys[2]; xs[0];%没有初始值&#xff0c;就是0 xn[1, zeros(1,4)];%输入序列&#xff0c;假设长度是5&#xff0c;则输出长度也是…

人工智能+量子计算:飞跃现实边界还是科技幻想?

人工智能量子计算&#xff0c;这是一种可能改变世界的伙伴关系。 在科技的前沿&#xff0c;两大革命性技术——人工智能&#xff08;AI&#xff09;和量子计算——正站在合作的十字路口。人工智能&#xff0c;以其强大的数据分析能力和模式识别&#xff0c;正在改变着我们生活…

【机器学习与大模型】驱动下的电子商务应用

摘要&#xff1a; 随着信息技术的飞速发展&#xff0c;电子商务已经成为当今商业领域中最为活跃和重要的部分之一。而机器学习和大模型的出现&#xff0c;为电子商务带来了新的机遇和挑战。本文深入探讨了机器学习与大模型在电子商务中的应用&#xff0c;包括个性化推荐、精准营…

第一份工资

当我拿到我人生的第一份工资时&#xff0c;那是一种难以言表的激动。我记得那个下午&#xff0c;阳光透过窗户洒在了我的办公桌上&#xff0c;我看着那张支票&#xff0c;心中满是欣喜和自豪。那是我独立生活的开始&#xff0c;也是我对自己能力的一种肯定。 我记得我是如何支配…