当前位置:  技术问答>linux和unix

unix下socket的client/server体系设计方案比较

    来源: 互联网  发布时间:2015-11-20

    本文导语:  由于刚从windows下转到UNIX下作开发,有些问题还希望各位能够指点一二,谢谢! server端监听socket端口,接收到client连接后,是启动一个子进程还是线程来处理?两种方案各有什么优势?顺便说一下,应用环境中client...

由于刚从windows下转到UNIX下作开发,有些问题还希望各位能够指点一二,谢谢!

server端监听socket端口,接收到client连接后,是启动一个子进程还是线程来处理?两种方案各有什么优势?顺便说一下,应用环境中client和server驻留在不同的物理节点上,是一个长连接,每隔一段时间就要进行数据交互。


|
就是说要select能够返回“描述符可写”时空闲buffer的最小值。
我也看了一下,linux不支持这个选项,设置时只是返回错误,errno为ENOPROTOOPT。只能get,且返回值固定为1。看内核源码。

|
线程于进程的好处在于:
方便通信,线程共享了代码与数据空间,所以对共享空间提供了最原始的支持
可以用线程运行完销毁的方式而不需要回收线程资源,只要进程退出,所有线程就销毁了,不需要担心有僵尸进程的出现,也就是资源不能回收的问题。
对于并发比较高的服务器,并且每个处理时间又不是太长的情况下,可以采用线程池的方式
在同等情况下,线程所占资源略少于进程,因为线程在访问一共享变量时,在物理内存中仅有一份此变量所占空间,若是进程间需要改写同一全局变量时,此时就会产生“写时复制”,会产生两份空间(对一个变量的改写,会造成多占用大于等于4K的物理空间)

进程于线程的好处在于:
不需要担心太多因为访问共享资源而造成的各种同步与互斥问题,如果需要共享某部分内容,需要走专用的进程间通信手段,也就是说对于共享空间是可控制的,不会出现随机性
不用担心一不小心就造成函数重入的问题
在不同的进程中,可以使用不同的ELF文件作为执行体,当然,在线程中也可以再进行fork+execv来实现这种方案

无论是线程还是进程,其调度方式是一样的

长连接,用poll/select/epoll做多路复用的方式优缺点:
由于不会造成多线程与多进程,所以所有代码都在一个执行体内,都在同一调度单元中,节省了资源的开销,如内存的占用,进程切换的开销。
由于所有处理都在同一个调度单元内,也就是多个连接共用一个进程的时间片,如果系统中还有很多其它优先级较高进程或者实时进程,平均下来每个连接所占用的CPU时间就较少,且如果一个连接处于死循环中,若不加其它控制,其它连接就永远得不到响应,也就是说每个连接的响应实时性会受到其它连接的影响。
如果对于每个连接的处理方式不同,会造成代码的不好控制,因为会有太多的逻辑判断。

以上三种方式,各有优缺点,主要是楼主的需求,这三种方式并非是互斥的,可以交叉使用,灵活控制,从而最优化你的软件。当然,如果并发连接达到2000个以上,并发处理也达到几百上千个以上(且每个处理过程会执行很长),那么推荐你采用分布式处理,单个PC机是无法承受这种负荷的(若使用专用服务器,性能会好一些,这个相对限制会宽一些),至少会造成响应时间过长

|
我去试试看,实在不行,就还是select来判断,虽然时效性可能不能完美达到:)

|
进程 好管理
线程 高并发时资源要求少

|
如果client不是很多的话,完全可以做一个多进程并发服务器。用不着复杂的模型。
建议你使用HTTP协议或者,FTP协议。那样对断点续传也有很好的支持。

|
拿本看看,里面讲了好多server的程序模式。

|
你们就没有想过多线程的程序,如果一个线程down了,很可能整个进程就一起咯批了。

|
mark

    
 
 

您可能感兴趣的文章:

  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • 想装一个unix的虚拟机用用,哪里去下unix系统?哪个比较常用?
  • 现在那些unix比较流行?Linux和 Unix有 什么区别?
  • unix新手入门看哪本书比较好??
  • 请问在windows下比较好用的unix远程登陆软件哪些比较好?
  • unix操作系统教程那本比较好。
  • Unix下进程间通信有那些比较常用的方法,谁有经验?高分奉送!
  • Unix用来作网络服务器用那一种版本比较好啊……
  • unix下有没有比较好的程序版本控制和文档管理的工具?
  • unix一个比较奇怪的问题
  • unix和windows环境下开发的比较,
  • 各位帮忙推荐一下那本UNIX书对初学者来说比较好?
  • 偶是新手,想请教一下,linuxt ,unix哪一种学起来比较好
  • 新手学Linux/Unix编程,学什么书比较好?
  • 想学unix了,请问大家去买光盘时应该买什么版本的比较好呀?
  • 学完《Unix环境高级编程》做个什么课题比较好?
  • 建立一个省级运营商级别的DNS服务器用哪个版本的LINUX/unix比较好?
  • 安装SCO UNIX到PC机上是否一定要用SCO UNIX光盘? iis7站长之家
  • 那一位对UNIX系统下的signal理解的比较透彻?
  • 请教:Unix下有没有什么比较好的检测内存泄漏的工具呀?谢谢
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sco unix + sybase,做三层开发,征求一个方案(在线等待!!!)
  • 关于Linux/Unix改版的方案
  • [版务] Linux/Unix社区调整方案(建议稿,V0.2)
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • unix/Linux下c++ boost thread库读写锁介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • 没有unix系统我如何学习unix
  • php将unix时间戳转换成字符串时间函数(date)
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • UNIX支持中文否,请推荐UNIX好书
  • SCO UNIX 5.0用软盘启动之后无法启动UNIX
  • 散分!!unix 用户调查!!!你使用哪款unix
  • hp unix 和 sco unix的区别
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 强烈建议将linux/Unix栏目放到“软件开发者”大类里面来。----Unix开发的人助威支持!!!
  • 小问题, Unix 如何建立一个文件 ,unix 文件有后缀名吗
  • 我想学习Unix,请高手给个下载网址,用linux来学习Unix差别大吗?
  • 请问各位unix大虾,哪有免费的unix下载?
  • 学UNIX从SOC UNIX开始好吗?
  • 安装SCO UNIX到PC机上是否一定要用SCO UNIX光盘?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3