亚洲精品国偷拍自产在线,亚洲国产欧美一区,亚洲综合色区无码一区爱av,国产曰批全过程免费视频好爽,国产成人无码精品久免费

NativeIO 源碼解析

簡(jiǎn)介

NativeIO主要用于實(shí)現一些Java未實(shí)現的IO相關(guān)的接口。通過(guò)JNI的的方式直接調用底層操作系統的系統函數,提升效率和性能。

源碼詳解

主要分下面幾部分:

  • JNI初始化,包括底層JNI代碼。
  • 底層IO操作詳解

初始化

核心初始化的代碼是在NativeIO里面的靜態(tài)代碼塊里面實(shí)現的,通過(guò)參數hadoop.workaround.non.threadsafe.getpwuid控制是否支持線(xiàn)程安全,默認是線(xiàn)程安全的。
初始化只會(huì )做一次,不會(huì )重復初始化,關(guān)鍵代碼如下:

static {
      if (NativeCodeLoader.isNativeCodeLoaded()) {
        //確保只加初始化一次。
        try {
          Configuration conf = new Configuration();
          boolean workaroundNonThreadSafePasswdCalls = conf.getBoolean(
              WORKAROUND_NON_THREADSAFE_CALLS_KEY,
              WORKAROUND_NON_THREADSAFE_CALLS_DEFAULT);

          initNativePosix(workaroundNonThreadSafePasswdCalls);
          nativeLoaded = true;
          // 省略。。。。
        } catch (Throwable t) {
         // 省略。。。。
        }
      }
    }

initNativePosix詳解

initNativePosix的JNI在NativeIO.c里面,函數的定義如下,其中,JNIEnv *env, jclass clazz為JNI默認需要帶的參數,jboolean doThreadsafeWorkaround是函數initNativePosix的入參。

JNIEXPORT void JNICALL
Java_org_apache_hadoop_io_nativeio_NativeIO_initNative(
  JNIEnv *env, jclass clazz, jboolean doThreadsafeWorkaround) 

在initNativePosix里面核心函數有:

  • nioe_init(env):主要是初始化NativeIOException異常對象。
  • fd_init(env);初始化java.io.FileDescriptor
  • workaround_non_threadsafe_calls_init(env);初始化一個(gè)Object對象,用于實(shí)現加鎖。

底層IO操作

NativeIO提供了很多底層IO操作的JNI。主要包括:

函數名稱(chēng) 作用
getPmdkLibPath() 獲取HADOOP_PMDK_LIBRARY的路徑
isPmemCheck(long address, long length) 用于判斷一段內存區域是否位于真正的持久內存上
pmemMapFile(String path, long length, boolean isFileExist); 是將持久內存(Persistent Memory,PMEM)上的文件映射到進(jìn)程的虛擬地址空間,調用庫函數pmem_map_file
pmemUnMap(long address, long length) pmem_unmap是持久內存編程中的一個(gè)關(guān)鍵函數,它就像一位負責收尾的清道夫,安全地解除之前建立的內存映射關(guān)系,并確保數據的持久化。

其他實(shí)現可自行查看NativeIO.c,基本都是對操作系統函數的封裝,不再重復列出用途。

# hadoop 


標 題:《NativeIO 源碼解析
作 者:zeekling
提 示:轉載請注明文章轉載自個(gè)人博客:浪浪山旁那個(gè)村

評論

取消
亚洲精品国偷拍自产在线,亚洲国产欧美一区,亚洲综合色区无码一区爱av,国产曰批全过程免费视频好爽,国产成人无码精品久免费