gpt4 book ai didi

java - Java 和 C/C++ 在多线程方面的区别

转载 作者:可可西里 更新时间:2023-11-01 17:39:41 28 4
gpt4 key购买 nike

我读过一些提示,多线程实现在很大程度上取决于您正在使用的目标操作系统。操作系统最终提供了多线程能力。比如Linux有POSIX标准实现,windows32有另外一种方式。

但我想知道编程语言水平上的主要差异。 C 似乎为同步提供了更多选择,例如 Mutex、读写锁、记录锁定、Posix 信号量。

但是在 Java 中,我知道我们可以使用像 Mutex 这样的同步作品吗?以及其他一些高级 API,例如 AtomicXX 和 volatile。但是我没有找到记录锁定和读写锁之类的东西。它是Java语言的弱点吗?还是跨平台的牺牲?

另外,我想知道这是否是像 Nginx 这样的 Web 服务器和像 oracle 这样的 DB 都是用 C/C++ 编写的主要原因?

我其实是一名Java开发者,对此非常好奇。希望有人能给我一些建议。

编辑:

Paul和Jesper已经建议Java在JDK1.5之后支持所有类似C/C++的锁类。但如果可能的话,我还是希望有人能更详细地解释为什么 Java 提供了足够的支持,我们仍然找不到纯 Java 的“oracle”。

编辑:

另外,我想补充一些我从 developer.com 上学到的有趣的东西,作者是 Nasir Khan。 Understanding Java Multithreading and Read-Write Locks .

其中的一些主题。

  • 共享主体的交互内存与线程的本地内存,
  • “同步”的含义关于这种互动和相互排斥。
  • 阐明一个对象的锁及其保护的资源。

编辑:

来自 FileLock Java文档

File locks are held on behalf of the entire Java virtual machine. They are not suitable for controlling access to a file by multiple threads within the same virtual machine.

Java 中的文件锁与 C/C++ 中的文件锁完全相同。

更新
我发现另一个值得比较的有趣领域是
在C++中,有一些类似的东西

atomic<int> x, y;


在 JAVA 中我们也有 AtomicInteger。它们是一回事吗?

最佳答案

Java在很多方面都比C/C++稍微高一点,主要是JVM提供的抽象。因此它的效率较低并且离操作系统更远。

同步方法就是一个例子,实现可以根据底层操作系统使用不同的机制。

由于效率较低,C/C++ 更适合一些效率非常重要的任务,如您提到的那些任务。

我认为(由于 JVM 和更高级别的抽象)是 C/C++ 和 Java 之间差异的主要原因和来源,即线程的处理方式和其他差异只是这一主要差异的方面或后果。

具体关于read-write locks , Java 提供了使用它们的工具(如先前评论中所指出的),并且很可能您可能想要使用的任何同步方法都可以通过某种方式在 Java 中使用或实现。 JVM 如何将其转换为操作系统调用以及结果的效率是另一回事。

关于java - Java 和 C/C++ 在多线程方面的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6583719/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com