2015-04-08 AllanChan
iOS GCD 基础名词解析: 串行与并行 串行和并行都是相对于队列而言的 -队列(负责调度任务) 串行队列:一个接一个的调度任务 并发队列:可以同时调度多个任务 同步与异步 串行与并行针对的是队列,而同步与异步,针对的则是线程。 最大的区别在于,同步线程要阻塞当前线程,必须要等待同步线程中的任务执行完,返回以后,才能继续执行下一任务;而异步线程则是不用等待。 仅凭这几句话还是很难理解,所以可以多准备几个案例,边分析边理解。 继续阅读 »
2014-03-25 W.Y.
正如我们在凌乱的异步编程一文中看到的那样,基于回调函数的异步代码的错误处理也很快变得混乱起来,丢失了许多同步代码具有的优秀品质,使我们更难定位到错误原因。在用 Promises 简化异步编程一文中,我们介绍了 Promises,看到了它如何使我们回到“调用 - 返回”编程模型,允许异步错误像同步错误那样沿着调用堆栈向上传播,并提供一种更清晰方法来管理异步,特别是在处理错误时。 1. Try/catch/finally 在同步代码中,try/catch/finally 提供了一种简单友好但非常强大的惯用语法来执行任务、处理错误,并且总是确保稍后可以执行清理。 译注:idiom 习语 下面是一个简单的 try/catch/fin 继续阅读 »
2014-09-22 summer
写在前面的话 一直希望找一个很好的邮件客户端,可以很好的帮助查收邮件,同时又可以很方便的备份邮件。随着工作时间积累,很多工作都在存在在邮件中。 开始工作主要在windows下面进行,随后来到北京后慢慢习惯了ubuntu操作系统的方便,不过最近随着自己的小黑下岗之后,便入手了mac book,所以很希望找一个跨平台的邮件客户端。所以本人选择了Thunderbird客户端,可以在三个平台中安装使用。 另外,为了方便在三个平台中邮件数据的同步,本人使用了dropbox进行数据的同步。这样把邮件信息保存在dropbox中,可以很方便的在不同的平台中进行同步。 但是问题出现了,安装thunderbird客户端都是默认在某个文件夹中,怎么才可 继续阅读 »
2016-04-23 Wenjie Yao
  最近由于TW技术雷达(Tech Radar)的机缘,同事向我们介绍了一个用于浏览器同步测试的工具 --- Browsersync,使用之后,发现它着实简单,而且十分炫酷。更重要的一点是,Browsersync可以同时在PC、平板、手机等设备下进项UI调试,换句话说,你在其中一个浏览器上的操作会同步到多个设备的多个浏览器上。 继续阅读 »
2016-06-06 Li Shuai
最不喜欢在Tornado中使用任何同步阻塞型的东西,不想让ioloop阻塞在某个IO调用上,因为单线程的东西任何阻塞都是代价很高的,除非你的数据库被优化的性能很好,速度很快。除了之前的线程池之外,直接使用异步库也是不错的选择,Motor就是Tornado里可以用的很好的异步库,它兼容Tornado的gen.coroutine式的异步调用形式,主要使用了greenlet来巧妙的封装PyMongo的同步API, 把底层的socketIO进行了异步化的处理,化同步为异步。 从使用的例子来分析Motor是如何把PyMongo的API异步化的: client = motor.MotorClient(...) db = client['te 继续阅读 »
2016-02-17 summer
为系统设置数据库的主从复制,今天突然发现数据库在某个时间点报错后不再继续同步,需要处理一下使之继续工作。 在slave上使用show slave status\G查看一下同步的状态,发现同步出现错误。 从网上找了两种解决方式 方法一 继续阅读 »
2016-03-15 demon7452
Java面试题总结(其一) 1、sleep和wait方法的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在 任何地方使用 synchronized(x){ x.notify() //或者wait() } sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常 继续阅读 »
2014-08-20 veryyoung
Synchronized 是Java语言的关键字,可用来给对象和方法或者代码块加锁。 当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。 当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。 另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然可以访问该object中的非加锁代码块。 synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。 如果再细的分类,synchronized可作用于instance变量、obj 继续阅读 »
2015-07-20 veryyoung
tomcat-redis-session-manager 用tomcat默认的方式来管理session是很有问题的,比如项目重启tomcat,用户会话就会丢失,这样用户体验非常糟糕。应用只要稍微上点规模或者需要多机负载,这是必须做的工作了。 web server自带解决方案有2: tomcat有自带的session共享方式cluster,多个tomcat实时复制session。缺点是服务器之间会频繁的进行数据同步,如果在不同机器上网络开销会非常大,而且数据同步会有延迟的,这可能导致数据不一致,还有缺点就是session在每台机器都保有一份,太浪费资源了! ngnix有基于ip hash转发的策略,用这个来保证每个IP每次 继续阅读 »
2016-09-30 ruki
原子操作,线程间交互数据最细粒度的同步操作,它可以保证线程间读写某个数值的原子性。 由于不需要加重量级的互斥锁进行同步,因此非常轻量,而且也不需要在内核间来回切换调度,效率是非常高的。。 那如何使用原子操作了,各个平台下都有相关api提供了支持,并且向gcc、clang这些编译器,也提供了编译器级的__builtin接口进行支持 windows的Interlockedxxx和Interlockedxxx64系列api macosx的OSAtomicXXX系列api gcc的__sync_val_compare_and_swap和__sync_val_compare_and_swap_8等__builtin接口 x86和x86_ 继续阅读 »