TCP并发服务器---多进程和多线程

一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。

1、多进程服务器

多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中。对于一个 TCP 服务器,客户与服务器的连接可能并不马上关闭,可能会等到客户提交某些数据后再关闭,这段时间服务器端的进程会阻塞,所以这时操作系统可能调度其它客户服务进程,这比起循环服务器大大提高了服务性能。

多进程并发服务器
多客户端测试
测试结果

总结:通过为每个客户端创建⼀个进程的方式, 能够同时为多个客户端进行服务,当客户端不是特别多的时候, 这种方式还行, 如果有成百上千个, 就不可取了, 因为每次创建进程等过程需要消耗较多的资源。

2、多线程服务器

多线程服务器与多进程服务器在代码上十分相似,只需要做出稍微的改动,这里不再赘述。

多线程并发服务器
执行结果

3、进程与线程的比较

从以上可以看出,多进程和多线程都实现了同样的目的,从表面来看并没有太大区别,那么进程和线程的区别究竟表现在哪里呢?

1、进程:子进程是父进程的复制品,是获得父进程数据空间、堆和栈的复制品;而线程,相对与进程而言,线程是一个更加接近执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。

2、线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器(简单来讲就是平时所说的双CPU系统,是对称多处理机中最常见的一种)上运行,而进程则可以跨机器迁移。

3、根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:a、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内;b、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内;c、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。

举一个比较形象的例子,多进程的服务器就好比是立体的交通系统(立交桥),虽然说建造的时候花费比较大,消耗的资源比较多,但是真要是跑起来不会交通堵塞。但是汽车在上面跑,相互通信就是个很费事儿问题(进程间通信比较麻烦);多线程就好比是平面的交通系统,造价低,但是很容易交通堵塞,但是也有好处,同步的时候方便。

在网络服务器方面:

单进程 < 多进程(单线程)< 多进程(多线程)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,230评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,819评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,545评论 11 349
  • 只有非常努力,才能看起来毫不费力!
    JuanCGKL阅读 1,355评论 0 0
  • 当我匆匆写下这个题目,我忽然想起了一个叫做小刚的同学,有一次他喝醉了酒,或者也许他根本没有喝多,但是他用哭泣的声音...
    杨仲凯律师阅读 4,014评论 4 2

友情链接更多精彩内容