linux select检测为啥是监听套接字

linux select检测为啥是监听套接字,第1张

select系统调用的作用就是让程序在多个文件描述符上进行等待,而套接字也是属于文件描述符的一种,所以服务器程序就可以利用select系统调用,在多个套接字上等待客户端请求,从而达到同时处理多个客户端的效果,而等待客户端请求就需要用listen调用对客户端进行监听,select调用检测的当然就是监听套接字咯。

select系统调用是检测一个已打开的文件描述符的集合(这个集合是一个fd_set类型的数据结构),服务器程序需要创建这个集合,创建时需要用listen调用让套接字处于监听状态,只有这样当有一个新的连接发生时,描述符才会有活动发生,才能够被检测到。

linux下,抛开性能上的影响,程序监听套接字的数量限制主要几个方面:

1: *** 作系统方面限制是句柄数量的限制,也就是65535个可用句柄去掉预先保留的,大概在5万个左右,注意文件句柄和套接字句柄是共用的,都在这65535个里面。

2:进程方面的限制,linux系统对单个进程的默认打开句柄数量限制是1024,考虑到文件 *** 作也会占用句柄,可用于socket监听的句柄大概1000个,这个限制可以修改,不同linux版本可能有点不一样,centos是通过命令 ulimit -n 的方式去修改,要改成10240,就是

3:IO模型的限制,select模型的限制是1024,个,epoll是无限制的,完全根据上面2个的最大值。

楼主是不是没有学过 *** 作系统原理。 设计 *** 作系统的人可没这么傻。

recv这个API是 *** 作系统实现的。当recv调用时,这个线程会进入 *** 作系统的阻塞队列。就是此时 *** 作系统不再处理这个线程,再是转去运行其它线程。而当接收消息到来时, *** 作系统再把这个线程从阻塞队列移到Ready队列,继续运行。 所以根本不浪费CPU时间。

while(1){

recv()//此时该线程阻塞,只有等到数据来了的时候继续运行。

处理数据

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7679117.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存