V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
anonymoustian
V2EX  ›  Java

如何通俗地理解 中间件技术?

  •  
  •   anonymoustian · 2016-01-20 15:53:33 +08:00 · 6979 次点击
    这是一个创建于 3259 天前的主题,其中的信息可能已经有所发展或是发生改变。

    能不能举出具体的例子和应用方式呢?谢谢

    7 条回复    2016-01-21 11:26:56 +08:00
    tonyVex
        1
    tonyVex  
       2016-01-20 16:01:17 +08:00
    例如消息中间件?
    500miles
        2
    500miles  
       2016-01-20 16:02:06 +08:00   ❤️ 1
    @公务员

    他们最熟悉了
    mzer0
        3
    mzer0  
       2016-01-20 16:15:55 +08:00   ❤️ 9
    这种问题你不如上知乎搜一搜,或者在知乎上问。 StackOverflow 或者 Quora 也是很好的选择。

    中间件一开始是为了解决一个很头疼的问题: Java 无法直接操纵内存,内存访问必须经过 JVM ( Java 虚拟机)。因此,直接操纵内存的部分最好由 C/C++来完成,再由 Java 调用 C/C++的函数。这样一来,就有了专门用 C/C++开发的中间件,供 Java 调用。

    后来,在数据库的不断发展中,人们意识到直接操纵数据库并不是一个很好的做法,因为操纵数据库本质上是用共享内存(多进程,多 CPU 核心,甚至多 CPU 共享同一块内存)实现的,而共享内存会带来很多问题,例如,在老一些的 CPU 型号上,如果某个 CPU 核心发现要访问的内存不在自己的 L1 缓存上,也不在共享 L2 缓存上,那就会锁住寻址总线,并按照 L3->L2->L1 的顺序来传输数据,全程耗时大概为 300 ~ 500 纳秒,而一个加法指令的耗时才不到 2 纳秒。这样一来,如果多个进程共享一块内存,那就很可能导致寻址总线频繁被锁死,软件运行的效率非常非常低。中间件可以很大地改善这个问题:用专有的进程来访问数据库。这样,只有中间件的进程才能访问数据库,如果把中间件的进程与 CPU 核心进行绑定,那就能一劳永逸地解决总线锁死问题,因为其他线程永远不需要访问数据库。有些老外意识到了这个问题,并编写了相应的解决方案,命名为“中间件”。

    因此,我们口中的“中间件”一般有两个含义,一个含义是数据库中间件,另一个含义类似于 SDK ,但无论如何,意思都是一样的:当前编程平台并不能有效地操作目标平台的数据,因此需要一个中间平台来改善访问。
    watzds
        4
    watzds  
       2016-01-20 18:31:00 +08:00 via Android
    广义来说,处于操作系统和应用程序之间的软件。
    分布式系统里,是指将多台机器组合成一个整体的软件。
    xiaoshenke
        5
    xiaoshenke  
       2016-01-21 00:34:04 +08:00
    一些通用或特殊库?
    xiamingchong
        6
    xiamingchong  
       2016-01-21 09:41:31 +08:00
    @500miles 内涵啊
    master13
        7
    master13  
       2016-01-21 11:26:56 +08:00
    你比如说吧,你的欲望和你的精华,你现在并没有欲望去搞出点精华来,但是你通过看视频节目,达到了这个目的,那这个视频节目就是中间件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2468 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:44 · PVG 23:44 · LAX 07:44 · JFK 10:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.