一文搞懂Linux高性能技术--epoll
Stream 流 流可以是文件、socket、pipe等等可以支持io操作的对象。流有两端,两端可以进行读写。如果我们此时读,流另一端没有数据传来,该怎么办。处理的方式的这样几种。 简单的操作是阻塞,读操作将进入阻塞状态等待数据到来。这样实现简单,但是阻塞时线程无法工作,性能太低。阻塞的实现需要依靠缓冲区。缓冲区的引入是为了减少频繁的io操作而引起频繁的Io调用。 另一种操作是非阻塞忙轮...
Stream 流 流可以是文件、socket、pipe等等可以支持io操作的对象。流有两端,两端可以进行读写。如果我们此时读,流另一端没有数据传来,该怎么办。处理的方式的这样几种。 简单的操作是阻塞,读操作将进入阻塞状态等待数据到来。这样实现简单,但是阻塞时线程无法工作,性能太低。阻塞的实现需要依靠缓冲区。缓冲区的引入是为了减少频繁的io操作而引起频繁的Io调用。 另一种操作是非阻塞忙轮...
基础篇+杂记篇 Mysql select 语句执行流程图 mysql 有几种存储引擎? 常见的存储引擎好像有:InnoBD,MyISAM,Memory等。 什么是回表 在使用非聚簇索引进行查询时,通过二级索引查询到主键后需要重新根据主键索引查询到完整数据,这个重新回到数据库表查询的过程就是回表, Mysql优化总结 (好文) 当系统的性能瓶颈来到数据库层面,需要优化Mysq...
特殊路由 在Linux中有两张路由表,其中一张负责本地地址,所有查找成功的packet表明要发送到本地主机。
动态规划 分析问题,制定dp方程式; 初始化dp for求解dp 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? dp[i] = dp[i-1] + dp[i-2] 杨辉三角 dp[i][j] = dp[i-1][j-1] + dp[i-1][j] 打家劫舍 你是一个专业的小偷,计划偷窃沿...
1 中断上下文内外死锁问题 2 进程调度问题导致网络IO性能下降 这段代码的作用是检测当前进程是否需要被调度,并在满足条件时进行调度。具体来说: current_pcb_flags().contains(ProcessFlags::NEED_SCHEDULE) :检查当前进程控制块(PCB)的标志是否包含 NEED_SCHEDULE标志,表示当前进程需要被调度。 ...
关键函数: switch_to_user() (粗略版)步骤: 删除当前进程的kthread的标志 读取指定路径下的trap_frame,执行init进程 这里要用try_to_run_init_process进行封装,因为要判断执行进程失败的原因是无法加载初始化程序还是其他 原因 调用do_execve函数执行init程序 执行arch下的用户态切换,先获取trap...
设备驱动注册函数/设备注册函数 device_driver_init() Driver结构体创建;(new()) 平台设备驱动管理注册。(platform_driver_manager().register()) ` device_init()` device实现逻辑 调用设备管理方法信息设备的默认初始化 device_manager().device_default_ini...
创建socket 在DragonOS中,Socket层是为实现各种Socket系统调用而实现的对smoltcpSocket结构体的封装。 用户程序调用sys_socket调用时,会对应调用系统的socket调用,使用参数address_family 、socket_type 、protocol 创建一个Socket,并使用该socket创建一个socket iNode,添加到文件描述符表中...
重要参考smoltcp LoopBack网卡介绍 Linux LoopBack网卡是一个虚拟的网络接口,主要用于网络软件的测试和调试。它允许主机发送网络流量到自己,而不需要任何物理设备。当数据发送到LoopBack接口时,操作系统网络栈会立即接收这些数据,就像它们从网络上接收的一样。这使得开发人员可以测试和调试网络应用程序,而无需物理网络连接。 lo网卡注册在设备中,了解一个net de...
#![cfg_attr(not(feature = "std"), no_std)] #![allow(unused_mut)] #![allow(clippy::collapsible_if)] #[cfg(feature = "std")] #[allow(dead_code)] mod utils; use core::str; use log::{debug, error, in...