- 博客(6)
- 收藏
- 关注
原创 IO多路复用之poll的简单介绍(基于select)
先从简单的看起,第三个参数timeout是一个int类型的整型,代表毫秒。当传入大于0的数据时,如500,poll会在500ms内阻塞,超过500ms时返回一次。当传入0时,poll非阻塞等待。传入小于0的数据时,poll阻塞式等待。第一个参数fds是一个结构体指针,具体定义如下与select的参数不同,它并不是一个输入输出型参数,而是更接近于一个数组。成员fd表示监视的文件描述符;成员events表示需要系统监听的事件集合;成员revents表示返回的事件集合。事件类型如下表所示:事件描述。
2024-01-03 14:54:34
351
1
原创 IO多路复用之select的简单介绍与使用
select早期需要包含三个头文件,现在只需要包含<sys/select.h>就好了。第一个int类型的参数nfds,代表select要监视的多个fd中的最大的那个fd+1。除了第一个参数其他参数均为输入输出型参数。第五个struct timeval结构体指针类型的参数timeout,先看一下结构体timeval的定义。两个长整形参数,一个代表秒,一个代表毫秒。当传入的参数为空指针null时,说明select为阻塞式调用。当传入的参数为{0 ,0}时,说明select为非阻塞式调用。
2023-12-28 14:51:44
957
1
原创 快速排序的基本思路及实现
从上文中我们可以看出key值的好坏决定了快排的效率,一旦key取得不好,调用堆栈过深,还会有栈溢出的风险。在理想情况下,key值为数组的中位数,数组的长度为N,递归深度为logN,因此时间复杂度为N*logN,而在极端情况下,比如数组是个有序数组,且我们一直取数组的第一个数作为key,这样一来递归的深度为N-1,时间复杂度为N^2。再基于key的位置,将数组分为两部分,key的左边,key的右边,然后重复以上的操作,直到分不了,即分出的部分没有值或只有一个值为止,如图,优化后的快排代码如下,
2023-10-21 23:37:29
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人