<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Concurrency on philipjkim</title><link>https://philipjkim.cc/tags/concurrency/</link><description>Recent content in Concurrency on philipjkim</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 11 Aug 2025 13:39:08 +0900</lastBuildDate><atom:link href="https://philipjkim.cc/tags/concurrency/index.xml" rel="self" type="application/rss+xml"/><item><title>Go 의 동시성 (concurrency) 더 들여다보기</title><link>https://philipjkim.cc/posts/20250811-concurrency-of-go/</link><pubDate>Mon, 11 Aug 2025 13:39:08 +0900</pubDate><guid>https://philipjkim.cc/posts/20250811-concurrency-of-go/</guid><description>&lt;p&gt;현대의 컴퓨터는 멀티코어 프로세서를 기반으로 작동하며, 동시성(Concurrency)은 더 이상 선택이 아닌 필수적인 프로그래밍 패러다임이 되었습니다. Go 언어는 설계 초기부터 동시성을 핵심 기능으로 채택했으며, 전통적인 스레드-락(Thread-Lock) 모델의 복잡성을 해결하기 위한 명확한 철학을 제시합니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 Go의 동시성 모델이 어떠한 철학 위에서 탄생했는지 살펴보고, 다른 주류 언어들과의 접근 방식을 비교 분석합니다. 이를 통해 Go의 동시성이 갖는 장점과 현실적인 트레이드오프를 가감 없이 설명하고자 합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(이 글은 Gemini 2.5 Pro 모델에 의해 작성되었으며, 커버하고 있는 세부 항목들과 글의 톤/매너에 대한 요구사항들은 제가 정리해서 Gemini 에 요청했습니다. 내용에 잘못된 부분이 있을 수 있는데, 그런 경우 잘못된 정보에 대한 댓글을 남겨주시면 감사하겠습니다.)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>번역글: ExecutorService invokeAll 과 가상 스레드 사용하기</title><link>https://philipjkim.cc/posts/20250710-using-executor-service-invoke-all-with-virtual-threads/</link><pubDate>Thu, 10 Jul 2025 09:41:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20250710-using-executor-service-invoke-all-with-virtual-threads/</guid><description>&lt;p&gt;원문: &lt;a href="https://davidvlijmincx.com/posts/loom/invoke-all-with-virtual-threads/"&gt;https://davidvlijmincx.com/posts/loom/invoke-all-with-virtual-threads/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;invokeAll&lt;/code&gt; 은 &lt;code&gt;ExecutorService&lt;/code&gt; 의 메서드로, 여러 제출된 작업을 동시에 시작합니다. &lt;code&gt;ExecutorService&lt;/code&gt; 는 스레드 풀에서 플랫폼 스레드를 사용하여 제출된 작업을 실행합니다. 이 비싸고 리소스 집약적인 플랫폼 스레드를 사용하는 대신, 가상 스레드를 사용하여 &lt;code&gt;ExecutorService&lt;/code&gt; 에 제출된 작업을 실행할 수도 있습니다. 이 글에서는 &lt;code&gt;invokeAll&lt;/code&gt; 메서드를 가상 스레드 (virtual threads), 구조화된 동시성 (structured concurrency) 및 플랫폼 스레드 (platform threads) 와 함께 구현하는 모든 방법을 다룰 것입니다.&lt;/p&gt;
&lt;h2 id="가상-스레드를-사용한-invokeall"&gt;가상 스레드를 사용한 &lt;code&gt;invokeAll&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;우리가 살펴볼 첫 번째 예제는 가상 스레드 (virtual threads) 를 사용합니다. 각 작업에 대해 가상 스레드를 생성하는 Executor 를 생성하는 try-with-resources 문이 있습니다. 7행에서 &lt;code&gt;invokeAll&lt;/code&gt; 메서드가 작업 목록과 함께 호출됩니다.&lt;/p&gt;</description></item><item><title>번역글: Go의 동시성: 심층 분석</title><link>https://philipjkim.cc/posts/20250707-concurrency-in-go-a-deep-dive/</link><pubDate>Mon, 07 Jul 2025 13:43:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20250707-concurrency-in-go-a-deep-dive/</guid><description>&lt;p&gt;원문: &lt;a href="https://medium.com/hprog99/concurrency-in-go-a-deep-dive-2abbb4838984"&gt;https://medium.com/hprog99/concurrency-in-go-a-deep-dive-2abbb4838984&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;h3 id="동시성이란-무엇인가"&gt;동시성이란 무엇인가?&lt;/h3&gt;
&lt;p&gt;동시성은 독립적인 활동들의 구성으로 느슨하게 정의될 수 있습니다. 반드시 병렬 실행을 필요로 하지는 않지만, 여러 태스크가 겹치는 시간 동안 진행되도록 허용합니다. 컴퓨팅의 맥락에서 동시 프로그래밍은 여러 태스크가 실행에서 &lt;strong&gt;인터리브(interleave - 여러 대상을 번갈아 가며 실행하거나 배치)&lt;/strong&gt; 될 수 있도록 보장하며, 이는 특히 I/O 바운드 태스크나 수많은 이벤트를 동시에 처리해야 하는 애플리케이션(예: 웹 서버에서 여러 클라이언트 연결 처리)에서 중요합니다.&lt;/p&gt;
&lt;h3 id="동시성-vs-병렬성"&gt;동시성 vs. 병렬성&lt;/h3&gt;
&lt;p&gt;비공식적인 대화에서 종종 혼용되지만, 동시성과 병렬성은 다른 개념입니다.&lt;/p&gt;</description></item><item><title>번역글: Java 스레드 성능 vs. 가상 스레드 vs. Kotlin 코루틴</title><link>https://philipjkim.cc/posts/20250630-java-thread-vs-virtual-thread-vs-kotlin-coroutine/</link><pubDate>Mon, 30 Jun 2025 14:40:25 +0900</pubDate><guid>https://philipjkim.cc/posts/20250630-java-thread-vs-virtual-thread-vs-kotlin-coroutine/</guid><description>&lt;p&gt;원문 (아래 리스트 순으로 번역되어 있음. Translated by Google Gemini) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.behzadian.info/2024-05-03/Java-Thread-Performance-vs.-Virtual-Threads"&gt;https://blog.behzadian.info/2024-05-03/Java-Thread-Performance-vs.-Virtual-Threads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.behzadian.info/2024-05-06/Java-Virtual-Threads-Performance-vs.-Kotlin-Coroutines"&gt;https://blog.behzadian.info/2024-05-06/Java-Virtual-Threads-Performance-vs.-Kotlin-Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.behzadian.info/2024-05-26/Java-Thread-Performance-vs.-Virtual-Threads-Part-2"&gt;https://blog.behzadian.info/2024-05-26/Java-Thread-Performance-vs.-Virtual-Threads-Part-2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="java-스레드-vs-가상-스레드-pt1"&gt;Java 스레드 vs. 가상 스레드 Pt.1&lt;/h2&gt;
&lt;p&gt;면접 중에 한 면접관이 저에게 Java 스레드와 가상 스레드의 성능 차이에 대해 물었습니다. 저는 가상 스레드가 실제로는 JVM이 처리하는 경량 스레드이기 때문에 더 빠를 것이라고 답했지만, 둘 사이의 정확한 성능 차이가 궁금했습니다. 그래서 가상 스레드의 성능 향상을 확인하기 위해 간단한 벤치마크를 수행했습니다.&lt;/p&gt;
&lt;p&gt;이것은 매우 간단한 테스트입니다. 저는 매우 많은 수의 스레드와 가상 스레드를 생성하며, 각각이 완료되는 데 5초가 걸리도록 했습니다. 그런 다음 앱 실행 시간을 계산합니다. 이 벤치마크에 사용한 Java 코드는 다음과 같습니다:&lt;/p&gt;</description></item></channel></rss>