同步异步和阻塞2-测试小项目

《同步异步和阻塞1》中,分别说明了3种同步异步和阻塞非阻塞的优缺点,从这个blog开始,我们用一个小项目来进一步深入的看看他们的优缺点。

1. 项目简介

code : sync_io

编译 : C++, VS2010

项目有2个IO,按下”Start”按钮后就会开始按照不同的IO处理方法调用IO。

2. IO的模拟

IO是用一个简单的Sleep() API随机sleep一段时间模拟的,这个API会阻塞当前线程,其实现在”WindowsMain/SyncIO.cpp”。

int CSyncIO::IO()
{
    DMFUNCTION;
    LARGE_INTEGER stCounter = {0};
    ::QueryPerformanceCounter(&stCounter);
    srand(stCounter.LowPart);
    int nRandom= rand() % 100;

    for (int i = 1; i <= 100; i++)
    {
        ::Sleep(nRandom);
    }

    return nRandom;
}

如果为了让测试更明显,可以增加”int nRandom= rand() % 100;”的取值范围,这里是100ms,一个IO操作最长会是10s完成。

3. 为了更清晰的显示不同的IO处理方式,这个小项目把UI的操作全部集中到”CMainWnd”这个类中,为了简化code,这里在操作3类不同的IO处理方式时,需要在这里手动注释/反注释以选择对应的处理类

当按下”Start”按钮时,就会调用IO处理类的OnStart()函数,如果是同步的方式,则IO得结果就会显示在”IO Result”字段中,而如果是异步则该按钮会立即变为”Stop”,当IO处理完后”IO Result”才会显示结果

当按下”Stop”按钮时,就会调用IO处理类的OnStop()函数。

4. 3类不同的IO处理方式的类

CSyncIO : 同步阻塞方式,实现了基本所有功能(包括和UI的交互),其他2个类都是继承于此

CSyncIOByPolling : 同步非阻塞方式,重载了OnStart()函数

CAsyncIO : 异步非阻塞方式,重载了OnStart()和OnStop()函数

时间: 2024-10-08 17:25:44

同步异步和阻塞2-测试小项目的相关文章

同步异步和阻塞5-异步非阻塞

项目简介和code见<同步异步和阻塞2-测试小项目> 1. 实现 1> 异步线程IO处理 unsigned CAsyncIO::ThreadWork() { int nRet = IO(); //map is better than array at here, but it need STL unsigned uTid = GetCurrentThreadId(); for (int i = 0; i < sizeof(m_uThreadArray) / sizeof(m_uTh

同步异步和阻塞3-同步阻塞

项目简介和code见<同步异步和阻塞2-测试小项目> 1. 实现 bool CSyncIO::OnStart() { //loop to handle IO for (int i = 0; i < 2; i++) { int nRet = IO(); if (m_pCObserver) m_pCObserver->OnProgressByCall(100, i); NotifyResult(nRet, i); } return true; } 同步的实现很简单,依次call2次 I

同步/异步,阻塞/非阻塞的个人小总结

同步/异步,阻塞/非阻塞的个人小总结 最近一直在用scrapy写编写爬虫程序,在阅读其源码和开源项目的时候,常常会接触到一些网络编程相关的东东. 首先,Scrapy是由Twisted写的一个受欢迎的Python事件驱动网络框架, 它使用的是非堵塞的异步处理. 在网络编程中有 阻塞/非阻塞 和 同步/异步的概念,这里我做了一个总结: 因为中文语意的问题,很多时候确实会导致混用,而且语境不一样意义也可能不一样.在这里 网络编程严重区别与线程控制. 线程控制中: 阻塞非阻塞:可以简单理解为需要做一件事

python第三十七天,GIL全局解释器锁*****,线程池与进程池 同步异步,阻塞与非阻塞,异步回调

GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe

30分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行

基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程.线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的.进程可以理解为一个程序的基本边界.是

理解同步异步与阻塞非阻塞

本篇文章我准本从三个大方面来解释下同步异步.阻塞非阻塞的知识,第一个方面主要是说下,到底什么是同步异步.阻塞非阻塞:第二个方面主要是解释下在I/O场景下,同步异步阻塞非阻塞又是怎么定义的,第三个方面介绍下在unix下同步异步又有哪些阻塞非阻塞IO. 1.同步异步与阻塞非阻塞 首先从大的方面来说,"阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答. 1).同步与异步 同步和异步关注的是消

同步/异步与阻塞/非阻塞

一.同步与异步同步/异步, 它们是消息的通知机制 1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等).但是一般而言,我们在说同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务.最常见的例子就是 SendMessage.该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回.当对方处理完毕以后,该函数才把消息处理函数所返回的值返回给调用者. B.

深入理解同步/异步与阻塞/非阻塞区别 (转)

转载自:http://chuansong.me/n/2124760 几年前曾写过一篇描写同步/异步以及阻塞/非阻塞的文章,最近再回头看,还存在一些理解和认知误区,于是重新整理一下相关的概念,希望对网络编程的同行能有所启发. 同步与异步 首先来解释同步和异步的概念,这两个概念与消息的通知机制有关. 举个例子,比如一个用户去银行办理业务,他可以自己去排队办理,也可以叫人代办,办完之后再告知用户结果.对于要办理这个银行业务的人而言,自己去办理是同步方式,而别人代办完毕再告知则是异步方式. 两者的区别在

IO中同步异步,阻塞与非阻塞 -- 原理篇

再补一篇高手写的理论分析,便于更深刻理解 转自:http://blog.csdn.net/historyasamirror/article/details/5778378 ============================================================= 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答