2016-08-04 Li Shuai
这里的blocking signal里的blocking并不是传统意义上的针对IO的blocking, 尽管这可能是引起ioloop阻塞的一个原因之一。在这里,blocking指的是ioloop在epoll返回之后开始依次处理各监听文件句柄上的IO事件时,直到下一次进入epoll调用的这段时间的ioloop的状态。我们知道Tornado是单线程的,在处理完某次epoll调用返回的读写就绪事件之前,Tornado无法启动下次epoll监听,所以这段时间理论上是越短越好,这样,ioloop可以充分及时的获取就绪文件句柄,不会影响整体IO性能。然而在实际的使用过程中,难免会出现某次处理时间过长,从而导致ioloop的blocking时间过 继续阅读 »
2016-04-01 AllanChan
为什么 UIScrollView 的滚动会导致 NSTimer 失效? 定时器里面有个runoop mode,一般定时器是运行在Defaultmode上但是如果滑动了这个页面,主线程runloop会转到UITrackingRunLoopMode中,这时候就不能处理定时器了,造成定时器失效,原因就是runroop mode选错了。 解决办法有2个: 1:更改mode为NSRunLoopCommonModes(无论runloop运行在哪个mode,都能运行) 2:切换到主线程来更新UI界面的刷新 继续阅读 »
2014-08-18 veryyoung
学习Java多线程中会遇到使用volatile关键字的情况。 volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型. volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存 Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchroniz 继续阅读 »
2017-03-06 KasperDeng
生产环境之运维 最近在生产环境上游历了一番,大版本升级,流量控制,问题的追根索源,甚是各种艰辛。 线上资源配置问题 池化连接 必须清楚了解业务进行设置 主要是连接数个数与闲置回收的时间: 防止连接数瓶颈。 超时设置:防止在网络抖动或者数据库不可用的状况下,业务核心线程被阻塞,连接池爆浆。 e.g. 数据库连接池 池的最小最大值(不同数据库需) 从DPCP获取连接超时 连接超时 读超时 socket超时 重试次数与每次重试相隔时间 NoSQL 容量 (dimension) TTL 连接管理 Dev提供友好的配置指引,工程公式及原理,让Ops了解当前系统在不同的部署环境下如何合理配置系统资源。 系统连接数及计算公式 客户端(e.g 继续阅读 »
2018-05-07 Mystery0 M
Java部分(基础) 基础部分1 https://www.imooc.com/learn/85 1. 基本的语句(if else这些) 2. 数组,函数 基础部分2 https://www.imooc.com/learn/124 1. 类和对象(构造函数、静态变量、静态方法) 2. 继承(方法重写、抽象类) 3. 接口 基础部分3 1. 集合,泛型,Map,迭代器(Iterator) 2. 常用的工具类(String、File、Date、Calendar、) 3. 异常处理(try……catch) 4. 输入输出流(可以后面在Android需要时学习) 5. 多线程(可以后面在Android需要时学习) Android(基础 继续阅读 »
2015-09-28 veryyoung
定时任务是非常常见的需求,比如定期的去汇总数据,定期的清除垃圾等。 Java 提供了很多定时任务的方案,下面简单的列举一下。 more 利用 thread 的sleep 新开一个线程,死循环运行,通过 sleep 的达到定时运行的效果。 public static void main(String[] args) { final long timeInterval = 1000; Runnable runnable = new Runnable() { public void run() { while (true) { 继续阅读 »
2017-05-06 张炎泼
mdtoc start 表现 解决方法 定位问题过程 gdb-python: 搞清楚python程序在做什么 准备gdb 接入gdb 查看线程 查看调用栈 coredump 其他命令 pyrasite: 连接进入python程序 psutil 查看python进程状态 guppy 取得内存使用的各种对象占用情况 无法回收的对象 不可回收对象的例子 🌰 objgraph 查找循环引用 继续阅读 »
2015-01-17 Jason Liao
之前看了一篇关于,Event Loop的文章,做了下面的笔记。 Event Loop 是解决 JavaScript 单线程问题的一种运行机制 继续阅读 »
2014-04-02 码农明明桑
我们的常用的系统中,程序的工作通常是有事件驱动和消息驱动两种方式,在Android系统中,Java应用程序是靠消息驱动来工作的。 消息驱动的原理就是: 1. 有一个消息队列,可以往这个队列中投递消息; 2. 有一个消息循环,不断从消息队列中取出消息,然后进行处理。 在Android中通过Looper来封装消息循环,同时在其中封装了一个消息队列MessageQueue。 另外Android给我们提供了一个封装类,来执行消息的投递,消息的处理,即Handler。 more 在我们的线程中实现消息循环时,需要创建Looper,如: cla 继续阅读 »
2014-07-03 jude
浏览器中的javascript引擎是单线程的,如果在setTimeout设定的时间到达时,javascript引擎还在处理另外的代码,那么setTimeout设定的事件就只有排队等待了。所以一般来说setTimeout设定的时间都是不准确的,会比设定的晚。就算setTimeout时间设定为0,也不一定马上执行,这样设定是把想执行的函数放在javascript引擎执行队列的末尾。 继续阅读 »