首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在同一个ARM64 Linux上调用select时,两个不同大小的结构timeval都可以工作?

在同一个ARM64 Linux上调用select时,两个不同大小的结构timeval都可以工作的原因是因为select函数的参数中的timeval结构体是用来设置超时时间的,而不是用来传递实际的时间值的。

select函数是一个多路复用的系统调用,用于监视一组文件描述符的状态变化。它可以同时监视多个文件描述符,当其中任意一个文件描述符就绪(可读、可写或异常)时,select函数就会返回。在调用select函数时,我们可以通过设置timeval结构体来指定超时时间,即在指定时间内如果没有任何文件描述符就绪,select函数会超时返回。

在ARM64 Linux上,select函数的参数中的timeval结构体有两个字段:tv_sec和tv_usec。tv_sec表示超时时间的秒数,tv_usec表示超时时间的微秒数。这两个字段的类型分别是long和long,所以不同大小的timeval结构体在ARM64 Linux上都可以工作。

无论是使用较小的timeval结构体还是较大的timeval结构体,select函数都会根据tv_sec和tv_usec字段的值来计算超时时间,并在超时时间到达或有文件描述符就绪时返回。因此,选择使用哪个大小的timeval结构体取决于具体的需求和编程习惯。

在腾讯云的产品中,与云计算相关的推荐产品是云服务器(ECS),它提供了基于ARM架构的云服务器实例,可以满足不同规模和需求的应用场景。您可以通过以下链接了解更多关于腾讯云服务器的信息:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux时间子系统之时间表示示例详解

前言 Linux内核中,为了兼容原有的代码,或者符合某种规范,并且还要满足当前精度日益提高要求,实现了多种与时间相关但用于不同目的数据结构: 1)jiffies和jiffies_64 内核用jiffies...= jiffies_64; 玄机在这里,原来链接时候指定了符号jiffies和jiffies_64指向同一个地址。...一般情况下,无论32位或64位机器,我们都可以直接访问jiffies全局变量,但如果要获得jiffies_64全局变量,则需要调用get_jiffies_64函数。...最重要是后面,先将两个无符号长整形相减,然后将他们变成有符号长整型,再判断其是否为负数,也就是32位最高位是否为1。 为什么这样可以部分解决所谓回绕问题呢?...所以,也就是说64位系统,timespec和timespec64结构体是一模一样

3.7K21

IO多路复用三种机制Select,Poll,Epoll

const struct timeval *timeout timeout告知内核等待所指定文件描述符集合中任何一个就绪可花多少时间。其timeval结构用于指定这段时间秒数和微秒数。...(不管是Socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系工作由程序员完成,当调用select(),由内核根据IO状态修改fd_set内容,由此来通知执行了select()进程哪一...用户可以注册多个socket,然后不断地调用select读取被激活socket,即可达到同一个线程内同时处理多个IO请求目的。而在同步阻塞模型中,必须通过多线程方式才能达到这个目的。...其中,结构events域是监视该文件描述符事件掩码,由用户来设置这个域,结构revents域是文件描述符操作结果事件掩码,内核调用返回设置这个域 nfds_t nfds 记录数组fds中描述符总数量...---- 既然select,poll,epoll都是I/O多路复用具体实现,之所以现在同时存在,其实他们也是不同历史时期产物 select出现是1984年BSD里面实现 14年之后也就是1997

1K20

select,poll,epoll区别

select一个缺点在于单个进程能够监视文件描述符数量存在最大限制,Linux一般为1024,不过可以通过修改宏定义甚至重新编译内核方式提升这一限制。...例如,假设有两个文件描述符,值分别是7和9,被放在readfds中。当select()返回,如果7仍然set中,则这个文件描述符已经准备好被读取而不会阻塞。...当select()返回,timeout参数状态不同系统中是未定义,因此每次调用select()之前必须重新初始化timeout和文件描述符set。...每个结构events域是监视该文件描述符事件掩码,由用户来设置这个域。revents域是文件描述符操作结果事件掩码。内核调用返回设置这个域。...更甚至一个数据包面数目巨大但同时每个数据包本身大小却很小特殊系统尝试最新NAPI网卡驱动架构。

1.3K21

Redis 和 IO 多路复用

Redis为什么这么快 完全基于内存,绝大部分请求是基于内存操作,而 Redis 数据结构是类似于HashMap,而 HashMap 操作时间复杂度是O(1) Redis 数据结构设计简单,方便操作... I/O 多路复用模型中,最重要函数调用就是 select,该方法能够同时监控多个文件描述符可读可写情况,当其中某些文件描述符可读或者可写select 方法就会返回可读以及可写文件描述符个数...FD; 使用 FD_SET 将 fd 加入 rfds; 调用 select 方法监控 rfds 中 FD 是否可读; 当 select 返回,检查 FD 状态并完成对应操作。...子模块中最重要函数就是 aeApiPoll,它是实际调用 select 函数部分,其作用就是 I/O 多路复用函数返回,将对应 FD 加入 aeEventLoop fired 数组中,并返回事件个数..." #endif #endif #endif 因为 select 函数是作为 POSIX 标准中系统调用不同版本操作系统都会实现,所以将其作为保底方案: ?

62310

Linux阅码场 - Linux内核月报(2020年07月)

它允许客户EC2实例[1]内部再分割出一块隔离计算环境。 例如,一个虚拟机中运行用于处理敏感数据应用程序,可以和运行在同一个虚拟机中其它应用程序分离开。...为了支持虚拟机客户系统使用更大页面,我们需要在hypervisor-guest通信中正确地在这两个不同页面大小间进行转换。这基本就是这个PATCH系列所做工作。...同时也提供了 Kconfig 配置,只用模块参数和 Kconfig 配置同时使能,debugfs才能正常工作。 总的来说,此补丁为用户提供了一个动态开关 debugfs 功能。...实际连带元数据改动都可以由新添加extent记录推导出来。如果日志只记录原始数据和相关关系,日志应用 再根据信息推导和还原,就能大量减少日志体量。...2.5 Mount notifications 此系列补丁为挂载拓扑事件做了个主动上报机制,例如挂载、卸载、挂载重新配置等事件触发向用户空间上报事件。 为什么需要内核主动上报呢?

1.5K20

万字图解| 深入揭秘IO多路复用

epoll边缘触发、水平触发区别、适合场景 为什么 Linux 网络编程中最好用非阻塞式 IO?...里面,文件描述符个数已经随着 fd_set 实现而固定,没有办法对此进行配置;而在 poll 函数里,我们可以自由控制 pollfd 结构数组大小,从而突破select中面临文件描述符个数限制...《The Linux Programming Interface》中用了一张图直观展示了 select、poll、epoll不同数量文件描述符下性能。...rbr:用户调用epoll_ctl增加文件描述都存储在这,其本质是一颗红黑树。 其工作流程主要如图所示: epoll 相比select、poll为什么高效?...为什么 Linux 网络编程中最好用非阻塞式 IO?     前面提到过,如果使用阻塞IO,假如某个文件描述符长期不可读,那么对应线程就会长期阻塞,导致资源被浪费。

1.4K22

Linux阅码场 - Linux内核月报(2020年08月)

in BPF subprograms 目前BPF对BPF程序本身调用和尾部调用是互斥,但是该补丁成功让他们可以同时工作,即让尾部调用可以和BPF子程序同时工作。...Arm64架构Hyper-V虚拟机中运行Linux客户机需要工作还有一些地方还在进行中:Arm64架构Hyper-V目前运行时页面大小为4K字节,但允许客户机使用16K或者64K字节大小页面...然而,Hyper-V虚拟设备Linux驱动程序中,客户机系统使用页面大小被假设为4K字节。这个补丁集为客户机系统使用更大页面先做一些基础工作,后续会有跟多补丁来更新这些驱动程序。...这个驱动将在晚些时候被修复用以使能Arm64vPCI设备。*一些情况下,来自x86/x64术语也被带到了Arm64代码中(“MSR”、“TSC”)。...(译注:不同于Arm,Xenx86支持以下3种类型客户机:PV Guest,HVM和PVH。下图是这三种类型客户机推出时间线。

1.4K92

linux环境下时间编程

+8小,这是为什么呢?...而我们知道地球根据经度不同对于各地区的人来说时间也是不同,因此为了正常生活需要划分出时区;各时区时间不同,但某些事物会在不同时区同时发生,因此又需要一个统一标准时来确定时间,这句是协调世界(UTC...所以我们Linux处理时间一定要注意上下文中时间值附带时区信息。...在看过这些常用接口之后,我觉得你现在一定陷入混乱了,因为每个函数对时区假设都不同,甚至一个函数参数和返回值时区也不相同!这就是为什么Linux处理时间问题会成为噩梦原因之一。...使用timeval结构函数也少可怜,只有select和pselect。

3.3K30

PostgreSQL 如果放在 X86 或 ARM “摩擦” 到底哪个性能好?(翻译)

ARM架构不怎么熟悉,甚至我都不知道什么是ARM,实际PG已经有一阵有基于ARM64安装包了,对于ARM 信心来自我对不同场景下测试结果。...这里我测试方式是基于pgbench 测试方式通过比较X86 64 VS ARM64 ,但这并不是目标,实际我就想找到ARM结构PG 什么场景下,比X86性能好。...这里还有一个事情要提到,PGBENCH 和我们数据库是安装在一起,这个程序本身要占用20%CPU 资源,另外有一点我也没有能明白就是6-8上升速度这可能与LINUX 系统参数有关,从测试图中我们很明显可以看到...结论: 从上面的测试中可以看出在ARM64工作情况还是良好,虽然两个平台上进行性能比较工作其实也没有那么容易,我们实际可以看到不同模式下,两个平台各自不同。...翻译结束 —————————————————————————————— 个人观点,测试并不是很严谨,仅仅通过pgbench来进行测试,这里只能说明一些简单语句PG工作情况,但值得注意是,ARM

2K40

使用epoll需要将socket设为非阻塞吗?

函数 timeout 参数类型是一个结构体指针,这个结构定义如下: struct timeval  {     long    tv_sec;         /* seconds */     ...select 函数 timeout 参数含义有三种: 当 timeout 为 NULL select 函数将一直阻塞下去,直到出错或者绑定其 socket 有事件; 当 timeout->tv_sec...282 4.1 学习网络编程应该掌握socket函数 282 4.1.1 Linux查看socket函数帮助信息 283 4.1.2 Windows查看socket函数帮助信息 285...4.2 TCP网络通信基本流程 286 4.3 设计跨平台网络通信库一些socket函数用法 290 4.3.1 socket数据类型 290 4.3.2 Windows上调用socket函数...4.5 select函数用法和原理 302 4.5.1 Linuxselect函数 302 4.5.2 Windowsselect函数 317 4.6 socket阻塞模式和非阻塞模式 318

2.2K10

详解IO多路转接模型:select & poll & epoll

那么输出,假设这些文件描述符1,5都已经就绪,输出回来时,这个合集中1,5比特位位置内容为1,而3由于没有就绪,就为0。需要注意是,输入输出都是同一个位图,是同一个!...每次调用poll都需要把大量pollfd结构从用户态拷贝到内核中。 同时连接大量客户端刻可能只有很少处于就绪状态, 因此随着监视描述符数量增长, 其效率也会线性下降。...int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); 它不同select()是监听事件告诉内核要监听什么类型事件...使用epoll_create时候,会创建出一个eventpoll这个结构体,这个结构体里面有两个指针成员,一个指向就绪队列,一个指向红黑树。...总结它们三者之前优缺点: 可以等待文件描述符数量select是有上限,取决于它位图类型fd_set大小。poll跟poll是没有上限

51640

UNPv1第六章:IO复用select&poll

5种基本I/O模型 阻塞式I/O 非阻塞式I/O I/O复用(select和poll) 信号驱动式I/O(SIGIO) 异步I/O 一个输入操作通常包括两个不同阶段 (1)等待数据准备 (2...(3)IO复用模型 有了I/O复用,我们就可以调用select或poll,阻塞在这两个系统调用某一个之上,而不是阻塞真正I/O系统之上 我们阻塞于select调用,等待数据报套接字变为可读...,当select返回套接字可读这一条件调用recvfrom把所读数据复制到应用程序缓冲区内。...另外使用select优势在于我们可以等待多个描述符就绪 ? (4)信号驱动IO模型 可以用信号让内核描述符就绪发送SIGIO信号通知我们 ?...3 shutdown函数 终止网络连接正常方法是调用close,但close有两个限制可由函数shutdown来避免: 1). close将描述字访问计数减1,仅在此计数为0才关闭套接口。

54930

Linux内核时钟系统和定时器实现

HZ表示1秒种产生多少个时钟硬件中断,tick就表示连续两个中断间隔时间。我电脑,HZ=250, 一个tick = 1/HZ, 所以默认一个tick为4ms。...上图1是Linux 2.6.16以来内核定时器实现结构, 新内核对相关时间硬件设备进行了统一封装,定义了主要有下面两个结构: 时钟源设备(closk source device):抽象那些能够提供计时功能系统硬件...那么sleep是如何实现?Glibcsleep实现如下:可见其实调用alarm实现alarm基础注册了SIGALRM信号处理函数,用于定时器到期,捕获到信号,回到睡眠地方。...函数setitimer 设置定时器则不同,它们不但可以计时到微妙(理论),还能自动循环定时。一个Unix进程中,不能同时使用alarm和ITIMER_REAL类定时器。...需要自己完成一些辅助工作,因为内核无法 Timer 到期启动一个新线程。

3.4K30

聊聊BIO,NIO和AIO (1)到底什么是“IO Block”BIONIOIO多路复用用epoll实现IO多路复用epoll优势水平触发和边沿触发再来思考一下什么是“Block”总结

考虑下面两种情况: 用系统调用read从socket里读取一段数据 用系统调用read从一个磁盘文件读取一段数据到内存 如果你直觉告诉你,这两种都算“Block”,那么很遗憾,你理解与Linux不同...Linux认为: 对于第一种情况,算作block,因为Linux无法知道网络对方是否会发数据。如果没数据发过来,对于调用read程序来说,就只能“等”。 对于第二种情况,不算做block。...多个数据流共享同一个TCP连接场景的确是有,比如Http2 Multiplexing就是指Http2通讯中中多个逻辑数据流共享同一个TCP连接。但这与IO多路复用是完全不同问题。...如果是追求性能的话,BSD/macOS提供了kqueue api;Salorias中提供了/dev/poll(可惜该操作系统已经凉凉);而在Linux提供了epoll api。...时刻t2两个fd都到了100bytes数据,于是时刻t3, epoll_wait返回了两个fd进行处理。t4,我们故意不读取所有的数据出来,只各自读50bytes。

1.8K80

Linux】IO多路复用-SELECTPOLLEPOLL

---- select select-函数 一段指定时间内,监听用户感兴趣文件描述符可读、可写和异常等事件。...---- timeval-结构结构体定义 struct timeval{ long tv_sec; // 秒 long tv_usec; // 微秒 }; 如果结构timeval 两个域都为...可能产生情景: 一个线程(或进程)在读取完某个socket数据并开始处理处理过程中该socket又有新数据可读(EPOLLIN被再次触发),此时唤醒另一个线程来读取这些新数据。...于是就出现了两个线程操作一个socket局面。 使用: 使用epoll_ctrl函数该socket(文件描述符)注册EPOLLONESHOT事件。...工作模式: select与poll都只能工作相对低效LT模式,而epoll可以工作高效ET模式。

87330

(六)关于网络编程一些实用技巧和细节

那么如何利用connect()函数编写非阻塞连接代码呢? 无论windows还是linux平台都可以采取以下思路来实现: 1....接着调用select()函数指定时间内检测socket是否可写,如果可写表明connect()连接成功。...一般做法是先收取一个固定大小包头信息,接着根据包头里面指定包体大小来收取包体大小(这里“收取”既可以从socket收取,也可以已经收取数据缓冲区里面拿取)。...但是windowslinux实现稍有差别,windows是一个socket回收后,MSL期间内,其使用地址和端口号组合其他进程不可以使用,但本进程可以继续重复利用;而linux实现是所有进程...但是有人说,x86机器gettimeofday不是系统调用,所以libevent没必要这么做。有没有必要,我们借鉴一下这个减少系统调用思想而已。

1.1K70

聊聊BIO,NIO和AIO (1)

考虑下面两种情况: 用系统调用read从socket里读取一段数据 用系统调用read从一个磁盘文件读取一段数据到内存 如果你直觉告诉你,这两种都算“Block”,那么很遗憾,你理解与Linux不同...Linux认为: 对于第一种情况,算作block,因为Linux无法知道网络对方是否会发数据。如果没数据发过来,对于调用read程序来说,就只能“等”。...多个数据流共享同一个TCP连接场景的确是有,比如Http2 Multiplexing就是指Http2通讯中中多个逻辑数据流共享同一个TCP连接。但这与IO多路复用是完全不同问题。...如果是追求性能的话,BSD/macOS提供了kqueue api;Salorias中提供了/dev/poll(可惜该操作系统已经凉凉);而在Linux提供了epoll api。...时刻t2两个fd都到了100bytes数据,于是时刻t3, epoll_wait返回了两个fd进行处理。t4,我们故意不读取所有的数据出来,只各自读50bytes。

75730

(六)关于网络编程一些实用技巧和细节

无论windows还是linux平台都可以采取以下思路来实现: 创建socket,将socket设置成非阻塞模式,具体如何设置可参考我这个系列文章《服务器编程心得(四)—— 如何将socket设置为非阻塞模式...接着调用select()函数指定时间内检测socket是否可写,如果可写表明connect()连接成功。...一般做法是先收取一个固定大小包头信息,接着根据包头里面指定包体大小来收取包体大小(这里“收取”既可以从socket收取,也可以已经收取数据缓冲区里面拿取)。...但是windowslinux实现稍有差别,windows是一个socket回收后,MSL期间内,其使用地址和端口号组合其他进程不可以使用,但本进程可以继续重复利用;而linux实现是所有进程...但是有人说,x86机器gettimeofday不是系统调用,所以libevent没必要这么做。有没有必要,我们借鉴一下这个减少系统调用思想而已。

1.9K51
领券