要实现一个并发的网络服务器,一个流行的做法是使用 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 个的并发连接。
分享到:
相关推荐
不用thread,来处理TCP连接。和Qt自带的例子很像。
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 ...
Three_dimensiona ThreadConnection,基于ANSYS分析得出的三维分析
Kill a thread hanged because of a running mysql database connection
本篇文章给大家分享java多线程Thread-per-Message模式的相关知识点,对此有兴趣的朋友参考学习下。
依照雅特力官方移植说明,移植下来,编译一堆警告和错误。 经过2天努力,终于移植成功。开发工具采用MDK5.38。实验板采用雅特力的AT_START_F437。 项目中打开了2个线程,通过tx_mutex_get互斥操作,来输出print字符...
线程创建,线程等待与清除,thread_clean.c,thread_create.c,thread_create.c,thread_exit_struct.c,thread_id.c,thread_int.c, thread_join.c, thread_join.c, thread_string.c, thread_struct.c
System.out.println("Activity-->"+ Thread.currentThread().getName()); } Runnable r = new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { Thread...
2022年RT-Thread全球技术大会国内专场PPT合集(31份)。 C RTOS中的RUST应用 CherryUSB协议栈的原理与使用 RISCV指令集开源软件生态 RNDIS设备驱动框架 RT-Thread 电源管理组件 RT-Thread 构建配置系统 RT-Thread ...
本手册提供了有关ThreadX——Express Logic 公司高性能实时内核的详尽信息。 指南之意义 本手册适用于嵌入式实时软件的开发者。开发者应熟悉标准实时操作系统的功能及C 程序设计。 结构 手册包括七章,五个附录以及...
赠送jar包:transmittable-thread-local-2.12.1.jar; 赠送原API文档:transmittable-thread-local-2.12.1-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
RT Thread操作系统资料,希望有帮助
是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。 Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates 有两个主要问题: ...
Java Thread Dump 分析 Java Thread Dump 分析是 Java 应用程序性能优化的重要工具之一。Thread Dump 是 JVM 的一个快照,记录了当前所有线程的状态,包括线程的 ID、名称、状态、锁信息等。通过分析 Thread Dump,...
RTOS RT-THREAD标准库参考工程
主要介绍了C#多线程之Thread中Thread.IsAlive属性用法,实例分析了C#判断线程可用状态的技巧,非常具有实用价值,需要的朋友可以参考下
继承Thread类: 1必须重写run 方法:里面放置的实际的线程体 2 启动线程: 3创建Thread对象 4调用Thread对象的start 方法启动线程
ThreadX操作系统 CHM格式的帮助文档,能够方便地查阅ThreadX的所有函数实现,函数定义,函数描述,函数实例,并且分类整理好了各个类别的函数。 各个相关联的函数API之间支持链接跳转,使用起来相当方便。 格式与VC...
嵌入式实时操作系统的多线程计算:基于ThreadX和ARM.pdf