Memcached 原理剖析.ppt_第1頁
Memcached 原理剖析.ppt_第2頁
Memcached 原理剖析.ppt_第3頁
Memcached 原理剖析.ppt_第4頁
Memcached 原理剖析.ppt_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Memcached入門,作者:,2009-01,2,Memcache是什么Memcache,ehcache的比較Memcache原理分析Memcache安裝和基本配置Memcache的在大型網(wǎng)站中的使用策略Memcache的一些經(jīng)驗和技巧Memcache一致性算法(consistenthasing),TechTalk目錄索引,3,Memcache是什么:,Memcache是國外社區(qū)網(wǎng)站LiveJournal的開發(fā)團隊開發(fā)的高性能的分布式內(nèi)存緩存服務(wù)器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài)Web應(yīng)用的速度、提高可擴展性。目前全世界不少人使用這個緩存項目來構(gòu)建自己大負(fù)載的網(wǎng)站,來分擔(dān)數(shù)據(jù)庫的壓力。Memcache可以對任意多個連接,使用非阻塞的網(wǎng)絡(luò)IO。由于它的工作機制是在內(nèi)存中開辟一塊空間,然后建立一個HashTable,Memcache自管理這些HashTable.Memcache的官方網(wǎng)站:,4,Memcache,EhCache的比較,5,Memcache原理分析,Memcache工作方式?,6,Memcache原理分析,7,Memcache原理分析,自主的內(nèi)存存儲處理數(shù)據(jù)存儲方式:SlabAllocation數(shù)據(jù)過期方式:LazyExpiration+LRU,8,Memcache原理分析,數(shù)據(jù)存儲方式:SlabAllocationSlabAlloction構(gòu)造圖,SlabAllocator的基本原理是按照預(yù)先規(guī)定的大小,將分配的內(nèi)存分割成特定長度的塊,以完全解決內(nèi)存碎片問題。SlabAllocation的原理相當(dāng)簡單。將分配的內(nèi)存分割成各種尺寸的塊(chunk),并把尺寸相同的塊分成組(chunk的集合),9,Memcache原理分析,數(shù)據(jù)存儲方式:SlabAllocationSlabClasses分配圖,Page:分配給Slab的內(nèi)存空間,默認(rèn)是1MB。分配給Slab之后根據(jù)slab的大小切分成chunk。Chunk:用于緩存記錄的內(nèi)存空間。SlabClass:特定大小的chunk的組。memcached根據(jù)收到的數(shù)據(jù)的大小,選擇最適合數(shù)據(jù)大小的slab。memcached中保存著slab內(nèi)空閑chunk的列表,根據(jù)該列表選擇chunk,然后將數(shù)據(jù)緩存于其中。,10,Memcache原理分析:,數(shù)據(jù)存儲方式:SlabAllocationSlabAlloction缺點,這個問題就是,由于分配的是特定長度的內(nèi)存,因此無法有效利用分配的內(nèi)存。例如,將100字節(jié)的數(shù)據(jù)緩存到128字節(jié)的chunk中,剩余的28字節(jié)就浪費了。,11,Memcache原理分析:,數(shù)據(jù)過期方式LazyExpirationmemcached內(nèi)部不會監(jiān)視記錄是否過期,而是在get時查看記錄的時間戳,檢查記錄是否過期。這種技術(shù)被稱為lazy(惰性)expiration。因此,memcached不會在過期監(jiān)視上耗費CPU時間。LRUmemcached會優(yōu)先使用已超時的記錄的空間,但即使如此,也會發(fā)生追加新記錄時空間不足的情況,此時就要使用名為LeastRecentlyUsed(LRU)機制來分配空間。顧名思義,這是刪除“最近最少使用”的記錄的機制。因此,當(dāng)memcached的內(nèi)存空間不足時(無法從slabclass獲取到新的空間時),就從最近未被使用的記錄中搜索,并將其空間分配給新的記錄。從緩存的實用角度來看,該模型十分理想。,12,Memcache原理分析:,基于客戶端的Memcached分布式,13,Memcache原理分析:,基于客戶端的Memcached分布式,/按照Key值,獲取一個服務(wù)器IDintgetServerId(char*key,intserverTotal)intc,hash=0;while(c=*key+)hash+=c;returnhash%serverTotal;/服務(wù)器列表node0=:11211node1=:11211node2=:11211/獲取key是tokyo的節(jié)點ID(服務(wù)器ID)intid=getServerId(test,3);/得出的結(jié)果是1,那么對應(yīng)的機器就是nodeid=node1,14,Memcache原理分析:,基于客戶端的Memcached分布式寫入操作讀取操作,15,Memcache原理分析:,Memcache的理論參數(shù)計算方式常量REALTIME_MAXDELTA60*60*24*30最大30天的過期時間conn_init()中的freetotal(=200)最大同時連接數(shù)常量KEY_MAX_LENGTH250最大鍵長settings.factor(=1.25)factor將影響chunk的步進大小settings.maxconns(=1024)最大軟連接settings.chunk_size(=48)一個保守估計的key+value長度,用來生成id1中的chunk長度(1.2)。id1的chunk長度等于這個數(shù)值加上item結(jié)構(gòu)體的長度(32),即默認(rèn)的80字節(jié)。常量POWER_SMALLEST1最小classid(1.2)常量POWER_LARGEST200最大classid(1.2),16,Memcache原理分析:,常量POWER_BLOCK1048576默認(rèn)slab大小常量CHUNK_ALIGN_BYTES(sizeof(void*)保證chunk大小是這個數(shù)值的整數(shù)倍,防止越界(void*的長度在不同系統(tǒng)上不一樣,在標(biāo)準(zhǔn)32位系統(tǒng)上是4)常量ITEM_UPDATE_INTERVAL60隊列刷新間隔常量LARGEST_ID255最大item鏈表數(shù)(這個值不能比最大的classid?。┳兞縣ashpower(在1.1中是常量HASHPOWER)決定hashtable的大小根據(jù)上面介紹的內(nèi)容及參數(shù)設(shè)定,可以計算出的一些結(jié)果:1、在memcached中可以保存的item個數(shù)是沒有軟件上限的,之前我的100萬的說法是錯誤的。2、假設(shè)NewHash算法碰撞均勻,查找item的循環(huán)次數(shù)是item總數(shù)除以hashtable大?。ㄓ蒱ashpower決定),是線性的。3、Memcached限制了可以接受的最大item是1MB,大于1MB的數(shù)據(jù)不予理會。4、Memcached的空間利用率和數(shù)據(jù)特性有很大的關(guān)系,又與DONT_PREALLOC_SLABS常量有關(guān)。在最差情況下,有198個slab會被浪費(所有item都集中在一個slab中,199個id全部分配滿)。,17,Memcache原理分析:,Memcache的定長優(yōu)化根據(jù)上面幾節(jié)的描述,多少對memcached有了一個比較深入的認(rèn)識。在深入認(rèn)識的基礎(chǔ)上才好對它進行優(yōu)化。Memcached本身是為變長數(shù)據(jù)設(shè)計的,根據(jù)數(shù)據(jù)特性,可以說它是“面向大眾”的設(shè)計,但是很多時候,我們的數(shù)據(jù)并不是這樣的“普遍”,典型的情況中,一種是非均勻分布,即數(shù)據(jù)長度集中在幾個區(qū)域內(nèi)(如保存用戶Session);另一種更極端的狀態(tài)是等長數(shù)據(jù)(如定長鍵值,定長數(shù)據(jù),多見于訪問、在線統(tǒng)計或執(zhí)行鎖)。這里主要研究一下定長數(shù)據(jù)的優(yōu)化方案(1.2),集中分布的變長數(shù)據(jù)僅供參考,實現(xiàn)起來也很容易。解決定長數(shù)據(jù),首先需要解決的是slab的分配問題,第一個需要確認(rèn)的是我們不需要那么多不同chunk長度的slab,為了最大限度地利用資源,最好chunk和item等長,所以首先要計算item長度。在之前已經(jīng)有了計算item長度的算法,需要注意的是,除了字符串長度外,還要加上item結(jié)構(gòu)的長度32字節(jié)。假設(shè)我們已經(jīng)計算出需要保存200字節(jié)的等長數(shù)據(jù)。接下來是要修改slab的classid和chunk長度的關(guān)系。在原始版本中,chunk長度和classid是有對應(yīng)關(guān)系的,現(xiàn)在如果把所有的chunk都定為200個字節(jié),那么這個關(guān)系就不存在了,我們需要重新確定這二者的關(guān)系。一種方法是,整個存儲結(jié)構(gòu)只使用一個固定的id,即只使用199個槽中的1個,在這種條件下,就一定,18,Memcache原理分析:,要定義DONT_PREALLOC_SLABS來避免另外的預(yù)分配浪費。另一種方法是建立一個hash關(guān)系,來從item確定classid,不能使用長度來做鍵,可以使用key的NewHash結(jié)果等不定數(shù)據(jù),或者直接根據(jù)key來做hash(定長數(shù)據(jù)的key也一定等長)。這里簡單起見,選擇第一種方法,這種方法的不足之處在于只使用一個id,在數(shù)據(jù)量非常大的情況下,slab鏈會很長(因為所有數(shù)據(jù)都擠在一條鏈上了),遍歷起來的代價比較高。前面介紹了三種空間冗余,設(shè)置chunk長度等于item長度,解決了第一種空間浪費問題,不預(yù)申請空間解決了第二種空間浪費問題,那么對于第一種問題(slab內(nèi)剩余)如何解決呢,這就需要修改POWER_BLOCK常量,使得每一個slab大小正好等于chunk長度的整數(shù)倍,這樣一個slab就可以正好劃分成n個chunk。這個數(shù)值應(yīng)該比較接近1MB,過大的話同樣會造成冗余,過小的話會造成次數(shù)過多的alloc,根據(jù)chunk長度為200,選擇1000000作為POWER_BLOCK的值,這樣一個slab就是100萬字節(jié),不是1048576。三個冗余問題都解決了,空間利用率會大大提升。修改slabs_clsid函數(shù),讓它直接返回一個定值(比如1)unsignedintslabs_clsid(size_tsize)return1;修改slabs_init函數(shù),去掉循環(huán)創(chuàng)建所有classid屬性的部分,直接添加slabclass1:CODE:slabclass1.size=200;/每chunk200字節(jié)slabclass1.perslab=5000;/1000000/200,19,Memcache安裝、配置和使用:,Memcache安裝Memcache配置Memcache結(jié)合java客戶端的使用,20,Memcache安裝和使用:,Memcachewindows安裝,1.下載Memcache的window穩(wěn)定版,解壓到某個盤下面。2.Cmd找到解壓目錄,輸入memcached.exedinsatll安裝為windows服務(wù).(如果是win7,要以administrator方式啟動cmd).3.再輸入memcached.exedstart啟動。,21,Memcached安裝和使用:,Memcachedlinux安裝,安裝步驟:先安裝libevent再安裝Memcached主程序源碼下載:(最新版)libevent官網(wǎng):/provos/libevent/libevent下載:/provos/libevent-1.4.9-stable.tar.gzMemcached官網(wǎng):,22,Memcached安裝和使用:,Memcached安裝,安裝libevent#tarzxvflibevent-1.4.9-stable.tar.gz#cdlibevent-1.4.9-stable#./configure-prefix=/usr#make#makeinstall安裝Memcached#tarzxvfmemcached-1.2.6.tar.gz#cdmemcached-1.2.6#./configure-prefix=/usr/local#make#makeinstall,23,Memcached安裝和使用:,Memcached運行,試運行Memcached#/usr/local/bin/memcached-uhualiangxie,24,Memcached安裝和使用:,Memcached運行,查看Memcached幫助信息#/usr/local/bin/memcached-h,25,Memcached安裝和使用:,Memcached運行,關(guān)注基本選項-p監(jiān)聽的TCP端口(缺省:11211)-d以守護進程方式運行Memcached-u運行Memcached的賬戶,非root用戶-m最大的內(nèi)存使用,單位是MB,缺省是64MB-c軟連接數(shù)量,缺省是1024-v輸出警告和錯誤信息-vv打印客戶端的請求和返回信息-h打印幫助信息-i打印memcached和libevent的版權(quán)信息運行Memcached目標(biāo):使用11211端口、hualiangxie用戶、最大占用512M內(nèi)存、1024個軟連接,輸出客戶端請求,以守護進程方式運行#/usr/local/bin/memcached-p11211-d-uhualiangxie-m512-c1024-vvv,26,Memcached安裝和使用:,Memcached運行,檢查是否正常啟動#paauxxww|grepmemcached100144020.00.02296900pts/0S+19:240:00/usr/local/bin/memcached-uhualiangxieroot45470.00.01892668pts/3S+19:420:00grepmemcached#telnetlocalhost11211Trying.Connectedtolocalhost.Escapecharacteris.statsSTATpid4402STATuptime1032STATtime1231155683STATversion1.2.6STATpointer_size32.END,27,28,stats命令memcache的stats命令包括:1.stats2.statsreset清空統(tǒng)計信息3.statsmalloc顯示內(nèi)存分配數(shù)據(jù)4.statsmaps動態(tài)庫的映射地址5.statssizes6.statsslabs7.statsitems8.statscachedumpslab_idlimit_num示某個slab中的前l(fā)imit_num個key列表9.statsdetailon|off|dump設(shè)置或顯示詳細(xì)操作信息,29,Memcached安裝和使用:,Memcached命令,數(shù)據(jù)存取setkey101803abcSTOREDaddkey101803xyzNOT_STOREDgetkey1VALUEkey103abcENDreplacekey101803xyzSTOREDgetkey1VALUEkey103xyzENDdeletekey1DELETED,數(shù)字加減setkey2018041234STOREDincrkey231237getkey2VALUEkey2041237ENDdecrkey211236getkey2VALUEkey2041236END,30,memcached的客戶端使用TCP鏈接與服務(wù)器通訊。(UDP接口也同樣有效)一個運行中的memcached服務(wù)器監(jiān)視一些(可設(shè)置)端口??蛻舳诉B接這些端口,發(fā)送命令到服務(wù)器,讀取回應(yīng),最后關(guān)閉連接。結(jié)束會話不需要發(fā)送任何命令。當(dāng)不再需memcached服務(wù)時,要客戶端可以在任何時候關(guān)閉連接。需要注意的是,鼓勵客戶端緩存這些連接,而不是每次需要存取數(shù)據(jù)時都重新打開連接。這是因為memcached被特意設(shè)計成及時開啟很多連接也能夠高效的工作(數(shù)百個,上千個如果需要的話)。緩存這些連接,可以消除建立連接所帶來的開銷(/*/相對而言,在服務(wù)器端建立一個新連接的準(zhǔn)備工作所帶來的開銷,可以忽略不計。)。在memcache協(xié)議中發(fā)送的數(shù)據(jù)分兩種:文本行和自由數(shù)據(jù)。文本行被用于來自客戶端的命令和服務(wù)器的回應(yīng)。自由數(shù)據(jù)用于客戶端從服務(wù)器端存取數(shù)據(jù)時。同樣服務(wù)器會以字節(jié)流的方式傳回自由數(shù)據(jù)。/*/服務(wù)器不用關(guān)心自由數(shù)據(jù)的字節(jié)順序。自由數(shù)據(jù)的特征沒有任何限制;但是通過前文提到的文本行,這項數(shù)據(jù)的接受者(服務(wù)器或客戶端),便能夠精確地獲知所發(fā)送的數(shù)據(jù)庫的長度。文本行固定以“rn”(回車符緊跟一個換行符)結(jié)束。自由數(shù)據(jù)也是同樣會以“rn”結(jié)束,但是r(回車符)、n(換行符),以及任何其他8位字符,均可出現(xiàn)在數(shù)據(jù)中。因此,當(dāng)客戶端從服務(wù)器取回數(shù)據(jù)時,必須使用數(shù)據(jù)區(qū)塊的長度來確定數(shù)據(jù)區(qū)塊的結(jié)束位置,而不要依據(jù)數(shù)據(jù)區(qū)塊末尾的“rn”,即使它們固定存在于此,Memcached安裝和使用:,Memcached基本協(xié)議,31,Memcached安裝和使用:,Memcached和java結(jié)合使用,下載memcachedjavaclient:解壓后將java_memcached-release_2.0.1.jarjar包添加到工程的classpath中,/*Memcache服務(wù)器默認(rèn)端口是11211*/Stringservers=:11211;SockIOPoolpool=SockIOPool.getInstance();pool.setServers(servers);pool.setFailover(true);pool.setInitConn(10);pool.setMinConn(5);pool.setMaxConn(250);pool.setMaintSleep(30);pool.setNagle(false);pool.setSocketTO(3000);pool.setAliveCheck(true);pool.initialize();,MemCachedClientmemCachedClient=newMemCachedClient();for(inti=0;i10;i+)/*將對象加入到memcached緩存*/booleansuccess=memCachedClient.set(+i,Hello!);/*從memcached緩存中按key值取對象*/Stringresult=(String)memCachedClient.get(+i);System.out.println(String.format(set(%d):%s,i,success);System.out.println(String.format(get(%d):%s,i,result);,32,Memcache三種java客戶端的比較Memcacheclientforjava:較早推出的memcachejava客戶端API,應(yīng)用廣泛,運行比較穩(wěn)定。spymemcached:Asimple,asynchronous,single-threadedmemcachedclientwritteninjava.支持異步,單線程的memcached客戶端,用到了java1.5版本的concurrent和nio,存取速度會高于前者,但是穩(wěn)定性不好,測試中常報timeOut等相關(guān)異常Xmemcached是基于javanio實現(xiàn)的高性能可擴展的memcached客戶端。實際上是基于我實現(xiàn)的一個nio框架,Memcached安裝和使用:,33,Memcache在大型網(wǎng)站中的使用策略:,Memcache在大型網(wǎng)站中的部署策略基于memcached的slab和dump的內(nèi)存管理方式,它產(chǎn)生的內(nèi)存碎片比較少,不需要OS去做繁雜的內(nèi)存回收,所以它對CPU的占用率那是相當(dāng)?shù)牡?。所以建議將它跟占用CPU較高的WEB服務(wù)器一起使用來節(jié)省成本。當(dāng)然如果你有大量的廉價PC,那用來專門做memcached服務(wù)器也不錯。由于32位操作系統(tǒng)中,每個進程最多只能使用2GB內(nèi)存,所以如果你有大內(nèi)存的話,可以以daemon的方式啟動兩個以上的memcached服務(wù),或者干脆用64位的CPU和OS。,34,Memcache緩存使用策略:,memcached主要的作用是為減輕大訪問量對數(shù)據(jù)庫的沖擊,所以一般的邏輯是首先從memcached中讀取數(shù)據(jù),如果沒有就從數(shù)據(jù)庫中讀取數(shù)據(jù)寫入到memcache中,等下一次讀取的時候就可以從memcached中讀取了。但在項目中的具體應(yīng)用策略(也就是哪些數(shù)據(jù)應(yīng)該緩存?怎么樣緩存?過期策略?)就是個問題了。它的一個總原則是將經(jīng)常需要從數(shù)據(jù)庫讀取的數(shù)據(jù)緩存在memcached中。這些數(shù)據(jù)也分為幾類:一、經(jīng)常被讀取并且實時性要求不強可以等到自動過期的數(shù)據(jù)。例如網(wǎng)站首頁最新文章列表、某某排行等數(shù)據(jù)。也就是雖然新數(shù)據(jù)產(chǎn)生了,但對用戶體驗不會產(chǎn)生任何影響的場景。這類數(shù)據(jù)就使用典型的緩存策略,設(shè)置一過合理的過期時間,當(dāng)數(shù)據(jù)過期以后再從數(shù)據(jù)庫中讀取。當(dāng)然你得制定一個緩存清除策略,便于編輯或者其它人員能馬上看到效果。二、經(jīng)常被讀取并且實時性要求強的數(shù)據(jù)。比如用戶的好友列表,用戶文章列表,用戶閱讀記錄等。這類數(shù)據(jù)首先被載入到memcached中,當(dāng)發(fā)生更改(添加、修改、刪除)時就清除緩存。在緩存的時候,我將查詢的SQL語句md5()得到它的hash值作為key,結(jié)果數(shù)組作為值寫入memcached,并且將該SQL涉及的table_name以及hash值配對存入memcached中。當(dāng)更改了這個表時,我就將與此表相配對的key的緩存全部刪除。,35,Memcache緩存使用策略:,三、統(tǒng)計類緩存,比如文章瀏覽數(shù)、網(wǎng)站PV等此類緩存是將在數(shù)據(jù)庫的中來累加的數(shù)據(jù)放在memcached來累加。獲取也通過memcached來獲取。但這樣就產(chǎn)生了一個問題,如果memcached服務(wù)器down掉的話這些數(shù)據(jù)就有可能丟失,所以一般使用memcached的永固性存儲,這方面我們新浪使用memcachedb。四、活躍用戶的基本信息或者某篇熱門文章。此類數(shù)據(jù)的一個特點就是數(shù)據(jù)都是一行,也就是一個一維數(shù)組,當(dāng)數(shù)據(jù)被update時(比如修改昵稱、文章的評論數(shù)),在更改數(shù)據(jù)庫數(shù)據(jù)的同時,使用Memcache:replace替換掉緩存里的數(shù)據(jù)。這樣就有效了避免了再次查詢數(shù)據(jù)庫。五、session數(shù)據(jù)使用memcached來存儲session的效率是最高的。memcached本身也是非常穩(wěn)定的,不太用擔(dān)心它會突然down掉引起session數(shù)據(jù)的丟失,即使丟失就重新登錄了,也沒啥。見多服務(wù)器session共享之memcache共享,36,一些經(jīng)驗和技巧:,Memcached一些特性和限制,在Memcached中可以保存的item數(shù)據(jù)量是沒有限制的,只有內(nèi)存足夠Memcached單進程最大使用內(nèi)存為2G,要使用更多內(nèi)存,可以分多個端口開啟多個Memcached進程最大30天的數(shù)據(jù)過期時間,設(shè)置為永久的也會在這個時間過期,常量REALTIME_MAXDELTA60*60*24*30控制最大鍵長為250字節(jié),大于該長度無法存儲,常量KEY_MAX_LENGTH250控制,客戶端可以加上自己的前綴,所以最大長度是可以超過50的。單個item最大數(shù)據(jù)是1MB,超過1MB數(shù)據(jù)不予存儲,常量POWER_BLOCK1048576進行控制,它是默認(rèn)的slab大小最大同時連接數(shù)是200,通過conn_init()中的freetotal進行控制,最大軟連接數(shù)是1024,通過settings.maxconns=1024進行控制,這跟操作系統(tǒng)有關(guān),linux好像最大就是200。跟空間占用相關(guān)的參數(shù):settings.factor=1.25,settings.chunk_size=48,影響slab的數(shù)據(jù)占用和步進方式,37,一些經(jīng)驗和技巧:,查看Memcached內(nèi)部工作狀態(tài),訪問Memcached:telnet主機名端口號查看總狀態(tài):stats查看某項狀態(tài):statscurr_connections,禁止LRU,有些情況下LRU機制反倒會造成麻煩。memcached啟動時通過“-M”參數(shù)可以禁止LRU,如下所示:$memcached-M-m1024啟動時必須注意的是,小寫的“-m”選項是用來指定最大內(nèi)存大小的。不指定具體數(shù)值則使用默認(rèn)值64MB。指定“-M”參數(shù)啟動后,內(nèi)存用盡時memcached會返回錯誤。話說回來,memcached畢竟不是存儲器,而是緩存,所以推薦使用LRU。,38,一些經(jīng)驗和技巧:,Memcached使用線程模式工作,在安裝的時候必須打開:./configure-enable-threads安裝完之后,啟動的時候看看幫助信息有沒有這條:-tnumberofthreadstouse,default4如果存在該選項,說明已經(jīng)支持了線程,就可以在啟動的時候使用-t選項來啟動多線程然后啟動的時候必須加上你需要支持的線程數(shù)量:/usr/local/memcache/bin/memcached-t1024,39,一些經(jīng)驗和技巧:,調(diào)優(yōu)Slab和內(nèi)存分配1,memcached在啟動時指定GrowthFactor因子(通過-f選項),就可以在某種程度上控制slab之間的差異。默認(rèn)值為1.25。但是,在該選項出現(xiàn)之前,這個因子曾經(jīng)固定為2,稱為“powersof2”策略。讓我們用以前的設(shè)置,以verbose模式啟動memcached試試看:$memcached-f2-vvslabclass1:chunksize128perslab8192slabclass2:chunksize256perslab4096slabclass3:chunksize512perslab2048slabclass4:chunksize1024perslab1024slabclass5:chunksize2048perslab512slabclass6:chunksize4096perslab256slabclass7:ch

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論