伪异步IO

简介: 伪异步IO

前言:同步阻塞IO会有很大的性能问题,那么使用线程池控制呢,就有了伪异步IO,通过线程池对消息队列和最大线程数进行控制,例子见下


package com.honzh.mwq.bio.server.handler;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class TimeServerHandlerPool {

private ExecutorService service;

/**

* @Title: TimeServerHandlerPool

* @Description: 构造方法需要进行说明一下:<br>

* <p>1.Runtime.getRuntime().availableProcessors()可以向Java虚拟机获取可用处理器的数目</p>

* <p>2.同时你可以在cmd命令下通过echo %NUMBER_OF_PROCESSORS%获取可用的cpu可用线程数</p>

* <p>3.我的机器是i3 3220,是一个2核心4线程的处理器,那么在不考虑资源冲突的情况下,可以支持虚拟4核的任务</p>

* <p>4.同时查看API可以知道,对于有界队列,corepoolsize和maxpoolsize之间有一定的关系,在execute执行任务时,如果运行的线程小于core,那么始终会创建新的线程,

* 如果运行的线程等于大于core,那么就会将请求加入队列,如果无法加入队列,则创建新的线程,如果线程数大于max,则任务将被拒绝。

* </p>
  * 
  */
  public TimeServerHandlerPool() {
  service = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), 100, 120L, TimeUnit.SECONDS,
    new ArrayBlockingQueue<Runnable>(1000));
  }
  public void execute(Runnable task) {
  service.execute(task);
  }
}

这个类非常关键,注意注释中所说的内容,


另外再看server类

TimeServerHandlerPool pool = new TimeServerHandlerPool();
    Socket socket = null;
    while (true) {
    socket = server.accept();
    pool.execute(new TimeServerHandler(socket));
    }


通过线程池管理请求任务。


总结:伪异步IO有效的解决了资源宕机的问题,但是依然有如下问题存在,输入输出流依然是阻塞的,假如server返回信息阻塞了1分钟,那么对应的client在获取资源的时候也会在读取流中阻塞1分钟,接着假如以后的请求都不能再加入到阻塞队列后,新的请求将会被拒绝,那么这就像等于系统崩溃了。

相关文章
|
25天前
|
算法 数据处理 Python
Python并发编程:解密异步IO与多线程
本文将深入探讨Python中的并发编程技术,重点介绍异步IO和多线程两种常见的并发模型。通过对比它们的特点、适用场景和实现方式,帮助读者更好地理解并发编程的核心概念,并掌握在不同场景下选择合适的并发模型的方法。
|
6月前
|
数据采集 并行计算 Java
【文末送书】Python高并发编程:探索异步IO和多线程并发
【文末送书】Python高并发编程:探索异步IO和多线程并发
128 0
|
1天前
|
API 调度 开发者
Python中的并发编程:使用asyncio库实现异步IO
传统的Python编程模式中,使用多线程或多进程实现并发操作可能存在性能瓶颈和复杂性问题。而随着Python 3.5引入的asyncio库,开发者可以利用异步IO来更高效地处理并发任务。本文将介绍如何利用asyncio库实现异步IO,提升Python程序的并发性能。
|
1月前
|
调度 数据库 Python
Python中的并发编程:使用asyncio库实现异步IO
传统的Python程序在面对IO密集型任务时,往往会遇到性能瓶颈。本文将介绍如何利用Python中的asyncio库,通过异步IO的方式来提升程序的效率和性能,让你的Python程序能够更好地处理并发任务。
|
5月前
|
存储 网络协议 Linux
2.10 高性能异步IO机制:io_uring
2.10 高性能异步IO机制:io_uring
315 0
|
2月前
|
程序员 调度 云计算
Python并发编程的未来趋势:协程、异步IO与多进程的融合
Python并发编程的未来趋势:协程、异步IO与多进程的融合
|
2月前
|
数据采集 Python
Python多线程与异步IO的对比:何时选择哪种并发模型
Python多线程与异步IO的对比:何时选择哪种并发模型
|
2月前
|
开发者 Python
Python中的并发编程与异步IO
在当今快节奏的互联网时代,如何提高程序的执行效率成为了开发者们关注的焦点。本文将探讨Python中的并发编程与异步IO技术,介绍其原理、应用场景以及优缺点,帮助读者更好地理解和运用这些技术来提升程序性能。
|
2月前
|
并行计算 开发者 Python
Python中的并发编程:异步IO与多线程比较
本文将探讨Python中的并发编程方法,着重比较异步IO和多线程两种不同的实现方式。通过对它们的特点、优缺点以及适用场景进行分析,帮助读者更好地理解并发编程在Python中的应用。
26 1