科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件高级技术分析:绿色和本地线程简单介绍

高级技术分析:绿色和本地线程简单介绍

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

缺省状态是绿线程。 如果指定了命令行标志,它将覆盖 THREADS_FLAG 环境变量的设置。

作者:中国IT实验室 来源:中国IT实验室 2007年8月28日

关键字: 绿线程 本地线程

  • 评论
  • 分享微博
  • 分享邮件

       Java
  
  There are two versions of the Java Development Kit (JDK) installed.
  
  The first is the standard Java 1.1.x version, and the other is the new Java 2 (1.2.x) version.
  
  There are two threading types available with each of the JDK's: green and native.
  
  Green threads implement user level threads, and use only a single OS thread.
  
  Native threads use the OS's threading system, and use one OS thread per java thread.
  
  The threading modes can be selected by using the -green or -native flags when executing java.
  
  JDK Versions Available
  ================================================================================
  Flavor Version RPM Package Location (JAVA_HOME) Default thread mode
  
  java 1.1.8_v1 jdk /usr/local/jdk118_v1  green
  
  java2 1.2.2_RC3 jdk2 /usr/local/jdk1.2.2 native
  
  Solaris 相关
  ================================================================================
  结构
  
  命令行标志:
  
  jdk-tool [-green | -native] options...
  
  % setenv THREADS_FLAG [-green | native]
  
  缺省状态是绿线程。 如果指定了命令行标志,它将覆盖 THREADS_FLAG 环境变量的设置。
  
  如何确定使用哪一种线程选项?
  
  Solaris Java 开发工具包有两种线程处理软件的实现。
  
  缺省的线程实现叫作绿线程;还可以用一种本地线程实现。
  
  本地线程在某些方面优于缺省的绿线程实现,这要视计算环境而定。 以下是使用本地线程的某些好处:
  
  如果在多处理器的环境中运行 Java 代码,则 Solaris 内核程序可在并行处理器上调度本地线程,以增强性能。 相比之下,绿线程只在用户级上存在,且没有被操作系统映射到多内核线程中。并行机制产生的增强功能不能用绿线程来实现。
  
  本地线程实现能对使用 Solaris 本地线程的 C 库进行调用,但该库却不能用在绿线程中。虚拟机使用本地线程时,它能避免某些低效率的 I/O 系统调用的重复映射,但用绿线程时这些重复映射是必需的。
  
  在某些场合中,使用缺省的绿线程可能更恰当些。 非多线程安全 (MT-safe) 的平台相关代码可能不能与本地线程一起正确地运行。
  
  一般来说,如果不直接使用本地 Solaris 线程机制,则需用 -D_REENTRANT 选项来编译平台相关代码,以确保它们能在线程化环境中正常运行。 可能还需要用到某些 Solaris 接口的可重入版本。
  
  有关 Solaris 多线程编程的专门信息,可查阅“Solaris 软件开发人员问答篇的多线程编程指南”。该信息也可在 docs.sun.com 站点找到。
  
  在绿线程下运行的代码的线程同步错误可能会被隐藏,而在本地线程下运行时却可能会显现出来。如果您的代码要在两种不同的线程包下运行,则必须考虑这种可能性。
  
  如何指定选择的线程选项?
  
  缺省状态下, Solaris Java 开发工具包的所有工具都使用绿线程。要指定使用某种本地线程,可以通过设置 THREADS_FLAG 环境变量来实现:
  
  % setenv THREADS_FLAG native
  
  将 THREADS_FLAG 设为 green 值,即可恢复使用绿线程:
  
  % setenv THREADS_FLAG green
  
  也可以用 JDK 工具中的 -native 或 -green 命令行标志来选择线程选项。线程标志必须是命令行上指定的第一个选项。
  
  命令行标志的用法如下例所示:
  
  % java -native mypkg.MyClass
  
  % appletviewer -green MyApplet.html
  
  命令行标志覆盖 THREADS_FLAG 环境变量的设置。

 

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
        邮件订阅

        如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

        重磅专题
        往期文章
        最新文章