多线程程序与单进程程序的架构

开发 架构
多线程程序和单进程程序中都有使用,在网络服务中都有使用。多线程程序主要用于同步的处理一些请求,为了在同一时间处理较多的请求。一般采取线程池的策略,一个主线程来分配请求。

多线程程序和单进程程序中都有使用,在网络服务中都有使用。多线程程序主要用于同步的处理一些请求,为了在同一时间处理较多的请求。一般采取线程池的策略,一个主线程来分配请求。

(一)常见的进程模型:

(1)多线程模型

 

这种模式固定线程数量,吞吐量是接近每个线程的吞吐量*线程数。不具有伸缩性,伸缩性不强,在高负载下能力有很大限制。对于负载不大的情况下的同步数据访问应用还是比较广泛的。

(2)多线程模型二

                  

这种模型是一个线程负责调度任务到不同的线程,通常维护一个线程池,线程池的线程数量可以伸缩,由调度线程决定。回报也通过调度线程来处理,线程与线程之间通过共享内存来获取其他方式来通信都可。但是其***的线程数量也有限制。

(1)单进程模型


 

 

这种模型采用全异步的模式处理请求,进程维护一个每个请求的全局队列,工作进程与网络进程是独立的,采用共享内存的模式进行通信,在全异步的情况下,也能做到高并发量,和高吞吐量。这种模型易于控制,需要对过载进行保护。

(二)几种常见的模型对比

(1)程序复杂度

最复杂是采用具有调度功能的线程池,这种模型需要一个调度线程,调度线程要做的工作包括指派工作线程,过载保护,与多个线程通信,同步。线程之间共享资源要加锁,线程之间可以消除共享资源,提高处理能力。可以采用同步的处理的模式访问,但是风险较大。

单进程的模型比较简单,一个进程将要完成所有功能,包括收包,逻辑处理,过载保护。

(2)性能

一般来说,前端接收请求的,具有多客户端,多版本,多协议的适合采用多线程的模式,如果有统一的协议格式,则应当采用具有调度线程的线程池来完成。如果协议不同,则需要采用不同的线程监听不同的端口来解决。

后台服务一般适合采用单进程。后台线程要求高并发量,高吞吐量。单进程模型消除了锁,并且避免了多线程很多的复杂问题。多线程在开发过程中还有个很大的缺点是不利于调试。对开发者的调式技巧要求较高。

后台也有使用多线程的,后台的后台一般都使用单进程。

(3)竞争

多线程存在竞争问题,多线程会遇到很多程序陷阱,全局的数据,队列,map等数据结构的修过都需要加锁

单线程的程序显然不会存在竞争性问题,单线程在程序中编程是比较简单的。很多时序以及竞争性问题都不存在。

(4)服务健壮性

多线程中,任何一个线程出现问题,都会引起整个进程的挂掉,这与单进程没有区别。多线程的一个好处是可以调用同步的api,而单进程网络服务中一般只允许调用异步的API。

原文链接:http://blog.csdn.net/kingsleer/article/details/7661007

责任编辑:林师授 来源: kingsleer的博客
相关推荐

2010-03-18 16:02:09

python 多线程

2010-03-17 14:41:47

Java多线程进程

2010-03-10 08:54:49

Python多线程

2021-06-11 11:28:22

多线程fork单线程

2022-05-26 08:31:41

线程Java线程与进程

2011-06-22 14:38:09

QT 多线程 线程安全

2024-10-14 16:25:59

C#线程锁代码

2019-02-26 11:15:25

进程多线程多进程

2010-09-17 09:08:49

Java多线程

2009-02-10 09:53:41

多线程程序设计Java

2019-06-03 09:13:11

线程进程多线程

2012-11-13 11:15:31

程序架构

2010-03-15 19:47:30

Java多线程程序

2011-04-18 09:22:38

多线程

2011-06-22 14:30:44

QT 多线程 线程

2009-07-14 15:34:22

Swing中的线程GUI程序

2013-12-02 17:33:20

Linux进程多线程

2009-06-08 20:16:15

Eclipse客户端多线程

2016-10-09 20:15:30

多线程多进程

2019-11-21 09:20:25

程序员数据多线程
点赞
收藏

51CTO技术栈公众号