
linux进阶
文章平均质量分 92
卜及中
一天真的很短,拿点时间看看周围
展开
-
【Linux】资源控制机制 — cgroups 详解
Cgroups(控制组)是 Linux 内核提供的一项功能,旨在对一组进程进行资源分配、限制、优先级调整和监控。通过 Cgroups,系统管理员可以将进程组织成多个组,并对这些组的资源使用情况进行控制和管理。Cgroups 允许用户对 CPU、内存、磁盘 I/O、网络带宽等资源进行细粒度的管理,能够限制、优先分配或监控这些资源,确保系统资源在多个进程或容器之间合理分配。原创 2024-12-23 15:15:33 · 2106 阅读 · 0 评论 -
【Linux】资源隔离机制 — 命名空间(Namespace)详解
Namespace(命名空间)是 Linux 内核提供的一种资源隔离机制。它允许将系统资源分隔成多个虚拟的“空间”,每个命名空间内的进程只能访问该命名空间下的资源,而不能访问其他命名空间中的资源。通过namespace,不同的进程可以在同一个操作系统内共享硬件资源,但又能感知到各自独立的环境。具体来说,namespace可以将一个或多个进程的资源隔离到同一个命名空间中,确保这些进程只能看到和操作该命名空间内的资源。原创 2024-12-23 10:28:46 · 2696 阅读 · 0 评论 -
【Linux多线程】理解自旋锁的原理以及代码使用
在需要快速加锁和解锁的场景下,自旋锁相较于其他锁机制(如互斥锁)更适合。例如,在某些高性能计算的场景中,线程快速执行短小的任务,而这些任务之间需要极少的共享资源,使用自旋锁会带来明显的性能优势。在某些实时系统中,自旋锁可以避免线程阻塞,从而更快地响应事件。比如,硬件中断处理程序中,时间至关重要,此时自旋锁可以在特定条件下提供更低的延迟。在多个线程申请锁时, 会持续自旋(在循环中持续检查锁是否可用) ,而不会立刻进入休眠状态等待锁释放。这种机制减少了线程切换的开销,适用于短时间内锁竞争的情况。原创 2024-11-11 10:54:58 · 866 阅读 · 0 评论 -
【Linux】从内核角度理解 TCP 的 全连接队列(以及什么是 TCP 抓包)
当服务器来不及进行accept时,底层的TCP listen sock依然允许建立三次握手,建立连接成功,但这个建立连接的数量是有限的:backlog + 1,这个长度就是全连接队列的长度。另外,pcap 后缀的文件与 PCAP(Packet Capture) 文件格式相关,即用于捕获网络数据包的文件格式。使用 -w 选项可以将捕获的数据包保存到文件中, 以便后续分析。上面的图片基本揭示了当创建一个文件描述符后,是如何建立连接读取数据的。是一款强大的网络分析工具, 主要用于捕获和分析网络上传输的数据包。原创 2024-10-31 16:35:37 · 1081 阅读 · 0 评论 -
【Linux】守护进程与作业控制:进程组、会话与控制终端
本文深入探讨了守护进程的概念及其在 UNIX/Linux 系统中的重要性。守护进程作为后台运行的进程,承担着系统管理和资源监控的任务。首先介绍了进程组和会话的基本定义,阐明了它们在进程管理中的作用。接着,详细解释了控制终端的功能及其与会话的关系,以及如何通过作业控制实现对进程的管理和调度。此外,文章还讨论了中断信号和挂断信号的机制,帮助读者理解这些概念如何影响进程的运行状态。通过对这些基本概念的深入分析,读者将能够更好地掌握守护进程及其在操作系统中的应用。原创 2024-10-24 10:21:26 · 773 阅读 · 0 评论 -
【Linux】基于 环形队列 的生产者消费者模型(C++)
环形队列的生产者-消费者模型是一种常用的并发编程模式,主要用于协调生产者和消费者之间的任务处理。这是一个固定大小的缓冲区,队列的末端与起始端相连,形成一个环。队列通常有两个指针:一个指向队列的头部(消费者操作)和一个指向队列的尾部(生产者操作)。生产者负责生成数据并将其放入队列。生产者在队列未满时,将数据写入尾部,并更新尾指针。当队列满时,生产者需要等待。消费者从队列中取出数据进行处理。消费者在队列非空时,从头部取出数据,并更新头指针。当队列为空时,消费者需要等待。原创 2024-08-29 22:13:52 · 1044 阅读 · 0 评论 -
【高级IO总结】深度探索高级IO:五种IO模型、高级IO、Select、Poll、Epoll工作模式
IO 是“Input/Output”(输入/输出)的缩写,指的是计算机系统与外部世界之间的数据传输和交换过程。网络通信的本质就是:IO总体来说,IO的效率是相对较低的,为什么?—— 以读取为例当我们在进行时:当底层缓冲区没有数据时 -> 会阻塞,只能等待当底层缓冲区有数据时 -> 进行拷贝IO = 等待 + 数据拷贝(这两个因素的组合决定了整体 IO 操作的效率和性能)自然在单位时间内,等待的时间比重越小,则IO效率越高。原创 2024-08-29 12:43:58 · 310 阅读 · 0 评论 -
【索引】深度探索多线程:线程概念、同步、互斥、安全、线程池、生产者消费者模型、读写者
对于多线程,我们需要学习的内容有:【Linux 多线程 - 1】理解线程:概念、优缺点及与进程的比较【Linux多线程】线程控制与分离线程(POSIX库的理解与相关函数的使用)【Linux多线程】线程互斥 与 常见的锁(无锁化编程)【Linux多线程】线程同步 与 生产者消费者模型(无锁化模型)【linux】深入了解线程池:基本概念与代码实例(C++)【Linux多线程】线程安全的单例模式原创 2024-08-29 11:14:54 · 283 阅读 · 0 评论 -
【Linux 多线程 - 1】理解线程:概念、优缺点及与进程的比较
本文用于理解线程、并分析线程与进程的关系;包括线程优缺点、多线程的意义、线程异常、进程线程的对比原创 2024-08-28 19:02:45 · 777 阅读 · 0 评论 -
【Linux】全面解析进程:优先级、环境变量与地址空间
本文详细介绍了什么是进程,主要包括五个章节,进程概念、Linux下的进程、进程优先级、环境变量、进程地址空间;每个部分都包含了代码实例以及详细内容解释。原创 2024-08-26 21:42:42 · 997 阅读 · 0 评论 -
【高级IO-4】I/O多路转接 之 epoll(概念及代码实例)
本文详细介绍了IO多路转接的epoll工作模式,包括:优缺点、工作原理、使用过程、工作模式、惊群问题、代码实例等原创 2024-08-23 20:56:35 · 1204 阅读 · 0 评论 -
【高级IO-3】I/O多路转接 之 poll(概念及代码实例)
在使用套接字(Socket)进行网络编程时,套接字的就绪条件表示可以进行某种操作的条件,主要用于异步 I/O 操作,例如通过。:套接字缓冲区有足够的空间可以写入数据,即发送缓冲区有足够的空间可以发送数据,可以调用。对于客户端套接字来说,连接就绪表示连接成功建立,可以进行数据交换。函数会在指定的一组文件描述符上等待指定的事件发生,并将发生的事件保存在。等)来监视,当套接字处于就绪状态时,这些函数会通知应用程序执行相应的操作。:套接字缓冲区中有数据可供读取,即接收缓冲区中有数据到达,可以调用。原创 2024-08-23 09:37:28 · 938 阅读 · 0 评论 -
【高级IO-2】IO多路转接之Select(概念及代码实例)
在使用套接字(Socket)进行网络编程时,套接字的就绪条件表示可以进行某种操作的条件,主要用于异步 I/O 操作,例如通过。对于服务器套接字来说,连接就绪表示已经有客户端连接请求到达,可以调用。:套接字缓冲区有足够的空间可以写入数据,即发送缓冲区有足够的空间可以发送数据,可以调用。对于客户端套接字来说,连接就绪表示连接成功建立,可以进行数据交换。等)来监视,当套接字处于就绪状态时,这些函数会通知应用程序执行相应的操作。,通常设置为需要监视的文件描述符中最大的描述符值加1。原创 2024-08-22 16:59:04 · 746 阅读 · 0 评论 -
【高级IO-1】探索五种 I/O 模型及其高级I/O技术:基于 fcntl() 的代码应用
本文首先介绍了五种IO模型的概念,以及高级IO的重要概念:如同步异步通信、阻塞与非阻塞;其他高级IO的概念;并使用fcntl函数编写实例代码原创 2024-08-21 14:45:43 · 673 阅读 · 0 评论 -
【Linux多线程】线程控制与分离线程(POSIX库的理解与相关函数的使用)
对于Linux多线程,本文介绍POSIX库以及相关接口函数的使用,在不同的部分有相应的接口使用,以及分离线程的意义和接口函数。原创 2024-08-21 12:29:07 · 1361 阅读 · 0 评论 -
【Linux多线程】线程安全的单例模式
这个模式适用于那些只需要一个实例来控制整个系统的场景,如配置管理、日志记录等。是一种单例模式的实现方式,它在第一次需要实例时才创建对象。这种方式的特点是推迟实例化,从而避免不必要的资源消耗。:吃完饭, 先把碗放下, 然后下一顿饭用到这个碗了再洗碗(节省了不必要的操作,优化速度):吃完饭,立刻洗碗;这种方式的特点是实例创建时机早,通常用于资源不多且创建实例开销较小的情况。是面向对象设计中的一种标准化、经过验证的解决方案,用于解决常见的设计问题。:关注对象之间的交互和责任分配。关注对象的创建过程。原创 2024-08-20 19:40:38 · 1088 阅读 · 0 评论 -
【Linux多线程】线程互斥 与 常见的锁(无锁化编程)
文章介绍了线程互斥的相关内容:互斥锁(接口、代码实例)、可重入与线程安全(各种可重入不可重入情况、线程安全情况、联系区别)、死锁(必要条件、避免死锁)、其他锁;原创 2024-08-20 16:46:08 · 981 阅读 · 0 评论 -
【Linux多线程】线程同步、生产者消费者模型与读者写者问题(无锁化模型)
本文介绍了四个章节:线程同步,生产者消费者模型、读者写者问题、无锁化模型;每章节都包括其组成,概念,与相关的条件变量函数与示例代码。原创 2024-08-17 11:28:16 · 1165 阅读 · 0 评论 -
深入探讨 Linux 信号:产生、阻塞与捕捉(信号集、可重入函数、原子操作)
信号(Signal)是操作系统提供的一种有限的、异步的通信机制,用于向进程传递事件通知。信号在 Unix 系统中首次引入,是进程间通信(IPC)的一部分。它们可以由内核、用户或进程本身发出,用于通知进程发生了某些事件,例如硬件异常、非法内存访问、终止请求等。原创 2024-08-12 10:22:12 · 714 阅读 · 0 评论 -
【进程间通信原理2】SystemV 共享内存、消息队列、信号量详解与代码实例
本文提到了System V共享内存的概念、结构、函数与相关示例代码;system V 消息队列的主要API函数、使用示例;system V信号量的概念与操作原创 2024-07-29 09:48:59 · 912 阅读 · 0 评论 -
进程互斥的概念 与 如何实现进程互斥(代码实例)
进程互斥是并发编程中确保安全访问共享资源的重要机制,通过适当的同步工具(如信号量、锁、自旋锁等)可以有效地避免竞态条件,保证系统的稳定性和数据的一致性。原创 2024-07-28 10:20:41 · 701 阅读 · 0 评论 -
【进程间通信原理1】进程间通信与管道(匿名管道与命名管道)详解
进程间通信原理:介绍了进程间通信的目的、发展、分类与相关命令;管道的概念、读写规则、特点,命名管道与匿名管道。原创 2024-07-28 10:09:11 · 1032 阅读 · 0 评论 -
【linux】深入了解线程池:基本概念与代码实例(C++)
线程池是一种并发编程的解决方案(线程使用模式),它由一组工作线程和一个任务队列组成。工作线程在初始化时被创建并持续运行,等待从任务队列中获取任务并执行。当任务执行完成后,线程不会退出,而是继续保持运行状态,等待下一个任务的到来。线程池不仅能够保证内核的充分利用,还能防止过分调度。原创 2024-05-23 14:59:34 · 1003 阅读 · 0 评论 -
【Linux】套接字的理解 & 基于UDP协议的套接字编程(多版本)
网络基础 - 预备知识(协议、网络协议、网络传输流程、地址管理)套接字(Socket)是计算机网络中用于实现进程间通信的一种机制。它允许在不同计算机之间或同一计算机的不同进程之间进行数据传输和通信。套接字可以看作是网络通信中的一个端点,它由IP地址和端口号组成,用于唯一标识网络中的通信实体点。套接字提供了一组接口(通常是API)用于创建、连接、发送、接收和关闭连接等操作,以实现数据的传输和通信。套接字可以分为两种类型(了解)流套接字(Stream Socket)和。原创 2024-05-17 15:45:40 · 983 阅读 · 0 评论 -
进程等待与替换:概念解析与函数使用指南(wait / exec)
文章分为进程等待和进程替换两部分:进程等待的意义,函数(wait / waitpid),status参数,获取子进程status,进程的阻塞等待及非阻塞等待。进程替换的意义、进程替换原理、以及替换函数。原创 2023-11-19 20:22:14 · 231 阅读 · 0 评论 -
顺序理清linux下的环境变量
文章介绍了 环境变量的概念,查看环境变量的相关方法:echo && printenv 命令等。环境变量的配置:.bash_profile,常见的环境变量,如何通过程序获取环境变量,本地变量,环境变量表等等原创 2023-11-16 10:28:16 · 185 阅读 · 0 评论 -
【Linux】僵尸进程、孤儿进程的理解与验证
进程之僵尸进程、孤儿进程的概念与危害、如何创建并检测僵尸进程和孤儿进程原创 2023-11-03 21:23:59 · 373 阅读 · 0 评论 -
基于 BlockQueue(阻塞队列) 的 生产者消费者模型
阻塞队列(Blocking Queue)是一种特殊类型的队列,它具有阻塞操作的特性。在并发编程中,阻塞队列可以用于实现线程间的安全通信和数据共享。阻塞队列的主要特点当队列为空时,消费者线程尝试从队列中获取(出队)元素时会被阻塞,直到有新的元素被添加到队列中为止。当队列已满时,生产者线程尝试向队列中添加(入队)元素时也会被阻塞,直到有空闲容量可用。阻塞队列通常提供入队操作、出队操作以及获取队列大小等基本方法。阻塞队列的实现在下文生产者消费者模型是一种常用的并发编程模型,用于。原创 2023-08-21 21:51:45 · 577 阅读 · 0 评论 -
基于互斥锁的生产者消费者模型
生产者消费者模型是一种常用的并发编程模型,用于解决多线程或多进程环境下的协作问题。该模型包含两类角色:生产者和消费者。生产者负责生成数据,并将数据存放到共享的缓冲区中。消费者则从缓冲区中获取数据并进行处理。生产者和消费者之间通过共享的缓冲区进行数据交互。为了确保线程安全,生产者和消费者需要遵循一些规则如果缓冲区已满,则生产者需要等待直到有空间可用。如果缓冲区为空,则消费者需要等待直到有数据可用。生产者和消费者都不能访问缓冲区的内部结构,只能通过特定的接口进行操作。原创 2023-08-19 09:45:05 · 666 阅读 · 0 评论