linux - Socket编程select(IO复用)和recv(设置O_NONBLOCK,非阻塞)都需要放入死循环,有什么根本上的区别吗?

 明霞学 发布于 2022-10-31 18:35

除了select可以通过设置timeval,来控制是否阻塞。

几个问题思路:

  1. recv等阻塞的函数需要消耗的资源更多?

  2. recv死循环在轮询的时候,cpu浪费资源理解,可以select也是在轮询?

  3. 是不是对于多用户连接的时间会起作用,但是多个用户连接处于分离的状态,各自有自己的线程?

可能自己在考虑开始就出错了,希望大家可以帮我解惑。

1 个回答
  • 1、recv阻塞后不消耗资源,主要问题是阻塞后就不能干别的事情了,只能等待
    2、select的轮询是有时间间隔的,把recv放入死循环则一直轮询根本不释放cpu
    3、select一般用于多连接情况,比如在tcp上的监听socket,一旦有连接到到就起一个线程去调用accept并由该线程处理此连接。

    2022-10-31 23:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有