热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

erlang调用java_Erlang进程与Java线程

在我之后重复:“这些是不同的范例”大声说出20次左右–这是我们目前的口头禅.如果我们真的必须比较苹果和橘子,那么我们至少要考虑“成果”的共同方面在哪里相交.Java“

在我之后重复:“这些是不同的范例”

大声说出20次左右 – 这是我们目前的口头禅.

如果我们真的必须比较苹果和橘子,那么我们至少要考虑“成果”的共同方面在哪里相交.

Java“对象”是Java程序员的基本计算单位.也就是说,一个物体(基本上是一个带有臂和腿的结构,具有封装somewhat more strictly enforced than in C++)是您用来模拟世界的主要工具.您认为“此对象知道/具有数据{X,Y,Z}并在其上执行函数{A(),B(),C()},在任何地方携带数据,并且可以通过调用与其他对象通信函数/方法被定义为它们的公共接口的一部分.它是一个名词,而名词就是东西.“也就是说,您可以围绕这些计算单位确定思维过程.默认情况是对象之间发生的事情按顺序发生,并且崩溃会中断该序列.它们被称为“对象”,因此(如果我们忽视Alan Kay的原始含义),我们得到“面向对象”.

Erlang“进程”是Erlang程序员的基本计算单位.过程(基本上是在其自己的时间和空间中运行的独立顺序程序)是厄兰格为世界建模的主要工具(1).与Java对象如何定义封装级别类似,Erlang进程也定义了封装级别,但在Erlang的情况下,计算单元完全相互隔离.您不能在另一个进程上调用方法或函数,也不能访问其中的任何数据,也不能在与任何其他进程相同的时序上下文中运行,并且无法保证相关的消息接收顺序到可能正在发送消息的其他进程.他们也可能完全在不同的星球上(而且,想到它,这实际上是合理的).它们可以彼此独立地崩溃,而其他过程只有在故意选择受到影响时才会受到影响(甚至这涉及到消息传递:基本上注册接收来自死亡过程的遗书本身并不能保证以任何形式到达相对于整个系统的顺序,您可能会或可能不会选择做出反应).

Java直接在复合算法中处理复杂性:对象如何协同工作来解决问题.它旨在在单个执行上下文中执行此操作,Java中的默认情况是顺序执行. Java中的多个线程表示多个运行的上下文,并且是一个非常复杂的主题,因为不同的时序上下文中的影响活动彼此之间(以及整个系统:因此防御性编程,异常方案等).在Java中说“多线程”意味着与Erlang不同的东西,实际上在Erlang中甚至都没有说过,因为它始终是基本情况.请注意,Java线程暗示与时间有关的隔离,而不是内存或可见引用 – 通过选择私有内容和公共内容来手动控制Java中的可见性;系统的普遍可访问元素必须设计为“线程安全”和可重入,通过排队机制顺序化,或采用锁定机制.简而言之:调度是线程/并发Java程序中的手动管理问题.

Erlang根据执行时间(调度),内存访问和参考可见性分离每个进程的运行上下文,这样做可以通过完全隔离算法来简化算法的每个组件.这不仅仅是默认情况,这是此计算模型下唯一可用的情况.这样做的代价是,一旦处理序列的一部分穿过消息屏障,就永远不知道任何给定操作的顺序 – 因为消息本质上都是网络协议,并且没有方法调用可以保证在给定的内部执行上下文.这类似于为每个对象创建一个JVM实例,并且只允许它们跨套接字进行通信 – 这在Java中会非常麻烦,但是Erlang的设计方式是工作的(顺便说一句,这也是概念的基础)编写“Java微服务”如果一个人抛弃了流行语所带来的网络化包袱 – 默认情况下,Erlang程序是成群的微服务.这完全取决于权衡.

这些是不同的范例.我们可以找到的最接近的共性是,从程序员的角度来看,Erlang进程类似于Java对象.如果我们必须找到一些东西来比较Java线程……好吧,我们根本不会在Erlang中找到类似的东西,因为在Erlang中没有这样的可比概念.击败死马:这些是不同的范例.如果你在Erlang中编写一些非平凡的程序,这将很明显.

请注意,我说“这些是不同的范例”,但甚至没有涉及OOP与FP的主题. “在Java中思考”和“在Erlang中思考”之间的区别比OOP与FP更为重要.

虽然Erlang的“并发导向”或“过程导向”基础确实更接近Alan Kay在创造“面向对象”一词时的想法(2),但这并不是真正的重点. Kay所得到的是,通过将你的同质体切割成离散的块,可以降低系统的认知复杂性,并且隔离是必要的. Java以一种基本上仍然是程序性的方式实现了这一点,但是结构代码围绕一个特殊的语法,而不是高阶调度闭包,称为“类定义”. Erlang通过按对象拆分运行上下文来实现此目的.这意味着Erlang的东西不能相互调用方法,但Java的东西可以.这意味着Erlang的东西可以孤立地崩溃,但Java的东西却不能.从这个基本差异中产生了大量的影响 – 因此“不同的范式”.权衡.

脚注:

>顺便提一下,Erlang实现了“the actor model”的版本,但我们不使用这个术语,因为Erlang早于该模型的普及.当他设计Erlang并写了his thesis时,Joe没有意识到这一点.

> Alan Kay已经说了很多关于what he meant when he coined the term“面向对象”的内容,最有趣的是his take关于消息传递(从一个独立进程单向通知,有自己的时间和内存到另一个)VS调用(顺序中的函数或方法调用)具有共享内存的执行上下文) – 以及如何在编程语言和下面的实现所呈现的编程接口之间模糊一点.



推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • Java并发机制详解及其在数据安全性保障中的应用方案 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • Juval Löwy主张,每个类都应被视为服务,这并非是为了让服务无处不在,而是因为微服务是经过深思熟虑后系统分解的自然结果。在他的设计和构建的系统中,这种理念有助于提高模块化、可维护性和扩展性。通过将每个类视为独立的服务,系统能够更好地应对复杂性,实现更灵活的部署和更高的性能。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • 深入浅析JVM垃圾回收机制与收集器概述
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》的阅读心得进行整理,详细探讨了JVM的垃圾回收机制及其各类收集器的特点与应用场景。通过分析不同垃圾收集器的工作原理和性能表现,帮助读者深入了解JVM内存管理的核心技术,为优化Java应用程序提供实用指导。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 并发编程入门:初探多任务处理技术
    并发编程入门:探索多任务处理技术并发编程是指在单个处理器上高效地管理多个任务的执行过程。其核心在于通过合理分配和协调任务,提高系统的整体性能。主要应用场景包括:1) 将复杂任务分解为多个子任务,并分配给不同的线程,实现并行处理;2) 通过同步机制确保线程间协调一致,避免资源竞争和数据不一致问题。此外,理解并发编程还涉及锁机制、线程池和异步编程等关键技术。 ... [详细]
author-avatar
议Music_Rose_954
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有