- 博客(16)
- 收藏
- 关注
原创 【UNIX网络编程】I/O多路复用
本文介绍了I/O多路复用技术及其三种实现方式:select、poll和epoll。I/O多路复用通过单个线程监控多个文件描述符,提高I/O效率。select使用固定大小的位图结构,存在1024个描述符限制和轮询效率低的问题;poll改用动态数组,消除了数量限制但仍需轮询;epoll采用红黑树和就绪链表,实现了高效的事件通知机制,支持水平触发和边缘触发两种模式。文章详细说明了各技术的API接口、使用流程和底层原理,并通过代码示例展示了具体实现,最后比较了各技术的优缺点,指出epoll在高并发场景下的性能优势。
2025-08-01 09:49:19
1201
1
原创 【UNIX网络编程】5种I/O模型
本文介绍了五种I/O模型的工作原理:阻塞I/O全程等待;非阻塞I/O通过轮询检查状态;I/O复用通过select等机制监控多个描述符;信号驱动I/O由内核主动通知数据就绪;异步I/O则由内核完成所有操作后通知结果。文章通过老王烧水的生动比喻,形象说明了各种模型的特点,指出阻塞I/O效率最低,非阻塞I/O消耗CPU资源,I/O复用可提高效率,而异步I/O性能最优。不同模型适用于不同场景,理解其差异有助于系统优化。
2025-07-31 13:40:36
2157
原创 【C语言】命令行参数
本文讲解了C语言中命令行参数的传递原理。gcc命令后面的参数会传递给main函数的两个形参:argc表示参数数量,argv是指向参数字符串数组的指针。第一个参数通常是程序名称,后面的才是用户输入的参数。文章通过ls命令的示例说明程序名参数的用途,并给出一个简单的参数打印程序演示参数处理过程,帮助读者理解命令行参数的工作原理。
2025-07-30 11:27:41
721
原创 【C语言】数组和指针一样吗?
本文介绍了C/C++中数组与指针的核心区别与联系。数组是连续内存块的别名,直接存储数据且大小固定,而指针是存储内存地址的变量。虽然数组名在表达式中会退化为指向首元素的指针常量,使二者都能使用[]或指针算术访问元素,但它们在内存分配、sizeof行为、可修改性等方面存在本质差异。特别强调数组名作为sizeof或&操作数时不会退化,此时&arr得到的是整个数组的地址而非首元素地址。理解这些区别对避免编程错误和写出高效代码至关重要。
2025-07-28 11:08:32
903
原创 【开发环境配置】VScode里面配置cmake遇到的问题
本文总结了使用CMake时常见的三种错误及解决方法。首先需要确保VSCode安装了必要扩展包并正确编写CMakeLists.txt文件。
2025-07-25 14:55:01
3324
原创 【进程间通信】Posix 共享内存
本文介绍了共享内存通信机制及其相关函数。共享内存是进程间通信(IPC)中最快的方式,通过将内存映射到进程地址空间,避免了内核数据拷贝的开销。文章详细讲解了mmap、munmap、msync等核心函数,以及Posix共享内存区的shm_open/shm_unlink方法。通过生产者-消费者模型的代码示例,展示了如何使用环形队列结合信号量实现共享内存通信。该机制相比管道、消息队列等传统IPC方式,减少了数据在内核和用户空间之间的复制次数,显著提高了通信效率。文末提供的完整代码示例可帮助理解共享内存的实际应用。
2025-07-24 16:15:30
2374
原创 【进程间通信】Posix 信号量
本文介绍了POSIX信号量的两种类型及其使用方式。有名信号量通过内核维护,使用sem_open()创建/打开,sem_wait()/sem_post()进行P/V操作,sem_close()/sem_unlink()关闭删除。基于内存的信号量通过sem_init()初始化,需配合共享内存实现进程间同步。文中提供了两种信号量的代码示例:有名信号量的生产者-消费者模型演示了基本的同步操作;基于内存的信号量则实现了一个环形队列的生产者-消费者模型。
2025-07-24 10:57:26
1266
原创 【进程间通信】Posix 消息队列
Posix消息队列比较简单:mq_open创建一个新队列或打开一个已存在的队列,mq_close关闭队列,mq_unlink则删除队列名。往一个队列中放置消息使用mq_send,从一个队列中读出消息使用mq_receive。队列属性的查询与设置使用mq_getattr和mq_setattr,函数mq_notify则允许我们注册一个信号或线程,它们在有一个消息被放置到某个空队列上时发送(信号)或激活(线程)。队列中的每个消息被赋予一个小整数优先级,mq_receive每次被调用时总是返回最高优先级的最早消息。
2025-07-22 09:49:54
1087
原创 【进程间通信】Posix IPC
Posix IPC概述 Posix IPC包含消息队列、信号量和共享内存三类进程间通信机制。三类IPC均以/name格式命名,通过mq_open、sem_open和shm_open创建或打开,支持O_CREAT(不存在则创建)、O_EXCL(排他创建)等标志。权限模式mode(八进制数)指定读写权限。
2025-07-21 14:28:30
766
原创 【UNIX环境高级编程】线程_1_线程创建
本文介绍了POSIX线程的基本概念和使用方法。POSIX线程允许多线程并发执行,提升程序效率。传统UNIX进程是单线程的,而多线程使一个进程能同时处理多个任务。每个线程拥有唯一ID,需使用pthread_equal()比较ID。通过pthread_create()创建新线程,可设置线程属性和启动函数;新线程继承进程地址空间、浮点环境和信号屏蔽字,但不继承未决信号集。示例代码演示了线程创建、ID获取、参数传递和等待过程。
2025-07-21 10:34:25
371
原创 【UNIX环境高级编程】线程控制_1_线程属性
本文介绍了线程属性的设置方法,重点讲解了pthread_attr_t结构体的使用。主要内容包括:1)通过pthread_attr_init()和pthread_attr_destroy()初始化和销毁线程属性;2)设置分离状态(detachstate)属性,使线程以分离状态启动;3)线程栈属性(stackaddr/stacksize)的获取和设置方法;4)警戒缓冲区大小(guardsize)属性的作用及设置。文中还提供了设置分离状态线程的完整代码示例,并分析了线程属性操作的注意事项。这些属性设置可以优化线程
2025-07-19 15:35:55
1098
原创 【UNIX环境高级编程】c语言实现线程池(基础版)
本文介绍了一个基础的线程池实现代码及其原理。线程池通过预先创建线程、复用线程来避免频繁创建销毁的开销,提高系统性能。文章提供了完整的C语言实现代码,包括线程池初始化、任务添加和销毁等功能。核心组件包括线程池管理者、任务队列和工作线程。同时讨论了线程池参数设置原则:CPU密集型任务推荐线程数等于CPU核数,I/O密集型任务可设为CPU核数的2倍。后续将扩展动态调整等进阶功能。
2025-07-18 14:27:24
877
原创 【C语言】结构和联合
摘要:本文介绍了C语言中结构和联合两种复合数据类型。结构体用于组合不同类型的数据项(如人的姓名、年龄等)。联合体则允许多个成员共享同一内存空间,同一时间只能存储一个成员值,常用于节省内存或类型转换场景。
2025-07-16 16:34:33
550
原创 【UNIX环境高级编程】线程_6_线程同步
本文介绍了多线程编程中的同步机制,重点讲解了互斥量、读写锁和条件变量的原理及使用方法。互斥量通过加锁确保共享资源的独占访问,避免数据竞争;读写锁允许多线程同时读取但互斥写入,提高并发性能;条件变量使线程能有效等待特定条件满足。文章通过代码示例展示了这些同步机制的实际应用,包括避免死锁的方法、读写锁的使用场景以及生产者-消费者模型的实现。最后强调合理使用这些同步机制对保证多线程程序正确性的重要性。
2025-07-16 13:44:53
1117
原创 【UNIX环境高级编程】线程_5_线程终止
本文介绍了POSIX线程库中线程终止与清理的相关函数。主要内容包括:pthread_exit() - 线程显式终止自身并传递退出状态值pthread_join() - 阻塞等待线程终止并获取其退出值pthread_cancel() - 请求取消指定线程pthread_cleanup_push/pop() - 注册和调用线程清理处理程序,用于资源释放
2025-07-15 20:21:36
708
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅