服务器编程范式

DIY-GEEKER 2014-05-13 12:12:03
其实这是一个福利,我以身作则被鄙视之后还是忍痛将面试题挥洒如下(这是国内某大网络公司的面试题):

给你一台四核8GCPU内存内存的电脑,要求制作一个服务器,服务的内容非常简单,做一个内容回射服务器即可;要求同时顶住50000个链接。

请问该如何做?

你很有可能面试的时候也会被问哦。。
...全文
368 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
汗晕倒 2014-05-14
  • 打赏
  • 举报
回复
引用 13 楼 wangyi1988wang 的回复:
[quote=引用 11 楼 notchenyinghao 的回复:] 这道题 关键就是epoll 单纯一个回显 不需要多线程。 但 考虑到 回显数据可能非常大,把收发放到一个单独的线程里面。 两个线程 一个队列 线程A 中使用epoll 进行监听套接字的状态,一旦发现socket可读,放到一个队列中 线程B 取队列,完成读写。 楼主你准备工作做得不足啊。好好看下书,以后还有机会。我等估计有技术都没门路。
那么为什么强调是4核呢,感觉是不是可以一个进程负责监听,另外再开3个线程[/quote] 因为现在的机子很多都是四核,而且线程,进程这玩意不是越多越好的,再多的线程没有cpu执行也是不行的,一个cpu处理一个线程,能在这个线程中尽可能的使用cpu那就是最高效了,当然还是要看代码的设计。 lz可以找个开源的服务器,拔它的网络框架看看
bluesky12312388 2014-05-14
  • 打赏
  • 举报
回复
异步epoll 单线程即可
oTyg 2014-05-14
  • 打赏
  • 举报
回复
主线程+线程池,简单粗暴
DIY-GEEKER 2014-05-13
  • 打赏
  • 举报
回复
引用 7 楼 notchenyinghao 的回复:
楼主学校应该不错。 我等学历低的估计面试机会都没有。。。
学校还可以,但是专业不对口。。。别见笑
DIY-GEEKER 2014-05-13
  • 打赏
  • 举报
回复
引用 6 楼 notchenyinghao 的回复:
[quote=引用 5 楼 wangyi1988wang 的回复:] [quote=引用 4 楼 shisi 的回复:] 开50000个进程,这个......... 多线程是必须的,线程数的创建一般不超过cpu数,超过了有可能性能反而下降。 这里多线程不是每个线程处理一个连接,连接必须以队列方式处理, 一个线程做主线程,负责listen什么的,其他线程作为工作线程处理反射。。。
看来你比我懂啊,我查了一下,除了多线程,还应该跟使用的IO类型有关系,比如使用异步端口这些。。不过具体我不太懂。。。[/quote] 真牛。。。。。 WINDOWS 完成端口 。Linux epoll 模型。别人问的一定是 网络模型,多线程这些概念。 你这开50000个进程直接把我逗乐了。。。呵呵 [/quote]其实我是抛桩引玉,而已,希望有人能给出一个具体的简介吧。顺便问一下,epoll模型能顶的住50000个链接?需要怎么做,多少个线程?
DIY-GEEKER 2014-05-13
  • 打赏
  • 举报
回复
只是不知道这跟4核CPU有什么关系??
DIY-GEEKER 2014-05-13
  • 打赏
  • 举报
回复
我自己先来吧: 我的答案是,直接开50000个进程。。。
notchenyinghao 2014-05-13
  • 打赏
  • 举报
回复
楼主学校应该不错。 我等学历低的估计面试机会都没有。。。
notchenyinghao 2014-05-13
  • 打赏
  • 举报
回复
引用 5 楼 wangyi1988wang 的回复:
[quote=引用 4 楼 shisi 的回复:] 开50000个进程,这个......... 多线程是必须的,线程数的创建一般不超过cpu数,超过了有可能性能反而下降。 这里多线程不是每个线程处理一个连接,连接必须以队列方式处理, 一个线程做主线程,负责listen什么的,其他线程作为工作线程处理反射。。。
看来你比我懂啊,我查了一下,除了多线程,还应该跟使用的IO类型有关系,比如使用异步端口这些。。不过具体我不太懂。。。[/quote] 真牛。。。。。 WINDOWS 完成端口 。Linux epoll 模型。别人问的一定是 网络模型,多线程这些概念。 你这开50000个进程直接把我逗乐了。。。呵呵
DIY-GEEKER 2014-05-13
  • 打赏
  • 举报
回复
引用 4 楼 shisi 的回复:
开50000个进程,这个......... 多线程是必须的,线程数的创建一般不超过cpu数,超过了有可能性能反而下降。 这里多线程不是每个线程处理一个连接,连接必须以队列方式处理, 一个线程做主线程,负责listen什么的,其他线程作为工作线程处理反射。。。
看来你比我懂啊,我查了一下,除了多线程,还应该跟使用的IO类型有关系,比如使用异步端口这些。。不过具体我不太懂。。。
汗晕倒 2014-05-13
  • 打赏
  • 举报
回复
开50000个进程,这个......... 多线程是必须的,线程数的创建一般不超过cpu数,超过了有可能性能反而下降。 这里多线程不是每个线程处理一个连接,连接必须以队列方式处理, 一个线程做主线程,负责listen什么的,其他线程作为工作线程处理反射。。。
gotooker 2014-05-13
  • 打赏
  • 举报
回复
未接触过服务器编程呢。 说下我的砍伐,直接开50000个进程简单粗暴,问题1.50000个线程内核有没有限制,内存吃不吃得消,问题2.系统中如果存在大量的进程,进程间的进程切换需要耗费大量的时间,造成服务器性能下降。 我觉得可以开1000个进程,每个进程利用select等处理50个连接,注意下进程间的负载均衡。 不知道诸位以为如何??
DIY-GEEKER 2014-05-13
  • 打赏
  • 举报
回复
引用 11 楼 notchenyinghao 的回复:
这道题 关键就是epoll 单纯一个回显 不需要多线程。 但 考虑到 回显数据可能非常大,把收发放到一个单独的线程里面。 两个线程 一个队列 线程A 中使用epoll 进行监听套接字的状态,一旦发现socket可读,放到一个队列中 线程B 取队列,完成读写。 楼主你准备工作做得不足啊。好好看下书,以后还有机会。我等估计有技术都没门路。
那么为什么强调是4核呢,感觉是不是可以一个进程负责监听,另外再开3个线程
DIY-GEEKER 2014-05-13
  • 打赏
  • 举报
回复
引用 11 楼 notchenyinghao 的回复:
这道题 关键就是epoll 单纯一个回显 不需要多线程。 但 考虑到 回显数据可能非常大,把收发放到一个单独的线程里面。 两个线程 一个队列 线程A 中使用epoll 进行监听套接字的状态,一旦发现socket可读,放到一个队列中 线程B 取队列,完成读写。 楼主你准备工作做得不足啊。好好看下书,以后还有机会。我等估计有技术都没门路。
非常感谢啦,其实英雄不问出生,搞技术的都是酷比第孩子。。。
notchenyinghao 2014-05-13
  • 打赏
  • 举报
回复
这道题 关键就是epoll 单纯一个回显 不需要多线程。 但 考虑到 回显数据可能非常大,把收发放到一个单独的线程里面。 两个线程 一个队列 线程A 中使用epoll 进行监听套接字的状态,一旦发现socket可读,放到一个队列中 线程B 取队列,完成读写。 楼主你准备工作做得不足啊。好好看下书,以后还有机会。我等估计有技术都没门路。
notchenyinghao 2014-05-13
  • 打赏
  • 举报
回复
引用 8 楼 wangyi1988wang 的回复:
[quote=引用 6 楼 notchenyinghao 的回复:] [quote=引用 5 楼 wangyi1988wang 的回复:] [quote=引用 4 楼 shisi 的回复:] 开50000个进程,这个......... 多线程是必须的,线程数的创建一般不超过cpu数,超过了有可能性能反而下降。 这里多线程不是每个线程处理一个连接,连接必须以队列方式处理, 一个线程做主线程,负责listen什么的,其他线程作为工作线程处理反射。。。
看来你比我懂啊,我查了一下,除了多线程,还应该跟使用的IO类型有关系,比如使用异步端口这些。。不过具体我不太懂。。。[/quote] 真牛。。。。。 WINDOWS 完成端口 。Linux epoll 模型。别人问的一定是 网络模型,多线程这些概念。 你这开50000个进程直接把我逗乐了。。。呵呵 [/quote]其实我是抛桩引玉,而已,希望有人能给出一个具体的简介吧。顺便问一下,epoll模型能顶的住50000个链接?需要怎么做,多少个线程?[/quote]
引用 8 楼 wangyi1988wang 的回复:
[quote=引用 6 楼 notchenyinghao 的回复:] [quote=引用 5 楼 wangyi1988wang 的回复:] [quote=引用 4 楼 shisi 的回复:] 开50000个进程,这个......... 多线程是必须的,线程数的创建一般不超过cpu数,超过了有可能性能反而下降。 这里多线程不是每个线程处理一个连接,连接必须以队列方式处理, 一个线程做主线程,负责listen什么的,其他线程作为工作线程处理反射。。。
看来你比我懂啊,我查了一下,除了多线程,还应该跟使用的IO类型有关系,比如使用异步端口这些。。不过具体我不太懂。。。[/quote] 真牛。。。。。 WINDOWS 完成端口 。Linux epoll 模型。别人问的一定是 网络模型,多线程这些概念。 你这开50000个进程直接把我逗乐了。。。呵呵 [/quote]其实我是抛桩引玉,而已,希望有人能给出一个具体的简介吧。顺便问一下,epoll模型能顶的住50000个链接?需要怎么做,多少个线程?[/quote] epoll操作的socket对象个数仅受系统的句柄限制,一般65535没问题 。 度娘下 epoll。 我想该公司肯定想要的答案一定不是 采用5W个进程。

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧