10 2023 档案
摘要:1、简介 bitset 在 bitset 头文件中,它类似数组,并且每一个元素只能是0或1,每个元素只用1bit空间。 //头文件 #include<bitset> 2、初始化定义 初始化方法 代码 含义 bitset a a有n位,每位都为0 bitset a(b) a是unsigned long
阅读全文
摘要:头文件 #include <set> 代码 #include <set> #include <iostream> using namespace std; int main() { multiset <int> ms; ms.insert(1); ms.insert(5); ms.insert(5)
阅读全文
摘要:一、死锁代码 #include <iostream> #include <thread> #include <mutex> using namespace std; mutex mt1; mutex mt2; void thread1(){ cout << "thread1 begin" << en
阅读全文
摘要:转载:https://zhuanlan.zhihu.com/p/32027014 一、什么是服务发现 在传统的系统部署中,服务运行在一个固定的已知的 IP 和端口上,如果一个服务需要调用另外一个服务,可以通过地址直接调用,但是,在虚拟化或容器话的环境中,服务实例的启动和销毁是很频繁的,服务地址在动态
阅读全文
摘要:1、std::random_device 用于生成随机数,定义在头文件中。 #include<iostream> #include<random> void fun() { std::random_device rd; std::cout<<"random:" << rd()<<std::endl;
阅读全文
摘要:官网:https://zh.cppreference.com/w/cpp/thread/shared_mutex 1. 何为读写锁 相比互斥锁,读写锁允许更高的并行性,互斥量要么锁住状态要么不加锁,而且一次只有一个线程可以加锁。 读写锁可以有三种状态: 读模式加锁状态; 写模式加锁状态; 不加锁状态
阅读全文
摘要:设计模式 对于设计模式并不是说这样做有什么原理等,设计模式是开发人员多年开发经验。 一、单例模式 /// 饿汉模式 存在内存泄漏 class Singleton { public: static Singleton* getInstance() { cout << "func::getInstanc
阅读全文
摘要:linux内核空间 Linux 内核空间分为三个区域ZONE: ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM 物理地址空间的顶部以下一段空间,被PCI设备的I/O内存映射占据,它们的大小和布局由PCI规范所决定。640K~1M这段地址空间被BIOS和VGA适配器所占据 由于
阅读全文
摘要:锁机制 常用的锁机制有两种:悲观锁、乐观锁 1、悲观锁 假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。 悲观锁的实现,往往依靠底层提供的锁机制。 悲观锁会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。 主要有 互斥锁、自旋锁、读写锁、原子操作等。 2、乐观锁 假设不会发生并发冲突,每
阅读全文
摘要:linux 文件删除 文件删除控制的变量 i_link :文件的硬连接数量 i_count :引用计数(每有一个程序使用i_count加1) 文件删除的条件: i_link=0 & i_count=0 rm命令 对于删除命令rm而言,实际就是减少磁盘引用计数i_link。这里就会有一个问题,如果一个
阅读全文
摘要:https://zhuanlan.zhihu.com/p/641716217
阅读全文
摘要:1、背景 多线程间需进行通信,锁是通信的主要机制。但是每次使用都会引发系统调用,当锁具有低争用率时,系统调用可能会构成显著的开销。经研究发现,很多同步是无竞争的,即某个进程进入互斥区,到再从某个互斥区出来这段时间,常常是没有进程也要进这个互斥区或者请求同一同步变量的。但是在这种情况下,这个进程也要陷
阅读全文
摘要:简单来说, mutex 结构体要最少包含着两部分 { atomic:标识状态 mutex_queue: 存在等待任务 } struct mutex { /* * 1. 标记mutex对象被哪一个task(struct task_struct*)持有,如果为NULL表示还没有 * 被任何一个任务持有。
阅读全文
摘要:第一位 说实话,我之前以为字节的面试会很难很难. 但事实上我觉得非常简单. 不知道是我最近面试的很多的原因.我只是一个二本院校毕业的电子专业的.工作经验3年.代码编程什么的都是自学的,学校也不教这个东西.而且我不擅长八股和leetcode上刷题. 那为什么我觉得字节面试的很简单呢. 是因为他问的都是
阅读全文
摘要:网络通信 网络通信是一种把不同计算机或网络设备连接到一起的技术,本质上是跨系统的进程间通信,必须要通过网络(硬件)才能进行。随着高并发、分布式、云计算、微服务等技术的普及,网络的性能也变得越来越重要。 一、网络模型 1.1 OSI模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流
阅读全文
摘要:linux linux内核五大模块:进程调度、进程通信、内存管理、文件管理、网络通信 进程调度 进程是linux系统资源分配的基本单位,并采用动态优先级的进程高级算法,保证各个进程使用处理机的合理性。进程调度模块主要是对进程使用的处理机进行管理和控制。 【进程创建】: 在Linux环境编程时,一般采
阅读全文
摘要:一、总述 CPU密集型应用程序是指需要大量CPU运算能力的程序,通常涉及到大量的数据处理和计算操作,例如科学计算、图像处理和加密解密等。这些应用程序通常需要高速的CPU和大量的内存来完成任务。 IO密集型应用程序则是指需要大量输入输出操作的程序,例如网络服务器、数据库系统和文件传输等。这些应用程序通
阅读全文
摘要:linux官网:https://www.kernel.org/ 1、第一列为版本描述:主线、稳定版、长期支持版;第二列为内核版本号;第三列为最后更新时间; 2、tarball:完整的代码;pgp:验证签名;patch:基于上一个版本的补丁(一般商用的系统不会频繁的编译内核,所以可以打补丁上去方便)
阅读全文
摘要:前言 虽然我也很想讲X86_64体系,无奈这样的资料的确不多,因此本文还是本着学习的态度,探究早已经过时的X86体系。 本文转载自此文,该博主对栈的数据结构、栈的作用等进行了阐述,其中涉及了函数栈帧的相关知识,这部分内容我没有转载,我仅仅转载了我感兴趣的进程栈,线程栈等部分,并在其中融入了自己的理解
阅读全文
摘要:进程切换分两步: 1.切换页目录以使用新的地址空间 2.切换内核栈和硬件上下文 对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。 切换的性能消耗: 1、线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是
阅读全文