boost asio异步和stl异步的简单对比

简介: boost asio异步和stl异步的简单对比

boost asio异步代码

#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
void print(const int data)
{
  if (data == 99999)
    std::cout << data << std::endl;
}
int main()
{
  boost::asio::io_service io_service;
  boost::asio::io_service::work work(io_service);
  UINT tm1 = GetTickCount();
  for (int i = 0;i < 100000; i++)
  {
    io_service.post(std::bind(&print, i));
  }
  UINT tm2 = GetTickCount();
  std::cout << "cost:" << tm2 - tm1 << std::endl;
  try
  {
    boost::thread([&]() {
      io_service.run();
    });
  }
  catch (...)
  {
  }
  getchar();
  return 0;
}

结果打印:

stl异步代码:

#include <iostream>
#include <future>
#include <Windows.h>
void print(const int data)
{
  if (data == 99999)
    std::cout << data << std::endl;
}
int main()
{
  UINT tm1 = GetTickCount();
  for (int i = 0;i < 100000; i++)
  {
    std::async(std::bind(&print, i));
  }
  UINT tm2 = GetTickCount();
  std::cout << "cost:" << tm2 - tm1 << std::endl;
  getchar();
  return 0;
}

输出结果如下:


         
相关文章
|
5月前
boost异步
boost异步
|
11月前
19.10 Boost Asio 同步文件传输
在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含`goodbye lyshark`关键词来验证文件是否传输结束了,当然了这种传输方式明显没有根据长度传输严谨,但使用这种方式也存在一个有点,那就是无需确定文件长度,因为无需读入文件所以在传输速度上要快一些,尤其是面对大文件时。服务端代码如下所示,在代码中我们分别封装实现`recv_remote_file`该函数用于将远程特定目录下的文件拉取到本地目录下,而`send_local_file`函数则用于将一个本地文件传输到对端主机上,这两个函数都接收三个参数,分别是套接字句柄,本地
88 0
19.10 Boost Asio 同步文件传输
|
11月前
19.3 Boost Asio 多线程通信
多线程服务依赖于两个通用函数,首先`boost::bind`提供了一个高效的、简单的方法来创建函数对象和函数对象适配器,它的主要功能是提供了一种将函数和它的参数绑定到一起的方法,这种方法可以将具有参数的成员函数、普通函数以及函数对象转化为不带参数的函数对象。当参数绑定后则下一步就需要使用多线程功能,Boost库中提供了`boost::thread`库,`boost::thread`可以用于创建线程、启动线程、等待线程执行结束以及线程间通信等多种操,有了这两个关键库那么我们只需要`accept.accept(*sock)`等待套接字上线,当有套接字上线后则自动创建`MyThread`子线程,
89 0
19.3 Boost Asio 多线程通信
|
10月前
|
设计模式 网络协议 Java
C++ Boost 异步网络编程基础
Boost库为C++提供了强大的支持,尤其在多线程和网络编程方面。其中,Boost.Asio库是一个基于前摄器设计模式的库,用于实现高并发和网络相关的开发。Boost.Asio核心类是`io_service`,它相当于前摄模式下的`Proactor`角色。所有的IO操作都需要通过`io_service`来实现。在异步模式下,程序除了发起IO操作外,还需要定义一个用于回调的完成处理函数。`io_service`将IO操作交给操作系统执行,但它不同步等待,而是立即返回。调用`io_service`的`run`成员函数可以等待异步操作完成。当异步操作完成时,`io_service`会从操作系统获取结
117 1
C++ Boost 异步网络编程基础
|
5月前
|
Linux 程序员 C++
【C++ 常见的异步机制】探索现代异步编程:从 ASIO 到协程的底层机制解析
【C++ 常见的异步机制】探索现代异步编程:从 ASIO 到协程的底层机制解析
809 2
|
存储 Windows
asio源码解析
基于1.57版本
186 0
asio源码解析
|
存储 设计模式 Java
4.7 C++ Boost 多线程并发库
C++语言并没有对多线程与网络的良好支持,虽然新的C++标准加入了基本的`thread`库,但是对于并发编程的支持仍然很基础,Boost库提供了数个用于实现高并发与网络相关的开发库这让我们在开发跨平台并发网络应用时能够像Java等语言一样高效开发。 thread库为C++增加了多线程处理能力,其主要提供了清晰的,互斥量,线程,条件变量等,可以很容易的实现多线程应用开发,而且该库是可跨平台的,并且支持`POSIX`和`Windows`线程。
162 0
|
5月前
|
网络协议
boost asio异步小析
boost asio异步小析
|
5月前
boost asio多线程
boost asio多线程
|
11月前
|
存储 网络协议 API
19.0 Boost 基于ASIO网络编程技术
Boost ASIO库是一个基于C++语言的开源网络编程库,该库提供了成熟、高效、跨平台的网络API接口,并同时支持同步与异步两种模式,ASIO库提供了多重I/O对象、异步定时器、可执行队列、信号操作和协程等支持,使得开发者可以轻松地编写可扩展的高性能网络应用程序,同时保持代码简洁、易于维护。在学习`ASIO`库之前,我们先来实现一个简单的地址解析功能,Boost库中提供了`ip::tcp::resolver`对象,该对象可用于解析给定主机名和端口号的`IP`地址,学会使用这个对象即可实现对特定主机域名地址的解析功能,如下封装实现了`GetDNSAddress`该函数传入一个域名,并输出该域名
111 0
19.0 Boost 基于ASIO网络编程技术