一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Jiryu Davis 与 Python 之父 Guido van Rossum.项目代码使用 MIT 协议,项目文档使用 http://creativecommons.org/licenses/by/3.0/legalcode 协议. 课程内容在原文档基础上做了稍许修改,增加了部分原理介绍,步骤的拆解分析及源代码注释. 2. 内容简介 传统计算机…
python网络库也有了基于协程的实现,比较著名的是 gevent.eventlet 它两之间的关系可以参照 Comparing gevent to eventlet, 本文主要简单介绍一下eventlet一个例子 客户端: import eventletfrom eventlet.green import urllib2 def myfetch(myurl, i): req = urllib2.Request(myurl) req.add_header('User-agent', 'Mozil…
写了一个(不完整的)基于协程的task调度库 sample code如下 my_spawn( function () print('f: 1') local t1 = my_spawn( function () print('f: 3') task_yield_to_be_schedule() print('f: 4') end ) --task_yield_to_be_schedule() my_wait_task(t1) print('f: 2') end ) while my_run_on…
目录 需求分析 使用示例 模块设计 UML 类图 入口 事务 连接池 连接 查询器的组装 总结 需求分析 本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器: 支持通过链式调用构造并执行 SQL 语句: 支持连接池技术: 支持多协程事务并发执行(协程安全性): 支持连接对象的健康检测: 支持连接对象断线重连: 程序需要可扩展,为未来的改造留好扩展点: 完整项目地址:[协程版 MySQL 查询器](https://github.com/linvanda/mysql) (注:该项…
目录 介绍 使用 性能 实现 日志库 协程 协程调度 定时器 Hook RPC实现 项目地址:https://github.com/gatsbyd/melon 介绍 开发服务端程序的一个基本任务是处理并发连接,现在服务端网络编程处理并发连接主要有两种方式: 当"线程"很廉价时,一台机器上可以创建远高于CPU数目的"线程".这时一个线程只处理一个TCP连接,通常使用阻塞IO.例如Go goroutine.这里的"线程"由语言的runtime自行调度…
import gevent def test1(): print 12 gevent.sleep(0) print 34 def test2(): print 56 gevent.sleep(0) print 78 gevent.joinall([ gevent.spawn(test1), gevent.spawn(test2), ]) 解释下,"gevent.spawn()"方法会创建一个新的greenlet协程对象,并运行它."gevent.joinall()"…
连接池的含义,很多都知道,比如mysql的数据库连接是有限的,一开始连接mysql创建N个连接,放到一个容器里,每次有请求去容器中取出,取出用完再放回去. es3demo里,有mysql的连接池. EasySwooleEvent::30行,执行initialize方法会注册一个MysqlPool::class MysqlPool是继承于AbstractPool的只实现了createObject方法来创建mysql连接对象 AbstractPool这个抽象类,里我们分析下2个函数getObj和re…
现象: 1. 没有使用boost.log前能正常收发数据 2.加入boost.log后async_connect没有回调 fix过程: 1. gdb调试发现程序block在pthread_timed_wait.死锁? 使用helgrind没有检查出异常. 2. 难道是内存错误? valgrind的memcheck也没有发现异常 3. 重新编译boost为debug版, gdb调试发现 task_io_service的op_queue_works_的内存地址在使用boost.log前后居然从630…
归并排序这个可能很多人都不知道,今天用Go语言简单的实现下,其他语言可能要基于线程来实现. //产生一个源 func ArraySource(a ...int) chan int{ out :=make(chan int) go func(){ for _,v:=range a{ out <- v } close(out) }() return out } //进行排序 func InMemSort(in <- chan int) <-chan int { out := make(cha…
什么是orchid? orchid是一个构建于boost库基础上的C++库,类似于python下的gevent/eventlet,为用户提供基于协程的并发模型. 什么是协程: 协程,即协作式程序,其思想是,一系列互相依赖的协程间依次使用CPU,每次只有一个协程工作,而其他协程处于休眠状态.协程在控制离开时暂停执行,当控制再次进入时只能从离开的位置继续执行. 协程已经被证明是一种非常有用的程序组件,不仅被python.lua.ruby等脚本语言广泛采用,而且被新一代面向多核的编程语言如golang…