`
wingware
  • 浏览: 144495 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

多线性,高并发,异步非阻塞执行

阅读更多
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger;

public class Test {  
	  
    public static void main(String args[]) throws Exception {  
    	
    	//记录开始时间
        long begin = System.currentTimeMillis();  
        //执行范围 10000次
        int count = 10000;  
         /** 执行结果集 */
        final List<String> result = new Vector<String>();
        final List<String> lost_list = new Vector<String>();  
          
        List<Runnable> list = new ArrayList<Runnable>();  
        for(int i=0;i<count;i++){  
            list.add(new Runnable() {  
                @Override  
                public void run() {  
                    String s = Math.random()+"";  
                    try {  
                        int c = (int) (Math.random() * 1000);  
                        if(c == 5){  
                            throw new RuntimeException("...");  
                        }  
                        result.add(s);
                        getSuccessAndIncrement();
                    } catch (Exception e) {
                        lost_list.add(s);
                        /**  记录错误次数 */
                        getAndIncrement();  
                    }  
                }  
            });  
        }  
        for(Runnable r : list){  
            new Thread(r).start();  
        }  
        int success=0 ;  
        int lost=0;
        while(true){
        	/** 获取成功数 */
        	success = SUCCESS_COUNT.get();  
            /** 获取失败数 */
        	lost = COUNT.get();
            if(count == success+lost){
                break;
            }  
        }
        System.out.println("返回成功结果集:"+result.size());
        System.out.println(">>>处理完毕,失败:"+lost);  
        for(String s : lost_list){  
            System.out.println("lost:"+s);  
        }  
        System.out.println("运行时间:"+(System.currentTimeMillis()-begin)+"毫秒");  
    }  
    
    /** 记录错误的次数 */
    public static final AtomicInteger COUNT = new AtomicInteger(0);  
    
    /**
     * 错误次数加1
     * @return
     */
    public static final void getAndIncrement() {  
        while (true) {  
            int current = COUNT.get();  
            int next = current + 1;  
            if (COUNT.compareAndSet(current, next)) {  
                break;  
            }  
        }  
    }  
    
    /** 成功次数 */
    public static final AtomicInteger SUCCESS_COUNT = new AtomicInteger(0);  
    
    /**
     * 成功次数加1
     * @return
     */
    public static final void getSuccessAndIncrement() {  
        while (true) {  
            int current = SUCCESS_COUNT.get();  
            int next = current + 1;  
            if (SUCCESS_COUNT.compareAndSet(current, next)) {  
                break;  
            }  
        }  
    }  
    
}  
分享到:
评论

相关推荐

    科学知识:同步、异步、阻塞和非阻塞区别

    而异步非阻塞模式可以避免阻塞,但编程复杂度增加,需要处理回调函数或事件循环。 总结来说,同步和异步是关于程序流程控制的,而阻塞和非阻塞是关于系统调用的等待策略。理解这些概念有助于开发者根据具体需求选择...

    异步执行设计与基本概念

    异步执行设计是计算机编程中的一个重要概念,尤其是在高性能和高并发的应用场景中。与之相对的是同步执行,这两种模式在处理任务和数据交互时有着显著的差异。 同步执行,正如其名,意味着当一个功能被调用时,调用...

    CompletableFuture 异步处理

    非阻塞异步通常通过回调或事件通知机制来传递结果,避免了不必要的等待。 总结,CompletableFuture是Java中处理异步编程的强大工具,它通过提供丰富的API和灵活的任务编排方式,简化了异步编程的复杂性,提升了代码...

    C#多线程与异步的区别

    - **调试困难**:由于异步操作的非线性执行特性,调试过程可能会变得更加困难。 #### 多线程的优缺点 **优点**: - **编程简单**:线程中的代码仍然是顺序执行的,这使得多线程编程更加直观和易于理解。 - **灵活...

    服务器端代码(异步,大并发)

    例如,Node.js就以其非阻塞I/O模型和事件驱动的特性,成为实现异步服务器的理想选择。 接着,我们谈谈“大并发”。大并发是指系统在同一时间处理大量并发请求的能力。在高流量的Web服务中,能否有效地处理大并发是...

    C++API异步选择模理

    而异步编程则允许任务并发执行,无需等待,从而实现非阻塞操作。在C++中,异步API通常通过回调函数、事件循环、未来和承诺、协程等方式实现。 异步选择模型是异步编程的一种策略,它提供了一种机制,让程序能够同时...

    异步编程demo

    异步编程是现代软件开发中的重要概念,尤其是在高性能和高并发的应用场景中。它允许程序在等待I/O操作(如网络请求、文件读写)完成时,不阻塞主线程,而是继续执行其他任务,提高了程序的响应性和效率。本节我们将...

    关于事件驱动的异步处理的资料

    事件驱动的异步处理是计算机编程中的一种重要模式,它在现代软件开发中扮演着核心角色,尤其是在高并发和实时响应的应用场景下。这一模式主要依赖于事件和回调函数,使得程序可以在执行某个操作时无需等待其结果,...

    异步网络通讯_Vc_

    5. **异步接受连接**:通过调用`accept`函数的非阻塞版本(配合使用`WSAAsyncSelect`或`WSAEventSelect`)来实现异步连接接受。当有新的连接请求时,系统会触发预设的事件,通知应用程序。 6. **接收/发送数据**:...

    深入理解高性能网络模型.docx

    此外,选择合适的I/O模型和线程模型组合,如配合非阻塞I/O和Epoll的使用,能够大大提高服务器处理高并发请求的能力。 总结来说,高性能网络模型是通过优化I/O模型和线程模型,减少阻塞,提高并发处理能力,从而适应...

    网络游戏-异步网络应用程序处理方法.zip

    异步网络编程是解决网络应用程序性能问题的关键,它允许程序在等待数据传输完成时执行其他任务,而非阻塞等待。这样,服务器可以同时处理多个连接,提高了资源利用率和响应速度。 1. 异步I/O模型:在网络游戏场景中...

    多路IO1

    首先,让我们理解一下同步与异步、阻塞与非阻塞的区别。在Windows中,overlapped I/O或异步I/O意味着操作可以在不等待其完成的情况下启动,系统会在操作完成时通知你。而在Unix/Linux世界,非阻塞I/O通常涉及在数据...

    03-04-04-Netty高性能之道1

    这是因为Netty巧妙地利用了NIO的异步非阻塞特性,避免了线程频繁等待,从而极大地提高了系统的并发处理能力和资源利用率。 首先,Netty的高性能体现在其精心设计的Reactor线程模型上。传统的RPC调用常采用同步阻塞...

    java并发编程-超级大全整理

    Java 并发编程是Java开发中不可或缺的一部分,尤其是在高并发场景下,能够有效提升程序的运行效率。本文将深入探讨Java多线程的相关知识点,帮助开发者理解并掌握如何在Java环境中实现高效的并发处理。 ### 一、多...

    Amp-Http-Client.zip

    6. **PHP非阻塞I/O**:PHP通常被视为一种阻塞I/O的语言,但Amp框架改变了这一情况,使PHP能够处理高并发的网络应用。 7. **版本控制**:"Http-Client-master"暗示了这个项目遵循Git版本控制系统,master分支代表了...

    详解python异步编程之asyncio(百万并发)

    Python中的异步编程是解决高并发、IO密集型任务的关键技术。由于Python的全局解释器锁(GIL),它在多核环境下无法充分利用CPU资源,但在处理网络I/O时,异步编程能够显著提高效率。Python 3.4引入了标准库`asyncio`...

    关于Python核心框架tornado的异步协程的2种方法详解

    而异步操作则不同,它允许程序在等待IO操作期间继续执行其他任务,这种非阻塞的行为提高了程序的响应速度。 在Tornado中,实现异步主要有两种方式:回调(Callback)和协程(Coroutine)。 1. 回调(Callback): ...

    momoko:为龙卷风包装(异步)Psycopg2

    2. **异步编程**: 异步编程是Python中一种处理I/O密集型任务的方式,它允许多个操作同时进行,而不是线性执行。在Tornado这样的异步Web框架中,可以实现非阻塞I/O,提高服务器响应速度。 3. **Tornado框架**: ...

    高性能阻塞队列的数据结构创新.pptx

    这一特性使得阻塞队列非常适合用于生产者-消费者模式的场景,例如在多线程环境中作为线程间通信的桥梁。 阻塞队列广泛应用于各种并发场景中,如任务调度、消息传递、资源管理等。通过合理利用阻塞队列,可以有效...

    征服者:Clojure的轻量级异步

    总的来说,《征服者:Clojure的轻量级异步》旨在引导读者理解Clojure中的异步编程机制,特别是Promise和`async`库的应用,帮助开发者更好地利用这些工具来编写并发、非阻塞的代码,从而提高程序的性能和响应性。...

Global site tag (gtag.js) - Google Analytics