整理socket编程<二>:boost::asio实现异步服务器

本文介绍了如何利用boost::asio库开发异步服务器,对比了同步和异步IO,强调了线程安全问题。在多线程环境下,事件完成处理器可能在任意调用`io_service::run`的线程中执行,可能导致并发访问问题。通过示例展示了简易异步服务器的实现。
摘要由CSDN通过智能技术生成

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.前言</span>

前面文章已实现了调用win32 socket来实现同步服务器的开发,包括使用非阻塞模式+select I/O模型来实现非阻塞的服务器开发,本篇来介绍下boost::asio开源库来实现异步服务器的开发。

asio库是基于操作系统提供的异步机制,采用前摄器设计模式实现了可移植的异步(或者同步)IO操作,不要求使用多线程和锁,有效地避免了多线程编程带来的条件竞争,死锁等问题

2.线程安全问题

多线程调度情况:

asio规定:只能在调用io_service::run的线程中才能调用事件完成处理器。

注:事件完成处理器就是你async_accept、async_write等注册的句柄,类似于回调的东西。

单线程:

如果只有一个线程调用io_service::run,根据asio的规定,事件完成处理器也只能在这个线程中执行。也就是说,你所有代码都在同一个线程中运行,因此变量的访问是安全的。

多线程:

如果有多个线程同时调用io_service::run以实现多线程并发处理。对于asio来说,这些线程都是平等的,没有主次之分。如果你投递的一个请求比如async_write完成时,asio将随机的激活调用io_service::run的线程。并在这个线程中调用事件完成处理器(async_write当时注册的句柄࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值