1、简介: RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用。 RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制读取数据的时候不对链表进行耗时的加锁操作。这样在同一时间可以有多个线程同时读取该链表,并且允 ...
分类:
系统相关 时间:
2018-02-23 23:58:15
阅读次数:
394
[TOC] 简介 由于HashMap是非线程安全的,而且HashTable和Collections.synchronizedMap()的效率很低(基本上是对读写操作加锁,一个线程在使用,其他线程必须等待)。因此可以使用并发安全的ConcurrentHashMap。 ConcurrentHashMap ...
分类:
其他好文 时间:
2018-02-23 20:46:08
阅读次数:
256
注意 1.不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池。其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉2.只要你用并发,就会有锁的问题,但是你不能一直去自己加锁吧那么我们就用QUEUE,这样还解决了自动加锁的问题由Queue延伸出的一个点也非常重要的概念。以 ...
分类:
编程语言 时间:
2018-02-19 23:19:53
阅读次数:
280
一、互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理。 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全。 1.上厕所的小例子:你上厕所的时候肯定得锁门 ...
分类:
编程语言 时间:
2018-02-19 18:36:58
阅读次数:
206
1 并发 多用户数据库管理系统的一个主要任务是对 并发(concurrency)进行控制,即对多个用户同时访问同一数据进行控制。当缺乏有效的并发控制时,修改数据的操作就不能保证正常,从而危害数据完整性。管理数据并发的方法是让每个用户轮流操作数据。而数据库管理系统的目标就是减少每个用户的等待时间,即让 ...
分类:
其他好文 时间:
2018-02-19 13:47:36
阅读次数:
184
JDK1. 7中的ThreadPoolExecutor 线程池,顾名思义一个线程的池子,池子里存放了非常多能够复用的线程,假设不用线程池相似的容器,每当我们须要创建新的线程时都须要去new Thread(),用完之后就被回收了,线程的启动回收都须要用户态到内核态的交互,频繁的创建开销比較大。而且随着 ...
分类:
其他好文 时间:
2018-02-18 15:57:50
阅读次数:
228
问题 如何支持一个无容量限制的channel 取出元素会阻塞到元素存在并且返回 放入元素永远不会阻塞,都会立即返回 方法一:用两个chan加一个list模拟 在单独的goroutine处理入队和出队,这样不用给list加锁。 完整代码:https://github.com/luweimy/gouti ...
分类:
其他好文 时间:
2018-02-14 18:43:07
阅读次数:
975
1 什么是线程 线程,有时被称为轻量级进程,是程序执行的最小单元。一个标准的线程由线程ID、 程序计数器(pc)、一组寄存器和堆栈组成。通常,一个进程由多个线程组成,每个线程之间共享进程的内存空间(包括代码段、数据段、堆等)及一些进程级的 资源(如打开的文件描述符和信号)。如下图所示: 2 线程的访 ...
分类:
编程语言 时间:
2018-02-13 17:58:54
阅读次数:
234
一、进程通信1、信号量互斥锁:同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 如果指定信号量为3,那么来一个人获得一把锁,计数加1,当计数等于3时,后面的人均需要等待。一旦释放,就有人可以获得一把锁,信号量与进程池的概念很像,但是要区分开,信号量涉及到加锁的概念。from multiprocessin
分类:
编程语言 时间:
2018-02-11 16:20:13
阅读次数:
239
场景问题 业内都有一个不朽的传说。就是程序猿是找不到女朋友的。没有女朋友怎么行。今天咱就带着大家用Java的知识。来”追”一个女朋友。 那在追女友之间阿,咱先定一个女友的标准。只是。这个标准不能乱定是吧。不能像网上流传的一样。”女的,活的”。做为一个有理想的程序猿。我认为我的女朋友,要有身高吧,然后 ...
分类:
编程语言 时间:
2018-02-10 11:10:11
阅读次数:
184