不懂JVM,怎么当架构师
处理”或“自由线程处理”指的是一个程序同时执行多个操作线程的能力。 作为多线程应用程序的一个示例,某个程序在一个线程上接收用户输入,在另一个线程上执行多种复杂的计算,并在第三个线程上更新数据库。 在单线程应用程序中,用户可能会花费时间等待计算或数据库更新完成。 而在多线程应用程序中,这些进程可以在后台进行,因此不会浪费用户时间。 多线程处理可以是组件编程中的一个非常强大的工具。通过编写多线程组件,您可以创建在后台执行复杂计算的组件,它们允许用户界面 (UI) 在计算的过程中自由地响应用户输入。 虽然多线程处理是一个强大的工具,但是要将其正确应用却比较困难。 未能正确实现的多线程代码可能降低应用程序性能,或甚至导致应用程序冻结。 下列主题将向您介绍多线程编程的一些注意事项和最佳做法。.NET Framework 提供几个在组件中进行多线程处理的选项。 System.Threading 命名空间中的功能是一个选项。 基于事件的异步模式是另一个选项。 BackgroundWorker 组件是对异步模式的实现;它![]() 前指令或者操作码是原生的,否则当前指令或操作码的地址都需要依赖于PC来寻址。如果当前方法是原生的,那么该PC即为undefined。所有的CPU都有一个PC,通常PC在每个指令执行后被增加以指向即将执行的下一条指令的地址。JVM使用PC来跟踪正在执行的指令的位置。事实上,PC被用来指向methodarea的一个内存地址。 原生栈 不是所有的JVM都支持原生方法,但那些支持该特性的JVM通常会对每个线程创建一个原生方法栈。如果对JVM的JNI(JavaNative Invocation)采用c链接模型的实现,那么原生栈也将是一个C实现的栈。在这个例子中,原生栈中参数的顺序 、返回值都将跟通常的C程序相同。一个原生方法通常会对JVM产生一个回调(这依赖于JVM的实现)并执行一个Java方法。这样一个原生到Java的调用发生在栈上(通常在Java栈),与此同时线程也将离开原生栈,通常在Java栈上创建一个新的frame。 栈 每个线程都有属于它自己的栈,用于存储在线程上执行的每个方法的frame。栈是一个后进先出的数据结构,这可以使得当前正在执行的方法位于栈的顶部。对于每个方法的执行,都会有一个新的frame被创建并被入栈到栈的顶部。当方法正常的返回或在方法执行的过程中遇到未捕获的异常时frame会被出栈。栈不会 (编辑:唐山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |