search
HomeBackend DevelopmentGolangCompetition and parallelism: does Golang perform better than Java in this regard?

Concorrência e paralelismo: o Golang performa melhor que o Java nesse quesito?

One of the main advantages of Golang (or Go), a language created by Google, is competition management, that is, the ability to run multiple tasks at the same time.

Every modern language has tools to deal with concurrency. What sets Go apart is that the runtime abstracts most of the details about threads and parallelism for us, which makes this processing much simpler. It is the runtime, not the operating system kernel, that defines how goroutines are assigned to operating system threads and how the threads interact with the available CPU cores.

The developer can use concurrency (interleaved execution) and parallelism (simultaneous execution) at the same time in Go. And he can even do so explicitly by determining the GOMAXPROCS property which is the limit of simultaneous threads in the program. So Go can map goroutines on multiple cores to obtain real parallelism, and machines that have this architecture in processing. By default, however, the runtime already does this abstraction for us.

import (
    "runtime"
)

func main() {
    runtime.GOMAXPROCS(4) // Permitir até 4 threads para paralelismo
}

Other programming languages ​​also offer tools for concurrency and parallelism, but the level of abstraction and simplicity varies greatly. In Java, for example, we have the Concurrent API (java.util.concurrent) and tools such as Thread, ExecutorService and ForkJoinPool to manage concurrency and parallelism.

However, the developer needs to manually configure the thread pool or use specific tools like CompletableFuture to simplify asynchronous operations.

Java also allows parallel execution on multicore machines using thread pools. In contrast, however, threads in Java are heavier because they are mapped directly to operating system threads.

Runtime X Kernel

Operating system threads are managed by the system kernel. This means that creating, destroying, context switching, and managing threads are tasks that the kernel performs, introducing additional overhead. Each operating system thread consumes a significant amount of memory (typically around 1 MB in Java). When the system switches between threads, it needs to save and restore processor states (registers, stack, etc.), which is an expensive process.

In Go, it is the language runtime that does this management. Go does not create an operating system thread for each goroutine. Instead, the Go runtime manages multiple goroutines on a much smaller number of operating system threads - technically called M:N scheduling (M goroutines on N threads). This allows
thousands of goroutines with the same number of threads without overloading the operating system.

And this is the "grace" of the language, making it the favorite for managing high-performance distributed systems and real-time data processing applications.

However, however, it is important to emphasize that any modern language is capable of working with concurrency and parallelism.

The difference is in lightness and processing cost.

This way, we don't need to stay in a FlaxFlu of languages. Each language has its magic, its strengths and weaknesses.

Just to show how any language can perform these tasks, I will exemplify in Go and Java how the same program is coded, each with its own particularities. The idea is simple: simulate a task performed with concurrency and parallelism and print the execution time and memory usage in both cases (the numbers vary for each machine).

To make the comparison more "exempt", I asked chatgpt to generate the codes, which are below:

Golang

import (
    "runtime"
)

func main() {
    runtime.GOMAXPROCS(4) // Permitir até 4 threads para paralelismo
}

Execution time: 141.886206ms
Memory used: 43909120 bytes

Java

package main

import (
    "fmt"
    "runtime"
    "sync"
    "time"
)

func tarefa(id int) {
    // Simula algum processamento leve
    time.Sleep(10 * time.Millisecond)
}

func main() {
    // Configura a quantidade de tarefas
    numTarefas := 100000

    // Medindo o tempo de execução
    start := time.Now()

    var wg sync.WaitGroup
    wg.Add(numTarefas)

    // Calculando a quantidade de memória usada
    var m runtime.MemStats
    runtime.ReadMemStats(&m)
    initialMemory := m.Sys

    // Criando as goroutines para simular o trabalho
    for i := 0; i 


Execution time: 10238 ms
Memory used: 106732888 bytes

Anyway, we can clearly perform exactly the same task in both languages. Each using their libraries for the appropriate purposes. It is noted that in Go the execution was 98.61% faster and 58.86% less memory was used.

But there is no better language than another.

What we just need is to understand the pros and cons of each one when choosing which language can help us solve the problems we have in our projects. And each project will have its pool of particular and unique problems that need to be resolved.

Optimization in Java

It is possible, of course, to use strategies to try to improve the performance of the code provided above in Java.

I asked chatgpt again to incorporate some tricks up its sleeve into the initial code:

import (
    "runtime"
)

func main() {
    runtime.GOMAXPROCS(4) // Permitir até 4 threads para paralelismo
}

To reduce memory consumption, we use a ForkJoinPool, with a greater number of threads (100) to better deal with high concurrency. This replaces the default thread pool, ensuring more tasks can run simultaneously. We also call submit and join to ensure that all tasks are completed before ending the program.

With these changes, memory allocation was reduced by 56.21%:

Execution time: 11877 ms
Memory used: 46733064 bytes

Optimizing this code is an interesting challenge. We invite you to do better using Java, which is always very possible, since this language, we know, is wonderful regardless of any detail.

The above is the detailed content of Competition and parallelism: does Golang perform better than Java in this regard?. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Golang vs. Python: Concurrency and MultithreadingGolang vs. Python: Concurrency and MultithreadingApr 17, 2025 am 12:20 AM

Golang is more suitable for high concurrency tasks, while Python has more advantages in flexibility. 1.Golang efficiently handles concurrency through goroutine and channel. 2. Python relies on threading and asyncio, which is affected by GIL, but provides multiple concurrency methods. The choice should be based on specific needs.

Golang and C  : The Trade-offs in PerformanceGolang and C : The Trade-offs in PerformanceApr 17, 2025 am 12:18 AM

The performance differences between Golang and C are mainly reflected in memory management, compilation optimization and runtime efficiency. 1) Golang's garbage collection mechanism is convenient but may affect performance, 2) C's manual memory management and compiler optimization are more efficient in recursive computing.

Golang vs. Python: Applications and Use CasesGolang vs. Python: Applications and Use CasesApr 17, 2025 am 12:17 AM

ChooseGolangforhighperformanceandconcurrency,idealforbackendservicesandnetworkprogramming;selectPythonforrapiddevelopment,datascience,andmachinelearningduetoitsversatilityandextensivelibraries.

Golang vs. Python: Key Differences and SimilaritiesGolang vs. Python: Key Differences and SimilaritiesApr 17, 2025 am 12:15 AM

Golang and Python each have their own advantages: Golang is suitable for high performance and concurrent programming, while Python is suitable for data science and web development. Golang is known for its concurrency model and efficient performance, while Python is known for its concise syntax and rich library ecosystem.

Golang vs. Python: Ease of Use and Learning CurveGolang vs. Python: Ease of Use and Learning CurveApr 17, 2025 am 12:12 AM

In what aspects are Golang and Python easier to use and have a smoother learning curve? Golang is more suitable for high concurrency and high performance needs, and the learning curve is relatively gentle for developers with C language background. Python is more suitable for data science and rapid prototyping, and the learning curve is very smooth for beginners.

The Performance Race: Golang vs. CThe Performance Race: Golang vs. CApr 16, 2025 am 12:07 AM

Golang and C each have their own advantages in performance competitions: 1) Golang is suitable for high concurrency and rapid development, and 2) C provides higher performance and fine-grained control. The selection should be based on project requirements and team technology stack.

Golang vs. C  : Code Examples and Performance AnalysisGolang vs. C : Code Examples and Performance AnalysisApr 15, 2025 am 12:03 AM

Golang is suitable for rapid development and concurrent programming, while C is more suitable for projects that require extreme performance and underlying control. 1) Golang's concurrency model simplifies concurrency programming through goroutine and channel. 2) C's template programming provides generic code and performance optimization. 3) Golang's garbage collection is convenient but may affect performance. C's memory management is complex but the control is fine.

Golang's Impact: Speed, Efficiency, and SimplicityGolang's Impact: Speed, Efficiency, and SimplicityApr 14, 2025 am 12:11 AM

Goimpactsdevelopmentpositivelythroughspeed,efficiency,andsimplicity.1)Speed:Gocompilesquicklyandrunsefficiently,idealforlargeprojects.2)Efficiency:Itscomprehensivestandardlibraryreducesexternaldependencies,enhancingdevelopmentefficiency.3)Simplicity:

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.