当前位置: 首页 > news >正文

网站开发常用软件肃宁做网站

网站开发常用软件,肃宁做网站,做护肤品好的网站好,如何建设网站咨询跳转页面1.网络编程性能优化基础 1. 性能关键指标 指标 描述 优化目标 响应时间 从请求到响应的总时间 降低到毫秒级 吞吐量 单位时间内处理的请求数量 提高到每秒数千至数万请求 并发用户数 系统同时处理的用户数量 支持数千至数万并发连接 资源利用率 CPU、内存、网络带…

1.网络编程性能优化基础

1. 性能关键指标

指标

描述

优化目标

响应时间

从请求到响应的总时间

降低到毫秒级

吞吐量

单位时间内处理的请求数量

提高到每秒数千至数万请求

并发用户数

系统同时处理的用户数量

支持数千至数万并发连接

资源利用率

CPU、内存、网络带宽的使用率

保持在合理水平避免瓶颈

2. 性能瓶颈分析

▶ 网络应用性能瓶颈层次

2.连接池优化

1. 连接池工作原理

2. HttpClient连接池示例

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;public class HttpClientConnectionPoolExample {private static CloseableHttpClient httpClient;static {// 创建连接池管理器PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();// 设置最大连接数
        cm.setMaxTotal(200);// 设置每个路由的默认连接数
        cm.setDefaultMaxPerRoute(20);// 创建HttpClient并配置连接池
        httpClient = HttpClients.custom().setConnectionManager(cm).evictIdleConnections(30, TimeUnit.SECONDS) // 空闲连接超时时间.build();}public static CloseableHttpResponse execute(HttpUriRequest request) throws IOException {return httpClient.execute(request);}public static void main(String[] args) throws IOException {HttpGet request = new HttpGet("https://example.com");try (CloseableHttpResponse response = execute(request)) {System.out.println("Status code: " + response.getStatusLine().getStatusCode());}}
}

3.异步编程优化

1. 同步与异步对比

▶ 同步处理流程

▶ 异步处理流程

2. CompletableFuture异步处理示例

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class AsyncHttpClientExample {private static final ExecutorService executor = Executors.newFixedThreadPool(10);private static final HttpClient client = HttpClient.newBuilder().executor(executor).build();public static CompletableFuture<String> fetchUrlAsync(String url) {HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();return client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(response -> {if (response.statusCode() == 200) {return response.body();} else {throw new RuntimeException("HTTP request failed: " + response.statusCode());}}).exceptionally(ex -> {System.err.println("Error fetching URL: " + ex.getMessage());return null;});}public static void main(String[] args) throws IOException, InterruptedException {// 异步获取多个URLCompletableFuture<String> future1 = fetchUrlAsync("https://example.com");CompletableFuture<String> future2 = fetchUrlAsync("https://example.org");// 所有任务完成后执行CompletableFuture.allOf(future1, future2).thenRun(() -> {System.out.println("Both requests completed");System.out.println("Length of response 1: " + (future1.join() != null ? future1.join().length() : 0));System.out.println("Length of response 2: " + (future2.join() != null ? future2.join().length() : 0));
                    executor.shutdown();});// 主线程可以继续执行其他任务System.out.println("Main thread continues...");Thread.sleep(2000);}
}

4.数据缓存优化

1. 缓存策略与位置

▶ 多级缓存架构

2. Caffeine本地缓存示例

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;import java.util.concurrent.TimeUnit;public class CaffeineCacheExample {private static final Cache<String, String> cache = Caffeine.newBuilder().maximumSize(1000)                  // 最大缓存条目数.expireAfterWrite(10, TimeUnit.MINUTES) // 写入后过期时间.refreshAfterWrite(5, TimeUnit.MINUTES) // 写入后刷新时间.build();public static String getData(String key) {// 尝试从缓存获取String value = cache.getIfPresent(key);if (value != null) {return value;}// 缓存未命中,从数据源获取
        value = fetchFromDataSource(key);if (value != null) {
            cache.put(key, value);}return value;}private static String fetchFromDataSource(String key) {// 模拟从数据库或其他数据源获取数据System.out.println("Fetching data from data source for key: " + key);return "Data for " + key;}public static void main(String[] args) {System.out.println(getData("key1"));  // 第一次调用,从数据源获取System.out.println(getData("key1"));  // 第二次调用,从缓存获取System.out.println(getData("key2"));  // 新键,从数据源获取}
}

5.零拷贝技术

1. 传统数据传输流程

硬盘 --> 内核缓冲区 --> 用户缓冲区 --> 内核套接字缓冲区 --> 网络接口

2. 零拷贝数据传输流程

硬盘 --> 内核缓冲区 --> 网络接口

3. Java零拷贝示例

import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;public class ZeroCopyExample {public static void main(String[] args) {try (FileChannel fileChannel = new FileInputStream("large_file.dat").getChannel();SocketChannel socketChannel = SocketChannel.open()) {// 连接到服务器
            socketChannel.connect(new InetSocketAddress("example.com", 8080));// 使用transferTo实现零拷贝long transferred = 0;long size = fileChannel.size();while (transferred < size) {
                transferred += fileChannel.transferTo(transferred, size - transferred, socketChannel);}System.out.println("文件传输完成,总字节数: " + transferred);} catch (IOException e) {
            e.printStackTrace();}}
}

6.性能监控与调优

1. 关键监控指标

类别

指标

工具

系统

CPU 使用率、内存使用率

top, htop, jstat

网络

带宽利用率、连接数

iftop, netstat, ss

JVM

GC 频率、堆内存使用

jstat, jmap, VisualVM

应用

请求响应时间、吞吐量

JMeter, Gatling, Prometheus

7.综合优化示例

1. 优化后的HTTP服务器

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.util.Iterator;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class OptimizedHttpServer {private static final int PORT = 8080;private static final int BUFFER_SIZE = 8192;private static final int THREAD_POOL_SIZE = 100;private final Selector selector;private final ServerSocketChannel serverChannel;private final ExecutorService threadPool;private final ByteBuffer buffer = ByteBuffer.allocateDirect(BUFFER_SIZE); // 直接内存缓冲区public OptimizedHttpServer() throws IOException {
        selector = Selector.open();
        serverChannel = ServerSocketChannel.open();
        serverChannel.configureBlocking(false);
        serverChannel.socket().bind(new InetSocketAddress(PORT));
        serverChannel.register(selector, SelectionKey.OP_ACCEPT);        threadPool = Executors.newFixedThreadPool(THREAD_POOL_SIZE);System.out.println("服务器启动,监听端口: " + PORT);}public void start() {try {while (true) {
                selector.select();Iterator<SelectionKey> keys = selector.selectedKeys().iterator();while (keys.hasNext()) {SelectionKey key = keys.next();
                    keys.remove();if (key.isAcceptable()) {handleAccept(key);} else if (key.isReadable()) {handleRead(key);}}}} catch (IOException e) {
            e.printStackTrace();} finally {try {
                selector.close();
                serverChannel.close();
                threadPool.shutdown();} catch (IOException e) {
                e.printStackTrace();}}}private void handleAccept(SelectionKey key) throws IOException {ServerSocketChannel server = (ServerSocketChannel) key.channel();SocketChannel client = server.accept();
        client.configureBlocking(false);
        client.register(selector, SelectionKey.OP_READ);}private void handleRead(SelectionKey key) {SocketChannel client = (SocketChannel) key.channel();
        threadPool.submit(() -> {try {
                buffer.clear();int bytesRead = client.read(buffer);if (bytesRead == -1) {
                    client.close();return;}                buffer.flip();// 处理HTTP请求(实际应用中应该解析请求并生成响应)String response = "HTTP/1.1 200 OK\r\n" +"Content-Type: text/plain\r\n" +"Content-Length: 12\r\n" +"\r\n" +"Hello World!";ByteBuffer responseBuffer = ByteBuffer.wrap(response.getBytes());while (responseBuffer.hasRemaining()) {
                    client.write(responseBuffer);}} catch (IOException e) {try {
                    client.close();} catch (IOException ex) {
                    ex.printStackTrace();}}});}public static void main(String[] args) {try {OptimizedHttpServer server = new OptimizedHttpServer();
            server.start();} catch (IOException e) {
            e.printStackTrace();}}
}

8.优化总结

技术

适用场景

性能提升点

连接池

频繁创建和销毁连接的场景

减少连接创建开销

异步编程

I/O 密集型应用

提高线程利用率

数据缓存

数据读取频繁且变化不频繁的场景

减少数据获取时间

零拷贝

大文件传输或数据复制场景

减少 CPU 和内存开销

直接内存

频繁进行内存分配和释放的场景

减少 GC 压力

通过合理组合使用这些优化技术,可以显著提高Java网络应用的响应速度和吞吐量,更好地应对高并发场景。

http://www.dtcms.com/a/584545.html

相关文章:

  • 微信网站开发详解嘉兴自助建网站
  • 手机个人简历模板下载网站模板杭州网站制作多少钱
  • 手机网站报价单模板深圳十大劳务派遣公司排名
  • 老干部局网站建设的意义农村建房设计效果图
  • 自考网站建设与管理资料手机网站模板免费模板
  • 全球排行前50网站开发语言淄博网站建设设计
  • 学习php好的网站重庆网站建设培训学校
  • ftp发布asp.net网站广州市企业网站制作
  • 国内做网站比较好的公司有哪些nike网站建设方案
  • 泸州百度做网站联系网络营销心得体会300字
  • 制作手机网站什么软件下载做网站南昌
  • 企业级网站开发技术什么是营销
  • 网站百度收录删除结构设计网站推荐
  • 厦门企业网站排名优化网页设计技术培训教程
  • 深圳联雅网站建设wordpress提权
  • 网站转小程序wordpress onepage
  • 贵州建设厅培训中心网站wordpress 提示要安装
  • 做网站 图片更好看以前有个自助建设网站
  • 网站平台建设呈现全新亮点网站制作品牌有哪些
  • 深圳外贸营销型网站建设福州网站制作公司营销
  • 仙游有人做网站wordpress demo 安装
  • 锦州网站建设报价小红书广告代理商
  • 网站建设昆山花桥wordpress代码语言
  • 甘肃住房和城乡建设厅网站首页怎么查一个公司是否正规公司
  • 阿里巴巴网站图片如何做白seo推广文章
  • 延安网站建设网络公司微信群拉人的营销方法
  • 云浮+网站建设网站建设小技巧
  • 广州佛山建设信息网站网上备案查询
  • 网站一年维护费用多少厦门网站建设哪家强
  • 郑州网站制作汉狮南安住房与城乡建设部网站