初步认识迭代服务器和并发服务器

http://www.cnblogs.com/wolflion/archive/2011/07/13/2539138.html

 

迭代服务器比较原始,它的原型可以描述成:

while(1)
{
new_fd = 服务器accept客户端的连接(new_fd = accept(listenfd, XX, XX))
逻辑处理
在这个new_fd上给客户端发送消息
关闭new_fd
}
也就是说,这个进程是一个一个处理各个客户端发来的连接的,比如一个客户端发来一个连接,那么只要它还没有完成自己的任务,那么它就一直会占用服务器的进程直到处理完毕后服务器关闭掉这个socket。
并发服务器是最经常用的:
1 while(1)
2 {
3 new_fd = 服务器accept客户端的连接
4 if(是子进程)
5 {
6 首先关闭掉监听fd // 因为子进程并不需要监听,它只负责处理逻辑并发消息给客户端
7 处理逻辑发送消息
8 关闭new_fd
9 关闭进程
10 }
11 关闭new_fd
12 }
这样每来一个客户端,服务器就克隆一个自己去处理请求,这样主进程就一直处于监听状态而不会被阻塞
额,我想讲的重点不是这里,重点是代码第12行!
1。千万不要以为fork出来一个子进程就产生了2个新的socket描述符,实际上子进程和父进程是共享linten_fd和new_fd的,当父进程关闭new_fd的时候(代码第12行)它只是把这个new_fd的访问计数值减了1而已,由于访问计数值还 > 0(因为还有客户端的new_fd连着呢),所以它并没有断开和客户端的连接。
2。如果我们不写第12行会有什么后果,第一,因为可分配的socket描述符是有限的,如果分配了以后不释放,也就是不能回收再利用,也就是总有描述符耗尽的一天。第二,本来把和客户端连接的任务交给子进程以后父进程就可以继续监听并accept下个连接了,但如果父进程不关闭自己跟客户的连接,意思就是这个连接居然永远存在!相当于每来一个客户这个父进程就连一个客户并且连接不断,你应该知道后果了吧。

转载于:https://www.cnblogs.com/johnnyflute/p/3800978.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国正在衰落的24个行业:“猝不及防”还是“温水煮青蛙”?

来源:资本实验室摘要:技术发展一日千里,外部环境日新月异。在这个变化无处不在的世界,许多行业都在不可避免地经历着或是猝不及防,或是“温水煮青蛙”般的冲击。近期,美国财经网站24/7 Wallst根据过去十年的…

距离与相似度计算

一.余弦相似度 加速计算参考这篇文章 from math import *def square_rooted(x):return round(sqrt(sum([a*a for a in x])), 3)def cosine_similarity(x,y):numerator sum(a*b for a, b in zip(x,y))denominator square_rooted(x)*square_rooted(y)return round(numerator/f…

程序的跳转模式

程序内部有自己的一套跳转语法,如果想跳转,需要参考已有代码的实现方式。 先说一下具体情况: 这几天的心情很不平静,老是感觉自己还在高考的样子,想着是怎么拿下这个考试关。现在明白问题所在了,我必须考虑…

5G 产业链重要细分投资领域

来源:乐晴智库精选▌2019年全球电子产业将保持增长ICInsights预计2018年全球电子产品销售额16220亿美元,同比增长5.1%,2019年将达到16800亿美元,同比增长3.5%,2017~2021年CAGR4.6%。预计2019年通信市场销售额5350亿美元…

CPNDet:Corner Proposal Network for Anchor-free, Two-stage Object Detection

CPNDet论文链接 一.背景 anchor-based方法将大量框密集分布在feature map上,在推理时,由于预设的anchor与目标差异大,召回率会偏低。而anchor-free不受anchor大小限制,在任意形状上会更加灵活,但是像CornerNet这种,先…

Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建

Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习。2010年9月,Oracle Enterprise Linux发布新版内核——Unbreakable Enterprise Kernel,专门针对Oracle软件与硬件进行优化,最重要的是Oracl…

最权威北美放射学会年会回顾:AI的进化与下一个前沿

翻译 : 高璇摘要:人工智能在成像领域的前景必须为终端用户带来时间节省、资源优化、精度增益和感知增益(接近精准健康方法)。前两个是指生产力方面,而后两个是指质量方面。人工智能在成像领域的脚步不会停留在这里——它已经帮助重…

Registry注册机制

前言:不管是Detectron还是mmdetection,都有用到这个register机制,特意去弄明白,记录一下。 首先看Registry代码: # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reservedfrom typing import Dict, Optional, Iterable, T…

Android Volley 库通过网络获取 JSON 数据

本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包。前者是 Apache 开源库,后者是 Android 自带 API。企业级应用&#xff0…

python刷题+leetcode(第二部分)

100. 简化路径 思路:栈 class Solution:def simplifyPath(self, path: str) -> str:stack []for path_ in path.split(/):if path_ not in [, ., ..]:stack.append(path_)elif path_ .. and stack:stack.pop()return / /.join(stack) c实现: class Solution { public:s…

这一年,信息技术领域上演的“断舍离”

来源:中国科学报摘要:刚刚踏入2018年,信息技术产业领域就被“熔断”“幽灵”这两个几乎波及全行业的芯片漏洞所笼罩。孰料,该领域接下来上演的剧情——从美国断然发布对中兴通讯的出售禁令,到Uber无人驾驶汽车撞人致死…

20140625 程序 进程 线程 物理存储器

1、程序 .exe就是一个程序 2、进程 运行一个.exe的可执行程序后,就启动了该程序的一个实例,我们称之为“进程”。是资源申请,调度和独立运行的单位,使用系统的运行资源 3、线程 线程有线程内核对象和线程栈组成。 线程内核对象&am…

利用JasperReport+iReport进行Web报表开发

用JasperReportiReport进行Web报表开发 序言在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来。这里所提到的报表可不是简单的二维表,而是拥有复杂表头的、多维的、能够在执行期从数据库中自己主动读…

AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(VIT)

最近看transformer用于CV比较热门,特意去进行了解,这里用分类的一篇文章进行讲解。 NLP中的transformer和代码讲解参考我另一篇文章。 论文链接:AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 一.思想 其…

人工智能领域的未来和挑战

来源:创新研究摘要:人工智能是一门综合了计算机科学、生理学、哲学的交叉学科。凡是使用机器代替人类实现认知、识别、分析、决策等功能,均可认为使用了人工智能技术。作为一种基础技术,人工智能在很多行业都有广泛应用。五道集团…

javascript 基础知识1 数据类型

首先javascript是一种具有面向对象能力的,解释型程序设计语言。 js对大小写敏感,一定要采取一致的字符大小写形式,在js中的结束分号(;)是可选的,为了避免JS语句错误,我们还是要注意添…

2018年科技公司融资纪录十大排行榜!中国四家公司上榜

来源:网易智能摘要:国外媒体近日盘点了2018年全球融资最多的十家机器人技术公司,中国有四家公司上榜,包括商汤科技、优必选、京东和依图科技。获得融资并不能保证取得成功,这是机器人行业在2018年学到的艰难的一课。今…

tensorrt基础知识+torch版lenet转c++ trt

官网文档 API文档 Docker镜像 自定义Plugin仓库 0.安装 1.安装tensorrt 从官网下载.deb包,要注意的是cuda版本 sudo dpkg -i nv-tensorrt-repo-ubuntu1604-cuda10.0-trt7.0.0.11-ga-20191216_1-1_amd64.deb sudo apt update sudo apt install tensorrt Engine plan 的兼…

《自然》预测2019年重大科学事件

携带传感器的象海豹将帮助研究人员收集海洋数据,这是研究南极洲思韦茨冰川任务的一部分。来源:科技日报新年的钟声即将响起,在此辞旧迎新之际,除了埋头总结过去一年的得失,回味一下往事的喜乐,也应该抬头展…

python刷题+leetcode(第三部分)

200.最大正方形 思路:与岛屿,水塘不同的是这个相对要规则得多,而不是求连通域,所以动态规划构造出状态转移方程即可 动态规划 if 0, dp[i][j] 0 if 1, dp[i][j] min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])1 class Solution:def maximalSqu…