协成(Gevent) 协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程。CPU只认识线程。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此: 协程能保留上一次调 ...
分类:
其他好文 时间:
2017-09-10 23:48:06
阅读次数:
275
线程 vs 进程 进程:一堆资源集的集合。线程:操作系统能够调度的最小单位。 进程和线程的谁快是误区,进程至少包含一个线程,是没有可比性的。 线程:共享内存,两个线程同时操作一个数据,要加锁。全局GIL lock解释性锁。Lock,加锁;RLock()递归锁,即嵌套锁。线程同时操作一份数据的时候加锁 ...
分类:
其他好文 时间:
2017-09-10 11:19:35
阅读次数:
127
Java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。 相同点和区别 相同点:这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访 ...
分类:
其他好文 时间:
2017-09-10 11:15:42
阅读次数:
192
在电商项目的抢购或其他并发量比较大的项目中,往往会遇到很多人同时操作一张表的情况,这样就会造成读写的错误,特别是写 先看一下不加锁会出现什么情况 先创建一张表 正常情况下,右边的php文件执行几次数据表中的id就加几,应该如下图所示,但是高并发时并不是这样 现在用ab模拟并发的情况,这里一共请求10 ...
分类:
数据库 时间:
2017-09-09 20:57:56
阅读次数:
209
在分布式集群系统的开发中,线程锁往往并不能支持全部场景的使用,必须引入新的技术方案分布式锁。 线程锁:大家都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余 ...
分类:
编程语言 时间:
2017-09-09 14:33:13
阅读次数:
165
参考资料:https://redis.io/commands/setnx 加锁是为了解决多线程的资源共享问题。Java中,单机环境的锁可以用synchronized和Lock,其他语言也都应该有自己的加锁机制。但是到了分布式环境,单机环境中的锁就没什么作用了,因为每个节点只能获取到自己机器内存中的锁 ...
分类:
其他好文 时间:
2017-09-08 16:25:40
阅读次数:
192
go channel 1、不同goroutine之间如何进行通讯? 全局变量和锁同步 Channel 2、channel概念 类似unix中管道(pipe) 先进先出 线程安全,多个goroutine同时访问,不需要加锁 channel是有类型的,一个整数的channel只能存放整数 3、chann ...
分类:
其他好文 时间:
2017-09-08 11:54:28
阅读次数:
231
以上代码说明如下问题,2个协程同时对一个对象指针变量进行读操作的时候需要进行加锁 那么不加有什么问题呢: 会出现打印出只有一个变量的情况 ...
分类:
编程语言 时间:
2017-09-07 23:02:43
阅读次数:
196
一、并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。 mysql: mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。 虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表 ...
分类:
数据库 时间:
2017-09-07 22:00:33
阅读次数:
241
什么是CAS CAS:Compare and Swap,它是一种原子操作,什么是原子操作,可以在多线程编程中实现数据交换而不被打断。是用来更新变量的,当多个线程使用CAS来更新变量时,只有一个线程可以更新变量的值,其他线程都会失败,失败的线程不回被挂起,而是重试直到成功为止。 CAS实现方式,有三个 ...
分类:
编程语言 时间:
2017-09-02 20:46:58
阅读次数:
203