關於 x86_64 架構下 atomic、mutex、rwlock 的效能對比
這裡以多執行緒操作long型別變數,進行加法運算1億次的時間作為效能對比的標準。
測試使用SLES 11SP2作業系統,3.0.80核心,CPU使用Xeon 5506(2 socket, 4 cores, 1thread)
由於針對64位型別的atomic glibc沒有提供相應的庫,將核心實現程式碼移植到應用層
atomic64.h
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | #ifndef __HI_ATOMIC64_H__#define __HI_ATOMIC64_H__#include <stdio.h>#include <getopt.h>#include <limits.h> |
測試程式碼performance.c
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | /******************************************************************************* Copyright(c) 2008-2014 This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. The full GNU General Public License is included in this distribution in the file called "COPYING". Date: 2014-04-15 21:27:57 CST Contact Information: Tony <[email protected]> Home, Qingdao, China. *******************************************************************************/#include "atomic64.h"atomic64_t num;longmutexnum=0;longmaxnum;structtimeval tv;longstarttime;//FIXME: gettimeofday is a non-thread safe sysycallstaticpthread_mutex_t timelock=PTHREAD_MUTEX_INITIALIZER;#define TIME_LOCK() pthread_mutex_lock(&timelock)#define TIME_UNLOCK() pthread_mutex_unlock(&timelock)staticpthread_mutex_t numlock=PTHREAD_MUTEX_INITIALIZER;#define MUTEX_LOCK() pthread_mutex_lock(&numlock)#define MUTEX_UNLOCK() pthread_mutex_unlock(&numlock)staticpthread_rwlock_t rwnumlock=PTHREAD_RWLOCK_INITIALIZER;#define RW_LOCK() pthread_rwlock_wrlock(&rwnumlock)#define RW_UNLOCK() pthread_rwlock_unlock(&rwnumlock);staticvoid*add_func(void*arg){longstoptime;while(1){atomic64_add(1,&num);if(atomic64_read(&num)>maxnum){TIME_LOCK();gettimeofday(&tv,0);TIME_UNLOCK();stoptime=(long)tv.tv_sec *(long)1000000+(long)tv.tv_usec;printf("Used %ld microseconds\n",stoptime-starttime);break;}}}staticvoid*add_func_rwlock(void*arg){longstoptime;while(1){RW_LOCK();++mutexnum;if(mutexnum>maxnum){RW_UNLOCK();TIME_LOCK();gettimeofday(&tv,0);TIME_UNLOCK();stoptime=(long)tv.tv_sec *(long)1000000+(long)tv.tv_usec;printf("Used %ld microseconds\n",stoptime-starttime);break;}RW_UNLOCK();}}staticvoid*add_func_mutex(void*arg){longstoptime;while(1){MUTEX_LOCK();++mutexnum;if(mutexnum>maxnum){MUTEX_UNLOCK();TIME_LOCK();gettimeofday(&tv,0);TIME_UNLOCK();stoptime=(long)tv.tv_sec *(long)1000000+(long)tv.tv_usec;printf("Used %ld microseconds\n",stoptime-starttime);break;}MUTEX_UNLOCK();}}#define ATOMIC_TYPE 0#define MUTEX_TYPE 1#define RW_TYPE 2intmain(intargc,char**argv){pthread_t thread;pthread_attr_t thread_attr;intthreadnum,i,
相關推薦關於 x86_64 架構下 atomic、mutex、rwlock 的效能對比這裡以多執行緒操作long型別變數,進行加法運算1億次的時間作為效能對比的標準。 測試使用SLES 11SP2作業系統,3.0.80核心,CPU使用Xeon 5506(2 socket, 4 cores, 1thread) 由於針對64位型別的atomic gli python3下multiprocessing、threading和gevent效能對比----暨程序池、執行緒池和協程池效能對比目前計算機程式一般會遇到兩類I/O:硬碟I/O和網路I/O。我就針對網路I/O的場景分析下python3下程序、執行緒、協程效率的對比。程序採用multiprocessing.Pool程序池,執行緒是自己封裝的程序池,協程採用gevent的庫。用python CriticalSection、Event、Mutex、Semaphores區別臨界區(Critical Section) 保證在某一時刻只有一個執行緒能訪問資料的簡便辦法。在任意時刻只允許一個執行緒對共享資源進行訪問。如果有多個執行緒試圖同時訪問臨界區,那麼在有一個執行緒進入後其他所有試圖訪問此臨界區的執行緒將被掛起,並一直持續到進入臨界 x86_64架構下函式呼叫過程分析//被分析的C程式 int test1(int a1,int b1) { int c1; c1 = a1+b1; return c1; } int test2(int a2,char b2) { int c2; c2 = [C#學習筆記之多執行緒2]多執行緒同步與併發訪問共享資源工具—Lock、Monitor、Mutex、Semaphore“執行緒同步”的含義 當一個程序啟動了多個執行緒時,如果需要控制這些執行緒的推進順序(比如A執行緒必須等待B和C執行緒執行完畢之後才能繼續執行),則稱這些執行緒需要進行“執行緒同步(thread synchronization)”。 執行緒 Kafka、ActiveMQ、RabbitMQ及RocketMQ效能對比特性 ActiveMQ RabbitMQ RocketMQ Kafka 單機吞吐量 萬級,比 RocketMQ、Kafka 低一個數量級 同 Activ redux、immutablejs和mobx效能對比(三)四、我的結論 通過第三部分的資料資料分析,我覺得我們可以得到以下結論: 無論是在開發環境還是測試環下頁面的首次載入速度結果都是:redux>immutablejs>mobx,但是他們之間的差距並不是很大。 10000條-100000條資料的頁面載入時間的增量明顯也高於10000-1000條資料 二叉查詢樹、平衡二叉樹、紅黑樹、B-/B+樹效能對比1. 二叉查詢樹 (Binary Search Tree) BST 的操作代價分析: (1) 查詢代價: 任何一個數據的查詢過程都需要從根結點出發,沿某一個路徑朝葉子結點前進。因此查詢中資料比較次數與樹的形態密切相關。 當樹中每個結點左右子樹高度大致相同時,樹高為 Collections.synchronizedList 、CopyOnWriteArrayList、Vector介紹、原始碼淺析與效能對比【文末福利】ArrayList執行緒安全問題 眾所周知,ArrayList不是執行緒安全的,在併發場景使用ArrayList可能會導致add內容為null,迭代時併發修改list內容拋ConcurrentModificationException異常等問題。java類庫裡面提供了以下三個輪子可以實現執行緒安全的List, Net Core下多種ORM框架特性及效能對比在.NET Framework下有許多ORM框架,最著名的無外乎是Entity Frame iOS 指令集架構 armv6、armv7、armv7s、arm64、x86_64、i386clas 通用 圖片 pil 而後 支持 iphone 8 地址 目標 一、ARM架構 ARM架構過去稱作進階精簡指令集機器(Advanced RISC Machine,更早稱作:Acorn RISC Machine),是一個32位精簡指令集(RISC)處理器架構,AR 19-03、redis主從架構下如何才能做到99.99%的高可用性?1、什麼是99.99%高可用? 架構上,高可用性,99.99%的高可用性 講的學術,99.99%,公式,系統可用的時間 / 系統故障的時間,365天,在365天 * 99.99%的時間內,你的系統都是可以嘩嘩對外提供服務的,那就是高可用性,99.99% 系統可用的時間 / 總的時間 = 高可用性 centos7下搭建hadoop、hbase、hive、spark分散式系統架構全棧工程師開發手冊 (作者:欒鵬) 在使用前建議先將當前使用者設定為root使用者。參考https://blog.csdn.net/luanpeng825485697/article/details/80278383中修改使用者許可權的第三種方法。有了 多語言(Java、.NET、Node.js)混合架構下開源調用鏈追蹤APM項目初步選型try 進行 The 語言 active istio .net core ref 配置 1. 背景 我們的技術棧包括了Java、.NET、Node.js等,並且采用了分布式的技術架構,系統性能管理、問題排查成本越來越高。 2. 基本訴求 針對我們的情況,這裏列出了選型 List、Set、Map下各類型的對比hashtable class ray hashmap 速查 使用 線程同步 highlight ash 1.List和Set: List: 元素有放入順序,元素可重復,查找效率高,插入刪除效率低; Set: 元素無放入順序,元素不可重復,(元素雖然無順序,但元素在Set linux環境下部署zabbix3.2、模板、郵件告警詳細過程-1 ice erer without zlib zip ever native item 服務端部署: 系統環境及軟件版本: Linux:release 6.3 zabbix:zabbix-3.2.5.tar.gz nginx:nginx-1.12.0.tar.gz ph go語言sync包的學習(Mutex、WaitGroup、Cond)pri lee 拷貝 light 等待 runt broadcast 計算 混亂 package main; import ( "fmt" "sync" "runtime" "time" ) //加鎖,註意鎖要以指針的形式傳進來,不然只是拷 Atitit 如何創新 創新只有在兩種條件下發生:自由、效率。會議 center 有用 渠道 城市 catch 編輯 .net 工程 Atitit 如何創新 創新只有在兩種條件下發生:自由、效率。 創新是如何發生的呢? 創新只有在兩種條件下發生:自由、效率。在自由的環境下,對效率的追逐等於創新。如果你不自由,你的思想不夠開闊, Oracle學習筆記—oracle體系架構及狀態(nomount、mount和open)簡介位置 正常 處理 管理 共享服務器 體系 操作記錄 sysdba png oracle體系架構簡介 先來簡要了解一下Oracle數據庫體系架構以便於後面深入理解,Oracle Server主要由實例(instance)和數據庫(database)組成。實例(instance centos6.5下安裝python3安裝、python3虛擬環境創建venv替代品 虛擬環境 由於 需要 tools python2.6 ipy模塊 python2 pip3 原因:在安裝完centos6.5後,通過命令行鍵入python時,默認為python2.6.6版本,系統並沒有安裝python3版本。又想學習python3,因此需要在c |