2017
11-22
11-22
python 并发subprocess.Popen的坑
表现一个父进程里多个线程并发地调用subprocess.Popen来创建子进程的时候,会有几率出现Popen长时间不返回的情况.这个问题是由于fd被多个子进程同时继承导致的.重现问题的代码下面这个小程序启动2个线程,每个线程各自(通过subprocess.Popen)启动一个子进程,一个子进程执行echo1后就直接返回;另一个子进程启动后,sleep0.03秒后返回.程序里统计了2个调用Popen花的时间,运行后可以发现,ech...
继续阅读 >
这是整个Rack系列文章的最后一篇了,在之前其实也尝试写过很多系列文章,但是到最后都因为各种原因放弃了,最近由于自己对Ruby的webserver非常感兴趣,所以看了下社区中常见webserver的实现原理,包括WEBrick、Thin、Unicorn和Puma,虽然在Ruby社区中也有一些其他的webserver有着比较优异的性能,但是在这有限的文章中也没有办法全都介绍一遍。在这篇文章中,作者想对Ruby社区中不同webserver的实现...
我们通常衡量一个Web系统的吞吐率的指标是QPS(QueryPerSecond,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时,系统内有20台Apache的Web服务器,配置MaxClients为500个(表示Apache的最大连接数目)。那么,我们的Web系统的理论峰值QPS为(理想化的计算方式):20*500/0.1=100000(10万QPS)咦?我们的系统似乎很强大,1秒...
这篇文章主要介绍了MySQL中SELECT+UPDATE处理并发更新问题解决方案分享,需要的朋友可以参考下。问题背景假设MySQL数据库有一张会员表vip_member(InnoDB表),结构如下:当一个会员想续买会员(只能续买1个月、3个月或6个月)时,必须满足以下业务要求:如果end_at早于当前时间,则设置start_at为当前时间,end_at为当前时间加上续买的月数如果end_at等于或晚于当前时间,则设置end_at=end_at+续买的月数续买后active_stat...
空间换时间多级缓存,静态化客户端页面缓存(httpheader中包含Expires/CacheofControl,lastmodified(304,server不返回body,客户端可以继续用cache,减少流量),ETag)反向代理缓存应用端的缓存(memcache)内存数据库Buffer、cache机制(数据库,中间件等)索引哈希、B树、倒排、bitmap哈希索引适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。B树索引适合于查询为主导的场景,避免多次的IO,提高查...