线程池server

【Java TCP/IP Socket】基于线程池的TCP服务器(含代码) 了解线程池      在http://blog.youkuaiyun.com/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客户端对应一个线程。但是,每个新线程都会消耗系统资源:创建一个线程会占用CPU周期,而且每个线程都会建立自己的数据结构(如,栈),也要消耗系统内存,另外,当一个线程阻塞时,JVM将保存其 阅读详情
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class Server
{
//服务器端口
    private static final int SERVERPORT = 54321; 
    //客户端连接
    private static List<Socket> mClientList = new ArrayList<Socket>(); 
    //线程池
    private ExecutorService mExecutorService;  
    //ServerSocket对象
    private ServerSocket mServerSocket;  
    //开启服务器
    public static void main(String[] args)
{
new Server();
}
public Server()
{
try
{
//设置服务器端口
mServerSocket = new ServerSocket(SERVERPORT);
//创建一个线程池
mExecutorService = Executors.newCachedThreadPool();
System.out.println("start...");
//用来临时保存客户端连接的Socket对象
Socket client = null;
while (true)
{
//接收客户连接并添加到list中
client = mServerSocket.accept(); 
mClientList.add(client);
//开启一个客户端线程
mExecutorService.execute(new ThreadServer(client));
}
}
catch (IOException e)
{
e.printStackTrace();
}
}   
    //每个客户端单独开启一个线程
static class ThreadServer implements Runnable
{
private Socket mSocket;
private BufferedReader mBufferedReader;
private PrintWriter mPrintWriter;
private String mStrMSG;


public ThreadServer(Socket socket) throws IOException
{
this.mSocket = socket;
mBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
mStrMSG = "user:"+this.mSocket.getInetAddress()+" come total:" + mClientList.size();
sendMessage();
}
public void run()
{
try
{
while ((mStrMSG = mBufferedReader.readLine()) != null)
{
if (mStrMSG.trim().equals("exit"))
{
//当一个客户端退出时
mClientList.remove(mSocket);
mBufferedReader.close();
mPrintWriter.close();
mStrMSG = "user:"+this.mSocket.getInetAddress()+" exit total:" + mClientList.size();
mSocket.close();
sendMessage();
break;
}
else
{
mStrMSG = mSocket.getInetAddress() + ":" + mStrMSG;
sendMessage();
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
//发送消息给所有客户端
private void sendMessage() throws IOException
{
System.out.println(mStrMSG);
for (Socket client : mClientList)
{
mPrintWriter = new PrintWriter(client.getOutputStream(), true);
mPrintWriter.println(mStrMSG);
}
}
}
}
基于线程池的WebServer Web server with thread pool 操作系统实验代码 基于线程池的WebServer 立即下载

相关推荐

阿里系acw_sc__v3滑块验证码逆向分析与实战破解

本文深入解析阿里系acw_sc__v3滑块验证码的核心机制与逆向破解方法。通过分析加密参数生成、轨迹验证模块和动态加密策略,提供完整的自动化破解方案,包括设备指纹生成、缺口识别和轨迹加密等关键技术。文章还分享了常见问题的调试技巧,帮助开发者应对阿里系验证码的复杂防护体系。

wdx012345的博客 1832

从零开始实现 C++ TinyWebServer 线程池 ThreadPool详解

C++ TinyWebServer 中的数据库线程池 ThreadPool,设计、成员变量以及核心函数的实现,代码示例。

有耐心做好简单事情,坚持写blog 1289

SolidWorks与Python二次开发实战:从宏录制到自动化脚本

本文详细介绍了利用Python对SolidWorks进行二次开发的实战方法。通过宏录制获取操作指令,再将其转换为Python脚本,工程师可以高效实现建模、出图等重复任务的自动化,显著提升设计效率。文章涵盖了环境搭建、代码转换、调试技巧及完整实战案例,为工程师提供了从入门到精通的完整路径。

weixin_29082143的博客 947

学到就是赚到,面试加分项之WebServer线程池管理!

大家好,这篇文章我们来讨论一个话题,怎么去管理 SpringBoot 内置的三大 WebServer(Tomcat、Jetty、Undertow)的线程池,包括监控告警、动态调参。 不管是应对越来越卷的面试考察,还是自己项目日常性能调优,绝对有用,学到就是赚到,搬好椅子,开始我们的分析之旅。 写在前面 要想去管理第三方组件的线程池,首先肯定要对这些组件有一定的熟悉度,了解整个请求的一个处理过程,找到对应处理请求的线程池,这些线程池不一定是 JUC 包下的 ThreadPoolExecutor 类,也可能是

兰陵笑笑生 532

暗月项目七详解

本文围绕“暗月靶场项目七”展开,记录了一次从外网 Web 入口逐步深入内网并最终获取域控目标的完整实训过程。

Re_K123的博客 418

LlamaIndex 入门实战

LlamaIndex是一个“数据框架”,用于帮助构建LLM应用程序。它提供了各种工具,包括数据连接器,用于摄取现有数据源和数据格式(API,PDF,文档,SQL等),以及用于将数据结构化(索引,图形)以便与LLM轻松使用的方式。此外,LlamaIndex还提供了高级的检索/查询接口,可以输入任何LLM输入提示,并返回检索到的上下文和增强知识的输出。它还允许与外部应用程序框架(如LangChain,Flask,Docker,ChatGPT等)轻松集成。

AIGC搞起 1万+

WebServer——二:线程池

线程池

qq_42370809的博客 928

基于STM32L4XX、HAL库的ICM-42670-P姿态传感器驱动程序设计

sprintf(buffer, "温度: %.1f °C\r\n\r\n", sensor_data.temperature);sprintf(buffer, "陀螺仪: X=%.2f Y=%.2f Z=%.2f rad/s\r\n",sprintf(buffer, "加速度: X=%.2f Y=%.2f Z=%.2f m/s²\r\n",sprintf(buffer, "开始校准IMU,请保持传感器静止...\r\n");sprintf(buffer, "读取传感器数据失败\r\n");

zhusl6688的博客 642

Windows 2008 Server线程池前瞻

http://gamebabyrocksun.blog.163.com/blog/static/571534632007111602338286/       没有什么能让我如此的着迷和口水直流了,可是我的机器却无法安装Windows 2008 Server,因为俺没钱升级它。所以我所有关于这个Windows 2008 Server的知识都是来自MSDN,在那里,它被叫作Longhorn

casm 世事如棋 乾坤莫测 笑尽英雄 287

大语言模型原理与工程实践:手把手教你训练 7B 大语言模型 自动化训练框架

近年来,大语言模型(Large Language Models,LLMs)在自然语言处理领域取得了突破性进展。从GPT-3到ChatGPT,再到最新的GPT-4,这些模型展现出了惊人的语言理解和生成能力,引发了学术界和产业界的广泛关注。然而,训练如此庞大的模型不仅需要海量的数据和计算资源,还需要复杂的工程实践和优化技巧。本文将深入探讨大语言模型的原理,并以7B参数规模的模型为例,详细介绍如何构建一个自动化训练框架,使读者能够亲自动手训练自己的大语言模型。

AI天才研究院 1923

恒玄BES调试笔记-BES2500如何Dump Anc Audio数据

从YP的4M flash改HP3的2M flash只需要改: 原工程:target.mk的export FLASH_SIZE ?= 0x200000和common.mk里的KBUILD_CPPFLAGS += -DNEW_IMAGE_FLASH_OFFSET=0x100000 OTA工程:target.mk的NEW_IMAGE_FLASH_OFFSET ?= 0x100000和FLASH_SIZE ?= 0x200000 ...

leezs的博客 1672

Windows 2008 Server线程池前瞻(原创)

http://blog.youkuaiyun.com/cloud95/article/details/7406128 http://gamebabyrocksun.blog.163.com/blog/static/571534632007111602338286/       没有什么能让我如此的着迷和口水直流了,可是我的机器却无法安装Windows 2008 Server,因为俺没钱

casm 世事如棋 乾坤莫测 笑尽英雄 709

Android14 Qcom 从Framework到Driver带你打开WIFI(二)

上篇文章讲到了UI打开WIFI以后,逐步调用到加载底层驱动以及通知等相关流程。这篇接着上文继续往下看WIFI ON的后续动作。

IAYLBL的博客 766

mysql线程池 php_关于MySQL线程池资料整理–Percona Server

关于MySQL线程池资料整理–Percona ServerMySQL执行statement使用一个连接一个thread的方式,当连接数增加到某一个点,那么性能将会开始下降.这个特性的作用就是无论有多少连接,thread pool都讲保证性能处于最好水平.thread pool的原理主要是减少线程,减少上下文交换和锁资源争抢,针对OLTP环境特别有效.为可以开启thread pool功能,请将thr...

weixin_39612540的博客 241

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【JAVA】基于TCP协议的Client-Server通信-----线程池版

/* ServerPool.java author@cczxsong /*/ package EchoThreadPool; import java.io.*; import java.net.Socket; public class ServerPool extends Thread { Socket socket = null; public ServerPoo...

cczxsong的博客 1538

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

解决 Fullstaq Ruby Server Edition 线程池配置常见问题

$$ \text{Worker数} = \frac{\text{可用内存}}{\text{单进程内存}} \quad \text{线程数} = \frac{\text{CPU核心数}}{\text{Worker数}} \times 2 $$Fullstaq Ruby Server Edition 针对服务器环境优化了 Ruby 性能,但线程池配置不当可能导致性能瓶颈或资源浪费。:调整后需逐步验证,每次只修改一个参数,并通过。生产环境建议使用滚动部署验证。:CPU 利用率低或请求排队严重。

2501_93895004的博客 919

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

web server线程池解读

线程池是一种在程序运行时创建和管理线程的机制,它用于提高多线程程序的性能和响应能力。通过线程池,可以避免频繁创建和销毁线程的开销,同时可以有效地控制并发线程的数量,提高资源的利用率。

qq_40939631的博客 533

Web-server的线程池实现

Web-server 一、编译方式 在files目录下使用如下命令进行编译: gcc server.c -o server -pthread 由于使用了多线程,需要添加 -pthread 选项 使用./server开启服务器 二、程序设计 1.程序分模块实现功能: main函数:初始化工作,创建服务器套接字并设置监听端口、开辟线程池;调用accept()、handle_clnt()等函数与客户端...

Zfming@ustc的博客 500

基于EPOLL+多进程+线程池的server框架设想_程序世界_百度空间

基于EPOLL+多进程+线程池的server框架设想_程序世界_百度空间 基于EPOLL+多进程+线程池的server框架设想_程序世界_百度空间基于EPOLL+多进程+线程池的server框架设想最近,看了几个开源代码的server框架,有了一些自己的想法,把它记...

182

突破并发瓶颈:cpp-httplib中Server-Sent Events的线程池优化实践

你是否遇到过实时数据推送场景下服务器响应迟缓的问题?当同时处理多个长连接时,传统单线程模型会导致资源耗尽和响应延迟。本文将通过cpp-httplib库,展示如何利用线程池优化Server-Sent Events(SSE,服务器推送事件)的并发处理能力,让你的实时应用轻松应对高并发挑战。 读完本文你将掌握: - SSE技术在cpp-httplib中的基础实现 - 线程池配置与任务调度的最佳实践 -...

gitblog_00554的博客 539

BIO+线程池实现简单的Server

public class MyServer { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newFixedThreadPool(100); ServerSocket serverSocket = new ServerSocket(...

Chdaring的博客 743

用线程池技术和快速json解析技术重写Tcp socket server程序

c++11发布后,有许多新技术用于帮助c++重新焕发生机。我也用线程池技术和快速json解析技术重写Tcp socket server程序,效率和安全性得到很大的提升。 (cmm_owms) [root@xiaoqi-api-server bin]# ./EntrySvr_v2 & [1] 22836 (cmm_owms) [root@xiaoqi-api-server bin]# built on time=20200514-1152 (cmm_owms) [root@xiaoqi-api-s.

Power of technology will free your body and spirit 447

用Rust编写web server,实现线程池的清除

在之前用线程池实现的web server中,每个工作线程中通过loop进行循环,从channel的接收端等待任务,然后执行。但是代码中没有提供一种机制,来通知这些工作线程结束。本节就是在之前的基础上,来实现线程池对象的正确清除。 通过为ThreadPool实现Drop trait来实现线程池对象清除 修改Worker如下: struct Worker { id: usize, ...

令狐一冲 1686

web server 线程池

web server允许的最大线程连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。 1.编辑tomcat安装目录下的conf目录下的server.xml文件 在tomcat配置文件server.xml中的配置中,和连接数相关的参数有: maxThreads="150"     表示最多同时处理150个连接,Tomcat

天天的专栏 1537

percona server的线程池

设置以下参数: thread_handling 可选两个设置: one-thread-per-connection pool-of-threads

zhzh5275的博客 476
上一篇: HQL运算符
下一篇: Spring--quartz中cronExpression配置说明
名茶
博客等级 码龄17年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值