2016年2月29日

浅谈过载保护

摘要: 雪球:对于时延敏感的服务,当外部请求超过系统处理能力,如果系统没有做相应保护,可能导致历史累计的超时请求达到一定规模,像雪球一样形成恶性循环。由于系统处理的每个请求都因为超时而无效,系统对外呈现的服务能力为0,且这种情况下不能自动恢复。 作者bison,腾讯后台开发技术总监。 过载保护,看似简单,但 阅读全文

posted @ 2016-02-29 19:33 TonyCoolZhu 阅读(567) 评论(1) 推荐(0) 编辑

2015年2月11日

tornado中使用torndb,连接数过高的问题

摘要: 问题背景最近新的产品开发中,使用了到了Tornado和mysql数据库。但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show processlist,发现连接数很高,我就将目标锁定在程序代码和torndb上了。探索原因当我ki... 阅读全文

posted @ 2015-02-11 11:29 TonyCoolZhu 阅读(3696) 评论(0) 推荐(1) 编辑

2013年7月24日

python多线程编程(4): 死锁和可重入锁

摘要: 死锁在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子:# encoding: UTF-8import threadingimport timeclass MyThread(threading.Thread): def do1(self): global resA, resB if mutexA.acquire(): msg = self.name+' got resA' print msg ... 阅读全文

posted @ 2013-07-24 16:23 TonyCoolZhu 阅读(317) 评论(0) 推荐(0) 编辑

python多线程编程(3): 使用互斥锁同步线程

摘要: 问题的提出上一节的例子中,每个线程互相独立,相互之间没有任何关系。现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1。很容易写出这样的代码:# encoding: UTF-8import threadingimport timeclass MyThread(threading.Thread): def run(self): global num time.sleep(1) num = num+1 msg = self.name+' set num to '+str(nu... 阅读全文

posted @ 2013-07-24 15:52 TonyCoolZhu 阅读(609) 评论(0) 推荐(0) 编辑

python多线程编程(1): python对多线程的支持

摘要: 在开始之前,首先要了解一下python对多线程的支持。虚拟机层面Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势。语言层面在语言层面,Python对多线程提供了很好的支持,Python中多线程相关的模块包括:thread,threading,Queue。可以方便地支持创建线程、互斥锁、信号量、同步等特性。thread:多线程的底层支持模块,一般不建议使用。threading:对thread进行了封装,将一些线程的操作对象化,提供下列类:Thread线程类Timer与Thread类似,但要等待一段时 阅读全文

posted @ 2013-07-24 15:37 TonyCoolZhu 阅读(386) 评论(0) 推荐(0) 编辑

python多线程编程(2): 线程的创建、启动、挂起和退出

摘要: 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法。而创建自己的线程实例后,通过Thread类的start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行的机会时,就会调用run方法执行线程。让我们开始第一个例子:# encoding: UTF-8import threadingimport timeclass MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I 阅读全文

posted @ 2013-07-24 15:36 TonyCoolZhu 阅读(525) 评论(0) 推荐(0) 编辑

多线程的基本概念

摘要: 多线程编程必须理解的一些基本概念,适用于所有编程语言。内容:并发式编程多任务操作系统多线程vs多进程线程安全线程的生命周期线程的类型并发式编程不同的编程范式对软件有不同的视角。并发式编程将软件看做任务和资源的组合——任务之间竞争和共享资源,当资源满足时执行任务,否则等待资源。并发式编程使得软件易于理解和重用,在某些场景能够极大提高性能。多任务操作系统要实现并发,首先需要操作系统的支持。现在的操作系统大部分都是多任务操作系统,可以“同时”执行多个任务。多任务可以在进程或线程的层面执行。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间。多任务操作系统可以“并发”执行这些进程。线 阅读全文

posted @ 2013-07-24 13:56 TonyCoolZhu 阅读(247) 评论(0) 推荐(0) 编辑

2012年12月24日

对 HTTP 304 的理解(转)

摘要: 最近和同事一起看Web的Cache问题,又进一步理解了 HTTP 中的 304 又有了一些了解。304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。如 果客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。只 阅读全文

posted @ 2012-12-24 18:51 TonyCoolZhu 阅读(245) 评论(1) 推荐(0) 编辑

2012年11月30日

获取光标位置

摘要: 在项目开发中经常遇到input等设置光标位置到最后的问题,今天我查了一下Google,找到了在IE、Firefox、Opera等主流浏览器的获取光标位置(getCursortPosition)以及设置光标位置(setCursorPosition)的函数。function getCursortPosition (ctrl) {//获取光标位置函数var CaretPos = 0;// IE Supportif (document.selection) {ctrl.focus ();var Sel = document.selection.createRange();Sel.moveStart(& 阅读全文

posted @ 2012-11-30 15:46 TonyCoolZhu 阅读(390) 评论(0) 推荐(0) 编辑

2012年11月26日

单向进度条的实现。

摘要: 通过setInterval来实现宽度百分比的递加。最后记得要删除interval。 阅读全文

posted @ 2012-11-26 15:21 TonyCoolZhu 阅读(216) 评论(0) 推荐(0) 编辑

导航