Linux 新增系统调用的启示

最近在研究 Linux 内核的时间子系统,为下一篇长文《服务器程序中的日期与时间》做准备,无意中注意到了 Linux 新增的几个系统调用的对编写服务器代码的影响,先大致记录在这里。这篇博客也可算作前一篇《多线程服务器的常用编程模型》的一个注脚。

1. 服务器程序的风格可能在变

新的创建文件描述符的 syscall 一般都支持额外的 flags 参数,可以直接指定 O_NONBLOCK 和 FD_CLOEXEC,例如:

  • accept4 – 2.6.28
  • eventfd2 – 2.6.27
  • inotify_init1 – 2.6.27
  • pipe2 – 2.6.27
  • signalfd4 – 2.6.27
  • timerfd_create 2.6.25

以上 6 个 syscalls,除了最后一个是新功能,其余的都是增强原有的调用,把数字尾号去掉就是原来的 syscall。

O_NONBLOCK 的功能是开启“非阻塞IO”,而文件描述符默认是阻塞的。

这些创建文件描述符的系统调用能直接设定 O_NONBLOCK 选项,或许能反映当前 Linux (服务端)开发的风向,那就是我在前一篇博客《多线程服务器的常用编程模型》里推荐的 one loop per thread + (non-blocking IO with IO multiplexing)。从这些内核改动来看,non-blocking IO 已经主流到让内核增加

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值