利用golang实现与boost中asio相同的功能
来源:互联网 发布:apache web server 编辑:程序博客网 时间:2024/04/30 05:14
今天在地铁上的时候突然想到,其实可以利用go中的channel轻易实现asio中的异步功能。其实asio主要借助了函数变量来将代码封存,而它之所以这么做是因为c和c++都不支持反映,这一点在go里根本就不存在任何问题,直接用反映就可以搞定。而在go中异步执行也会很简单,因为channle天然就是一个队列,我们一开始只需要指定channel的buffer(这一点比asio要更好用,因为通过buffer的大小我们可以解决异步程序无法解决的流量控制问题),然后将要执行的代码丢给channel,一个专门的goroutine来不断的读取channel中的执行指令,然后进行处理。其实这个多线程思想跟go语言设计中的解决并发的思想是一致的,就是通过数据移动而不是锁来解决问题。只要保证一个数据只会在一个线程里进行处理即可。
但是可惜的是,go语言目前的net包并不支持非阻塞式,而且goroutine本身就是一个闭包,而且golang号称goroutine的消耗很小,切换的代价也很小,这样一来似乎实现一个asio并没有任何意义。所以这也只是上班途中一个突然的想法而已,没啥实现的必要。
- 利用golang实现与boost中asio相同的功能
- 利用boost::asio实现一个简单的服务器框架
- ASIO与BOOST::ASIO的不同之处
- boost中的asio实现定时器功能
- UDP boost::asio的实现
- UDP boost::asio的实现
- UDP boost::asio的实现
- boost::asio中异步请求的实现要点
- boost::asio 中async_read与async_receive的区别
- boost.asio 学习笔记05 asio的windows实现
- boost.asio的跨平台实现
- boost::asio 实现的FTP客户端
- boost.asio的跨平台实现 <转>
- 关于boost::asio::async_write的实现机制
- boost::asio库的结构与构成
- boost中asio的tcp::iostream例子
- Boost中ASIO的一些用法-定时器
- 用 select 实现 定时器功能,摘抄自boost.asio
- Android App 如何动态加载类
- AndroidManifest.xml文件综合详解
- 实现程序复制到系统盘,自启动,自删除,隐藏为系统文件
- Android中的AndroidManifest.xml文件解析
- 触发器中的 inserted表和deleted
- 利用golang实现与boost中asio相同的功能
- C语言可变参数的原理
- 网站收集
- Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)
- Boost组件multi_index_container实例(1)
- 算法时间复杂度的计算
- 很郁闷
- sohu镜像资源网站
- VC++ Tab Control控件的详细使用