日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Agrona的Threadsafe堆外缓冲区

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Agrona的Threadsafe堆外缓冲区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇博客文章解釋了我們如何為線程安全操作輕松提供對堆內存的訪問,從而繼續了我在Agrona庫上進行的系列文章 。 在繼續進行之前,我可能應該警告一下,這是一個相當高級的主題,并且我不會嘗試解釋諸如內存屏障之類的概念,而只是概述API的功能。

ByteBuffer的不足

Java提供了一個字節緩沖區類來包裝offheap和onheap內存。 字節緩沖區在Java網絡堆棧中專門用作從中讀取或寫入數據的位置。

那么字節緩沖區有什么問題呢? 好吧,因為它們針對用例,所以它們不提供對原子操作之類的支持。 如果要編寫從不同進程同時訪問的非堆數據結構,則字節緩沖區不能滿足您的需求。 您可能要編寫的那種庫的一個示例是一個消息隊列,一個進程將讀取該消息,而另一個進程將寫入該消息隊列。

Agrona的緩沖器

Agrona提供了幾種緩沖區類和接口來克服這些缺陷。 Aeron和SBE庫都使用這些緩沖區。

  • DirectBuffer –提供從緩沖區讀取值的功能的頂級接口。
  • MutableDirectBuffer –擴展DirectBuffer添加操作以寫入緩沖區。
  • AtomicBuffer –不,它不是核動力的MutableDirectBuffer ! 該接口添加了原子操作以及比較和交換語義。
  • UnsafeBuffer –默認實現。 名稱unsafe并不意味著不應該使用該類,只是其支持的實現使用sun.misc.Unsafe 。
  • 拆分緩沖區而不是分配單個類的決定是出于希望限制不同系統組件對緩沖區的訪問權限的考慮。 如果一個類只需要從緩沖區讀取,則不應允許它通過使緩沖區發生突變而將錯誤引入系統。 同樣,不允許設計為單線程的組件使用Atomic操作。

    包裝一些內存

    為了能夠使用緩沖區執行任何操作,您需要告訴它緩沖區的起始位置! 此過程稱為包裝基礎內存。 所有用于包裝內存的方法都稱為wrap并且可以包裝byte[] , ByteBuffer或DirectBuffer 。 您還可以指定用于包裝數據結構的偏移量和長度。 例如,這里是包裝byte[] 。

    final int offset = 0;final int length = 5;buffer.wrap(new byte[length], offset, length);

    包裝還有另一個選擇–這是存儲位置的地址。 在這種情況下,該方法采用存儲器的基地址及其長度。 這是為了支持諸如通過sun.misc.Unsafe分配的內存或例如malloc調用之類的事情。 這是使用Unsafe的示例。

    final int length = 10;final long address = unsafe.allocateMemory(length);buffer.wrap(address, length);

    包裝內存還可以設置緩沖區的容量,可以通過capacity()方法進行訪問。

    存取器

    因此,現在您有了可以讀取和寫入的堆外內存緩沖區。 習慣上,每個getter都以單詞get開頭,并以您要獲取的值的類型作為后綴。 您需要提供一個地址,以說出要讀取的緩沖區中的位置。 還有一個可選的字節順序參數。 如果未指定字節順序,則將使用計算機的本機順序。 這是一個有關如何在緩沖區開始處加長的示例:

    final int address = 0;long value = buffer.getLong(address, ByteOrder.BIG_ENDIAN);value++;buffer.putLong(address, value, ByteOrder.BIG_ENDIAN);

    除基本類型外,還可以從緩沖區中獲取和放入字節。 在這種情況下,要讀取或讀取的緩沖區將作為參數傳遞。 再次支持byte[] , ByteBuffer或DirectBuffer 。 例如,這是將數據讀入byte[] 。

    final int offsetInBuffer = 0;final int offsetInResult = 0;final int length = 5;final byte[] result = new byte[length];buffer.getBytes(offsetInBuffer, result, offsetInResult, length, result);

    并發操作

    int和long值也可以使用內存排序語義進行讀取或寫入。 后綴為Ordered方法保證它們最終將被設置為所討論的值,并且該值最終將在另一個對該值進行易失性讀取的線程中可見。 換句話說, putLongOrdered自動執行存儲存儲內存屏障 。 get*Volatile和put*Volatile遵循與Java中使用volatile關鍵字聲明的變量的讀取和寫入相同的排序語義。

    也可以通過AtomicBuffer更復雜的內存操作。 例如,有一個compareAndSetLong ,它會自動在給定索引處設置一個更新的值,因為給定的現有值是一個預期值。 getAndAddLong方法是在給定索引處添加的完全原子的方法。

    生活中沒有什么是免費的,所有這些都需要警告。 如果您的索引不是單詞對齊的,則這些保證不存在。 請記住,它也有可能撕裂一些薄弱內存體系結構,如ARM和Sparc過字邊界寫入值,看到堆棧溢出對這種事情的更多細節。

    邊界檢查

    邊界檢查是棘手的問題之一,也是正在進行的辯論的主題。 避免邊界檢查可以導致更快的代碼,但是會導致產生段錯誤并降低JVM的潛力。 Agrona的緩沖區使您可以選擇通過命令行屬性agrona.disable.bounds.checks禁用邊界檢查,但默認情況下是邊界檢查。 這意味著它們的使用是安全的,但是如果應用程序對經過測試的代碼進行性能分析確定邊界檢查是瓶頸,那么可以將其刪除。

    結論

    Agrona的緩沖區使我們能夠輕松使用offheap內存,而不受Java現有字節緩沖區強加給我們的限制。 我們正在繼續擴展可從Maven Central下載的庫。

    感謝Mike Barker,Alex Wilson,Benji Weber,Euan Macgregor和Matthew Cranman幫助他們審閱了此博客文章。

    翻譯自: https://www.javacodegeeks.com/2015/08/agronas-threadsafe-offheap-buffers.html

    總結

    以上是生活随笔為你收集整理的Agrona的Threadsafe堆外缓冲区的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久77| 国产精品视频播放 | 一区二区在线免费观看 | 成人网站免费观看 | 久久免费看少妇高潮v片特黄 | 欧美激情视频一区二区三区 | 亚洲天堂小说 | 国产69精品久久久久999小说 | 新x8x8拨牐拨牐永久免费影库 | 日本深夜福利 | 艳母免费在线观看 | 国产精品成av人在线视午夜片 | 亚洲色在线视频 | 日本激情在线 | 亚洲欧美日韩成人在线 | 好色婷婷 | 国内福利视频 | 污视频网址在线观看 | 欧美午夜精品理论片 | 五月婷婷久久久 | 日韩91av| 日韩网红少妇无码视频香港 | 欧美色xxxx | 极品白嫩丰满美女无套 | 2019中文字幕在线视频 | 久久久老司机 | 日本激情网 | 91成人免费在线 | 国产精品永久免费视频 | 免费色网址 | 拔擦8x成人一区二区三区 | 国产视频手机在线 | 久久综合色视频 | 国产精品夜夜爽张柏芝 | 国内福利视频 | 国产ts丝袜人妖系列视频 | 无码不卡av东京热毛片 | mm131丰满少妇人体欣赏图 | 六月婷婷在线 | 国产精品视频第一页 | 三级第一页 | 都市激情自拍 | 中文字幕――色哟哟 | 久久av网| 亚洲精品国产一区二区 | av影院在线播放 | 亚洲狼人天堂 | 国产一区二区三区视频免费在线观看 | 欧日韩不卡在线视频 | 国产免费黄色 | 亚洲免费三级 | av色图片| 激情五月综合 | 日韩在线观看视频免费 | 四虎5151久久欧美毛片 | 成人免费看片又大又黄 | 成人福利网站在线观看 | 国产乡下妇女做爰视频 | 嫩草影院国产 | 国产精品美女久久久久 | 日韩a级在线观看 | 国产精品高清无码在线观看 | 热精品| 私人网站| 久久久夜色精品 | 日韩性猛交ⅹxxx乱大交 | 黄色肉肉视频 | 午夜视频网站在线观看 | 91视频麻豆 | 国产97视频 | 四虎影视永久免费观看 | 男人和女人做爽爽视频 | 天堂久久爱 | 色妞www精品视频 | 五月婷婷丁香网 | 国产成人99久久亚洲综合精品 | 麻豆精品av | 蜜桃传媒一区二区亚洲av | 国产一区二区三区免费播放 | 久久桃花网 | 国产男女猛烈无遮挡a片漫画 | 黑人玩弄人妻一区二 | 少妇又色又紧又黄又刺激免费 | 欧美综合在线一区 | 99免费视频 | 日本少妇18p | av三级网 | 在线免费看污视频 | 麻豆精品久久久 | 国产午夜免费福利 | 精品国产中文字幕 | 一区二区视频播放 | 在线观看av不卡 | 青青草原综合网 | 8x8ⅹ国产精品一区二区 | 欧洲成人午夜精品无码区久久 | 欧美三级自拍 | 草草在线视频 | 五十路av |