- 博客(13)
- 收藏
- 关注
原创 揭秘volatile:多线程编程的关键字玄机
核心作用volatile的根本作用是防止编译器优化,确保每次访问变量都直接读写内存,从而保证数据的“可见性”。不是线程同步的万能药:这是最容易混淆的一点。volatile不提供原子性,也不提供内存排序保证(即不阻止CPU或编译器对指令进行重排序)。它不能替代互斥锁或原子变量来实现线程安全。性能考量:由于阻止了相关优化,频繁访问volatile变量可能会影响性能。只在必要的场景下使用。与const结合。
2025-11-01 11:36:47
1410
原创 inotify学习总结
inotify 是 Linux 内核提供的一种文件系统变化通知机制,用于实时监控文件或目录的事件(如创建、修改、删除等)。它通过内核与用户空间的交互,以异步事件驱动的方式工作,避免了轮询带来的性能开销,适用于需要实时响应的场景,如配置热重载、自动备份、文件同步等。
2025-10-26 13:03:34
757
原创 epoll学习总结
epoll 是 Linux 系统下一种高性能的 I/O 事件通知机制,它能让一个程序高效地同时监控成千上万个网络连接(或其他文件描述符),看看哪些已经准备好了进行读取或写入操作。初始化与注册 (Setup):应用程序首先调用创建一个 epoll 实例。内核会为其初始化上述的红黑树和就绪链表。对于每个需要监控的网络连接(fd),程序调用将其添加到红黑树中进行管理。在这个过程中,内核会为每个 fd 预先设置好一个回调函数 (等待事件 (Waiting):应用程序调用epoll_wait。
2025-10-24 17:28:29
1131
原创 select, poll学习总结
这里先了解一个概念,什么是I/O多路复用?术语核心指代说明多路多个独立的 I/O 通道或数据流最常见的就是多个 Socket 网络连接(TCP/UDP)。广义上也包括其他文件描述符,如管道、终端设备等。复用同一个线程或进程一个服务单元(线程/进程)被多个 I/O 流共享,而非传统的一对一服务模型。I/O 多路复用一种机制核心是委托内核作为“代理”,监视这些“多路”I/O 流。一旦有任何一路就绪(可读/可写),内核就通知应用程序,应用程序再对就绪的流进行操作。
2025-10-12 20:16:39
1277
原创 mmap学习总结
因此,即使您的程序还在运行,只要系统内存吃紧,内核就可能提前将你的修改写回硬盘。在上一篇文章(<零拷贝技术学习总结>)中,已经完整学习了零拷贝技术,知道了mmap也是零拷贝技术的一种实现,这里介绍下mmap的工作原理和使用方式。虽然内核有自动回写,但对于关键数据,依赖不可控的延迟写入是有风险的(如系统崩溃可能导致数据丢失)。:对映射区域的修改会写回文件,并且其他映射了同一文件的进程能看到更改。因此,即使在你的程序没有调用任何同步函数的情况下,也可能观察到数据被写入硬盘,这正是内核自动回写机制在起作用。
2025-10-11 21:45:23
1126
原创 零拷贝技术学习总结
零拷贝技术是一种高效的数据传输技术,它可以将数据从内核空间直接传输到应用程序的内存空间中。这里需要注意,也是让人容易误解的,零拷贝技术的“零”并非绝对意义上的零次拷贝,而是减少数据在用户态和内核态之间不必要的CPU拷贝次数。我们需要零拷贝,是因为传统的I/O方式在数据传输过程中产生了大量冗余操作,严重制约了现代数据密集型应用的性能。零拷贝技术通过“减少不必要的CPU拷贝”和“减少用户态与内核态的上下文切换。
2025-10-11 20:09:41
806
原创 Linux崩溃问题定位办法总结一
背景:在项目中,总会遇到一些应用层调用系统提供的函数后,发生一些偶发性的,并且难以定位的应用崩溃问题,因为最初都是偶发性和无规律性,所以对解决问题产生很大阻碍,好不容易复现一次问题,结果抓取的日志没有什么用处,后面查找了很多资料,找到了办法可以很好的解决这类问题,至少给自己处理一些其他类似问题带来了很好的思路,不像以前那样无力。第一种办法是利用maps文件和反汇编定位崩溃地址,比较复杂的,难以定位的崩溃问题可以用这个办法试下。利用文件和反汇编工具可以精确定位程序崩溃的地址。
2025-10-07 12:05:35
773
原创 Valgrind查找内存泄漏和句柄泄漏问题
Valgrind 是一款用于内存调试、内存泄漏检测及性能分析的工具集。其中memcheck是默认工具,用于检测内存泄漏和非法内存访问。
2025-10-06 13:57:05
695
原创 Perf抓取CPU热点函数
摘要:Perf是Linux内核提供的性能分析工具,主要用于定位CPU热点函数和优化性能。它支持采样、统计和追踪等多种模式,通过监控CPU性能计数器、跟踪内核/用户态事件来分析性能问题。
2025-10-06 10:11:59
1332
原创 pthread_cancel踩坑
【摘要】pthread_cancel存在资源泄漏、状态不一致等风险,应尽量避免使用。如需取消线程,应设置清理函数并使用延迟取消模式,关键操作前禁用取消。更安全的替代方案包括:1)使用标志位控制线程主动退出;2)通过pthread_kill发送信号触发线程安全退出。建议优先采用协作式终止机制,避免强制取消导致的不可控问题。文中通过代码示例对比展示了不安全取消与安全退出的实现差异,强调多线程程序设计应确保资源的正确释放和状态的完整性。
2025-10-05 17:37:25
515
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅