`
iunknown
  • 浏览: 409267 次
社区版块
存档分类
最新评论

one thread per connection 的好处和弱点

阅读更多
要实现一个并发的网络服务器,一个流行的做法是使用 one thread per connection 。
具体采用的模型可能是
《unix网络编程》 (第二版,中文版) 27.12 TCP预先创建线程服务器程序,主线程统一 accept 。

使用这种模型,有以下的好处:

1.可以很方便地把这个模型实现为一个与具体应用无关的 framework,
《unix网络编程》书上的代码稍加整理就已经是一个可重用的 server framework 了。
Page646 和 Page647 上面的代码,需要针对不同的应用做修改的,仅仅是 thread_main 函数中,对 web_child 的调用。
只需要重构这些代码,把 web_child 作为一个 callback function 参数,就能获得这个可重用的 server framework 了。

2.这种实现,首先保证了主线程只会阻塞在 accept 调用上,而不会被其他的情况阻塞,尤其是不会被具体的应用处理代码阻塞。
反过来说,就是实现应用代码的时候,可以直接使用会造成阻塞的操作,而不用担心会阻塞主线程。
目前使用的很多库都是阻塞型的,比如很多数据的客户端访问库(mysql,oracle,等)。
从这个角度来说,这个 server framework 是比较健壮的:无论应用代码如何实现,主线程还是按原定计划工作的。

3.阻塞型调用使开发者能够隐式地在线程的运行堆栈中,而不是在由开发者显示地管理的独立数据结构中维护状态信息和执行历史。


事物都有两面,这种模型也有以下的弱点:

在通常的实现中,创建一个线程的时候,同时都为线程保留了一个堆栈空间(在linux 2.4.18内核上,默认值是 2M)。
在 32bit 的机器上,按最大可用的 4G 地址空间来算,一个进程也只能有 2048 个线程。
在实际的环境中,通常很少有进程能够创建超过 512 个的线程,因为进程的地址空间通常还被动态分配的内存占用了很大一部分。
因此,这种模型通常很难同时处理超过 1000 个的并发连接。
分享到:
评论

相关推荐

    Qt-简单服务器-不用thread

    "Qt-简单服务器-不用thread"这个标题表明我们将探讨如何在Qt环境中建立一个简单的服务器,但不依赖于多线程(thread)机制。这通常意味着我们将利用事件驱动编程模型或者异步I/O来处理TCP连接。 描述中的“和Qt自带...

    一个基于reactor模式的LinuxC++网络库,支持one_loop_per_thread机制_eomaia.zip

    一个基于reactor模式的LinuxC++网络库,支持one_loop_per_thread机制_eomaia

    onethread

    标题“onethread”直指移动开发中的单线程模型,这是一种常见的程序设计模式,旨在优化资源使用和提高应用程序性能。本文将详细探讨单线程模型的概念、重要性以及在移动开发中的应用。 首先,我们需要了解什么是...

    thread thread thread thread

    thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread ...

    Three_dimensiona_ThreadConnection_YAN.

    标题中的"Three_dimensiona_ThreadConnection_YAN."似乎指的是一个关于三维螺纹连接的特定研究或技术,而描述中提到的"Three dimensional ThreadConnection,基于ANSYS分析得出的三维分析"进一步证实了这是一个利用...

    java多线程Thread-per-Message模式详解

    在Java多线程编程中,Thread-...总之,Thread-per-Message模式在处理异步任务和并发场景时有其独特的优势,但也需要注意线程管理和资源消耗的问题。在实际开发中,应根据系统需求和性能指标,合理选择和优化线程模型。

    kill-Thread-using-MySQL-connection.rar_Because..._mysql thread

    在`kill-Thread-using-MySQL-connection.txt`这个文件中,可能包含了如何识别挂起线程以及使用`MySQL`的`KILL`命令来结束它们的具体步骤和示例。通过学习这份文档,你可以更好地理解如何在实际遇到类似问题时进行...

    RTThread Stm32 标准库参考工程.zip_RT-Thread STD库_rtos stm32_rtthread_rt

    RT-Thread是一个开源、轻量级且功能强大的RTOS,广泛应用于物联网(IoT)设备和嵌入式系统。这个压缩包提供了使用RT-Thread在STM32芯片上开发应用的详细示例,帮助开发者理解和应用RT-Thread的STD库。 STM32是意法...

    RT-Thread常见函数.zip_RTT_rt thread_rt-thread函数_rt_thread函数_手册

    《RT-Thread常见函数》是针对RT-Thread实时操作系统中常用函数的一份详细参考资料,旨在帮助开发者更好地理解和应用RTT的API。RT-Thread(简称RTT)是一款成熟、稳定且功能丰富的开源实时操作系统,广泛应用于物联网...

    5,RT Thread操作系统教程及资料_rtthread_RT-Thread_

    这个压缩包中包含的“5,RT Thread操作系统教程及资料(第三方合作伙伴)”很可能是由RT Thread社区或者合作伙伴提供的学习资源,旨在帮助开发者更好地理解和使用RT Thread。 1. **RT Thread简介** RT Thread是一...

    实时操作系统ThreadX剖析

    实时操作系统ThreadX是一种专门为嵌入式系统设计的操作系统,它能够满足实时性要求较高的任务调度和管理需求。在嵌入式系统的领域中,实时性是系统能否及时响应外部事件并进行处理的关键指标。ThreadX操作系统以其...

    threadx中文资料

    ### ThreadX概述与嵌入式实时系统 #### 一、ThreadX简介 ThreadX是一款由ExpressLogic公司开发的高性能...通过深入了解ThreadX的特点和优势,开发者可以更好地利用这款优秀的嵌入式操作系统来构建高质量的产品和服务。

    rt-thread-3.1.3_rtthread_RT-Thread_nano_rtthreadopenocd_RT-Threa

    RT-Thread是一个开源的实时操作系统(RTOS),专为嵌入式系统设计,具有高可靠性、低功耗和轻量级的特点。"rt-thread-3.1.3" 是该操作系统的特定版本,代表着该版本在功能和性能上的优化与改进。 RT-Thread Nano是...

    ThreadX中文学习手册

    与传统的RTOS相比,ThreadX具有更高的通用性和易用性,尤其适合应用于RISC(Reduced Instruction Set Computer,精简指令集计算机)和DSP(Digital Signal Processing,数字信号处理)架构的小型微控制器中。...

    rt-thread入门教程PPT

    RT-Thread 入门教程 PPT RT-Thread 是一款国产的嵌入式操作系统,诞生于 2006 年,...* RT-Thread 的使用步骤包括安装 KEIL MDK、安装 stm32f103 芯片数据库、下载示例源代码、配置开发环境和编译和运行 RT-Thread 等

    一个基于 io-uring/epoll/kqueue 和 thread-per-core 模型 Rust Runtime

    基于io_uring/epoll/kqueue 的 Runtime,Monoio目标是在兼顾平台兼容性的情况下,做最高效、性能最优的 thread-per-core Rust Runtime。

    Monoio一个基于io-uring/epoll/kqueue和thread-per-core模型Rust Runtime

    一个基于 io_uring/epoll/kqueue 的 Runtime,Monoio 目标是在兼顾平台兼容性的情况下,做最高效、性能最优的 thread-per-core Rust Runtime。

    AT32使用RT-thread studio 流程

    AT32使用RT-thread studio流程 AT32是微控制器(Microcontroller,MCU)系列,...但是,需要注意正确安装和配置RT-Thread Studio,选择正确的芯片型号和开发板,正确配置工程参数,编写高效的代码,进行调试和下载等。

    RT-Thread中文文档

    RT-Thread是一款由中国开源社区贡献的物联网操作系统,它具备极强的可伸缩性。可伸缩性体现在其核心可以在最小的ARM...随着物联网技术的不断演进,RT-Thread也在不断更新和升级,以满足更多样化和高复杂性的应用需求。

    带你读源码之MySQL连接管理1

    本篇将深入探讨MySQL 5.7.17版本中两种主要的连接管理模式:connection per thread 和 connection one thread,以及它们的实现细节。 首先,我们要明确的是MySQL连接的概念,它包含了事务处理和通信两大部分。事务...

Global site tag (gtag.js) - Google Analytics