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_ 继续阅读 »
2019-01-16 biezhi
后端开发中大家肯定遇到过实现一个线程安全的计数器这种需求,根据经验你应该知道我们要在多线程中实现 共享变量 的原子性和可见性问题,于是锁成为一个不可避免的话题,今天我们讨论的是与之对应的无锁 CAS。本文会从怎么来的、是什么、怎么用、原理分析、遇到的问题等不同的角度带你真正搞懂 CAS。 继续阅读 »
2014-08-13 veryyoung
Mysql数据库中最常使用的两种表类型为 InnoDB和MyISAM。这两种类型各有优缺点,视具体应用而定。 InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。 InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。 在InnoDB表中不需要扩大锁定(lock esca 继续阅读 »
2016-02-04 ruki
TBOX的线程池通过在每个worker中批量一次拉取多个task,对锁的竞争进行了优化。 由于每个task的函数实现不会太多,所以可以根据每个task的函数地址做hash,统计出每个task执行所花费的平均时间。然后根据这个平均值来动态计算每个worker一次拉取的task的数量,TBOX里面默认每个worker一次拉取10s的task量,这样可以尽可能的避免worker间锁的频繁抢占。 所有从等待队列被拉取出来的task,都会被放到pending队列中去,如果等待队列中的task都被取完了,某个worker处于了空闲状态,就会尝试去pending中,重新拉取其他worker还没有执行到的task, 这样可以解决某些task耗时 继续阅读 »
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不需要捕获异常 继续阅读 »
2020-07-19 Robin Wen
文/Robin Medium 有篇文章,Entering the DeFi Token Era,讲述了 DeFi 的市值不断扩大,还有 DeFi Token 的创新,详细讲述了 Compound、Balancer、Synthetix 及其 Token 的运作模式。 DeFi 无疑是最近区块链行业的热点,据 DeFi Pulse 数据,目前 DeFi 锁仓的市值为 27.4 亿美元,其中 Compound 占比 23.39%。DeFi 锁仓市值,最近 30 天更是指数级上涨。 那什么是 DeFi 呢?简单讲,Defi 是自己掌握私钥,以数字货币为主体的金融业务。凡是在 Finance 上的业务,都值得用 Decentra 继续阅读 »
2017-01-30 Borg
Storage Engine Mongodb 现有两个存储引擎,默认的是MMAPv1,可选的是WiredTiger。可以在启动数据库时指定。wiredTiger支持而MMAPv1不支持的特性有:文档级别锁,数据压缩。 shell mongod --storageEngine wiredTiger 继续阅读 »
2013-12-21 Robin Wen
文/Robin 本站推广 币安是全球领先的数字货币交易平台,提供比特币、以太坊、BNB 以及 USDT 交易。 币安注册: https://accounts.binancezh.pro/cn/register/?ref=11190872 邀请码: 11190872 Oracle性能调整在工作中经常遇到,比如TopSQL的出现导致系统资源浪费严重、物理读过多导致IO出现瓶颈、独占锁导致事务不能提交、索引建立不合理导致查询速度极慢、PGA或者SGA设置不合理导致内存不足、PCTFREE值设置不合理导致的行链接、热点块等等。作为一个DBA应该实时的监控系统,然后找出问题,再分析问题,最后解决。真正有难度的是找出问题所在,对于大多数 继续阅读 »
2015-04-20 刘太华
一个自带锁的简单队列, 用单向链表实现: template class FastQueue { struct node { T element; node * next; }; node * last; node * first; LOCK m_lock; public: FastQueue() { last = 0; first = 0; } ... // 以下暂省略 继续阅读 »
2016-09-28 ruki
线程局部存储(Thread Local Storage,TLS)主要用于在多线程中,存储和维护一些线程相关的数据,存储的数据会被关联到当前线程中去,并不需要锁来维护。。 因此也没有多线程间资源竞争问题,那如何去实现TLS存储呢,主要有以下几种方式: gcc和clang的__thread修饰符 windows下msvc的__declspec(thread)修饰符 pthread库pthread_setspecific和pthread_getspecific接口 windows下的TlsSetValue和TlsGetValue thread和declspec(thread)的使用 其中thread和declspec(thread) 继续阅读 »