查看: 1493| 回复: 9
跳转到指定楼层
上一主题 下一主题
收起左侧

[学C/C++] 问一个concurrent server和select的问题(网络编程)

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
最近一直在学习select函数,在网络通信里面的使用。
想问一下,一个server是concurrent的原因,是因为用到了select和poll吗?  

感谢回复。有米可以加。

上一篇:问一UDP和IP的问题
下一篇:面经里面大家总能报出leetcode题号,是熟到看到题连题号都记得吗
推荐
bananamon 2020-12-14 09:42:19 | 只看该作者
全局:
本帖最后由 bananamon 于 2020-12-14 09:43 编辑

准确来说concurrent的实现是由于使用多线程或者多进程,而select和poll,epoll属于 IO multiplexing的范围,用来解决IO blocking的问题,通过select检查一组file descriptor ,然后轮询返回ready的fd,避免了程序不必要的等待。
你在select成功后,如果你顺序accept 你的socket,还是会一个处理完才能处理下一个connection,不会实现concurrent
要 concurrent的话最简单的方法是select到一个fd以后,父进程fork一个child process,里面专门处理socket的内容,而这个时候parent立即返回,继续select下一个,再fork新的的child 处理新的socket connection。
不过对于web server来说,不停的fork进程开销太大,所以可以提前建立一个thread pool,每次来新connection选一个thread 去处理。。另外thread调度时context switch的时间也比process之间的少很多,也减少了不必要的TLB刷新,page cache的刷新等等。。
你也可以使用其他异步IO的方式配合多线程/进程实现concurrent处理。
回复

使用道具 举报

全局:
大部分是 但是你也可以自己实现

评分

参与人数 1大米 +1 收起 理由
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
 楼主| techDiscussion 2020-12-8 14:57:34 | 只看该作者
全局:
多啦啦的崇拜 发表于 2020-12-8 14:37
大部分是 但是你也可以自己实现

所以通常来说concurrent意思是说一定要用select或者poll吗? 如果不用就是iterative的server对吗?
回复

使用道具 举报

全局:
techDiscussion 发表于 2020-12-07 22:57:34
所以通常来说concurrent意思是说一定要用select或者poll吗? 如果不用就是iterative的server对吗?
A system is said to be concurrent if it can support two or more actions in progress at the same time. A system is said to be parallel if it can support two or more actions executing simultaneously. The key concept and difference between these definitions is the phrase "in progress."

能问你为啥要问这个强行关联的问题么?
我说了concurrent不一定要 poll select
https://jvns.ca/blog/2017/06/03/...t--poll--and-epoll/

评分

参与人数 1大米 +1 收起 理由
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
Silmarillion 2020-12-8 23:10:35 | 只看该作者
全局:
也可以基于multithreaded实现,每接收一个client就pthread_create一个相应的worker thread。
回复

使用道具 举报

🔗
 楼主| techDiscussion 2020-12-9 03:13:40 | 只看该作者
全局:
Silmarillion 发表于 2020-12-8 23:10
也可以基于multithreaded实现,每接收一个client就pthread_create一个相应的worker thread。

pthread_create一个相应的worker thread  --> 这跟server分出一个child有啥联系呢?
回复

使用道具 举报

🔗
Silmarillion 2020-12-9 13:08:50 | 只看该作者
全局:
techDiscussion 发表于 2020-12-9 03:13
pthread_create一个相应的worker thread  --> 这跟server分出一个child有啥联系呢?

你说child process?可以把thread理解为lightweight process,主要优点在于子线程可以共享父线程的heap space,以及context switching更快。
回复

使用道具 举报

🔗
 楼主| techDiscussion 2020-12-9 14:12:17 | 只看该作者
全局:
Silmarillion 发表于 2020-12-9 13:08
你说child process?可以把thread理解为lightweight process,主要优点在于子线程可以共享父线程的heap s ...

那这个child process跟你说的“worker thread”有啥区别呢?
回复

使用道具 举报

🔗
Silmarillion 2020-12-10 02:45:26 | 只看该作者
全局:
techDiscussion 发表于 2020-12-9 14:12
那这个child process跟你说的“worker thread”有啥区别呢?

操作系统自学一下吧少年

评分

参与人数 1大米 +1 收起 理由
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表