Tag: concurrency

44 รายการ

Blog

งูต้นฉบับกำลังเปลี่ยนแฟ้มค่าตั้งต้นบนชั้นกลาง ขณะที่ประตูกั้นงานอื่นปิดอยู่บนโต๊ะสีมิ้นต์
pythonosenvironment

Python 3.14 os.reload_environ: รีเฟรช environment ได้ แต่ห้ามแข่งกับ thread อื่น

เข้าใจเวลาที่ os.environ ไม่ตรงกับ process environment พร้อมทดสอบ reload แบบ isolated และวาง synchronization

พี่โชว์
นากแม่น้ำต้นฉบับกำลังคัดบัตรงานซ้ำจากสายพานหลายเส้นลงตะกร้ากลางเพียงใบเดียว
javaconcurrencyconcurrenthashmap

Java ConcurrentHashMap.newKeySet: ทำ concurrent set โดยไม่ใส่ Boolean หลอก

ใช้ key set สำหรับ dedup ข้ามหลาย thread พร้อมทดสอบ add semantics และแยกจาก map ที่ต้องเก็บ metadata

พี่โชว์
นากแม่น้ำต้นฉบับยืนที่แท่นกลางแลกตะกร้าสองใบซึ่งมาจากคนละสายพาน
javaconcurrencyexchanger

Java Exchanger: นัดแลกข้อมูลระหว่างสองงานแบบเจอกันพอดี

ใช้ Exchanger ทำ two-party handoff พร้อม timeout และแยกจาก queue ที่รองรับหลาย producer/consumer

พี่โชว์
นากแม่น้ำต้นฉบับกำลังส่งกล่องข้ามช่องว่างตรงถึงมืออีกฝั่งโดยไม่มีชั้นพักกลาง
javaconcurrencyblockingqueue

Java SynchronousQueue: ส่งต่อแบบไม่มีชั้นวางพัก

เข้าใจ zero-capacity handoff, fairness และ timeout สำหรับ producer-consumer ที่ต้องเจอกันจริง

พี่โชว์
นากต้นฉบับตั้งประตูจับเวลาก่อนปล่อยกล่องงานลงสายพาน
javacompletablefutureconcurrency

Java delayedExecutor: หน่วงการส่งงานโดยไม่สร้าง scheduler ใหม่ทุกจุด

ใช้ CompletableFuture.delayedExecutor ประกอบ async pipeline พร้อมแยก delay ออกจาก timeout และทดสอบบน Java 17

น้องกาย
นากมิ้นต์ต้นฉบับวางนาฬิกาทรายสีอำพันข้างกล่องงาน ถ้าหมดเวลาจะสลับใส่กล่องสำรองแทน
javaconcurrencycompletablefuture

Java completeOnTimeout: ใส่ค่าสำรองเมื่องานช้าเกินเวลา

ใช้ CompletableFuture.completeOnTimeout กันอนาคตค้าง พร้อมทดสอบว่าค่าสำรองเข้าเมื่อหมดเวลาและค่าจริงชนะถ้าเสร็จก่อน

น้องกาย
นากมิ้นต์สามตัวต้นฉบับยืนรอที่เส้นสตาร์ทสีอำพันบนโต๊ะมิ้นต์ จนครบจำนวนแล้วค่อยวิ่งพร้อมกัน
javaconcurrencycyclicbarrier

Java CyclicBarrier: นัดพบครบจำนวนแล้วค่อยไปต่อด้วยกัน

ใช้ CyclicBarrier ให้หลาย thread รอจนครบ parties แล้วผ่านเฟสร่วม พร้อมทดสอบว่า barrier รีเซ็ตใช้ซ้ำได้

น้องกาย
นากมิ้นต์ต้นฉบับลองแตะกุญแจประตูห้องแล็บ ถ้ายึดไม่ได้ก็หันไปทำงานกองอื่นบนโต๊ะครีม
javaconcurrencylock

Java ReentrantLock.tryLock: ลองคว้ากุญแจ ถ้าไม่ได้ก็ไม่ยืนรอ

ใช้ tryLock และ tryLock(timeout) ลดการค้างรอเมื่อต้องแย่งทรัพยากร พร้อมทดสอบว่า thread ที่พลาดล็อกเดินต่อได้

น้องกาย
นากแม่น้ำสีมิ้นต์ต้นฉบับกำลังรวมเมล็ดจากหลายรางลงเครื่องชั่งเดียวโดยไม่ให้รางชนกัน
javaconcurrencyatomic

Java LongAccumulator: รวมสถิติที่มีคนอัปเดตพร้อมกัน

ใช้ accumulator แบบ associative ลด contention พร้อมเข้าใจว่า get ไม่ใช่ snapshot สำหรับ coordination

พี่โชว์
นากแม่น้ำสีมิ้นต์ต้นฉบับกำลังรับตะกร้างานจากสายพานตามลำดับที่เสร็จแทนลำดับที่ส่ง
javaconcurrencyexecutor

Java ExecutorCompletionService: รับผลตามงานที่เสร็จก่อน

แยกคิวส่งงานจากคิวผลลัพธ์ เพื่อไม่ให้งานช้าตัวแรกบังผลที่เสร็จแล้ว

พี่โชว์
กระรอกดินสีฟ้าอมเขียวต้นฉบับกำลังหยุดสายพานและผูกป้ายสาเหตุเชิงภาพไว้ที่คันหยุด
gogolangcontext

Go context.WithCancelCause: บอกเหตุผลที่งานถูกยกเลิก

ส่งสาเหตุผ่าน cancellation tree โดยยังรักษา contract ของ context พร้อม go test ที่รันจริง

พี่โชว์
นาฬิกาจับเวลาคู่กับกล่อง future บนโต๊ะมิ้นต์
javaconcurrencycompletablefuture

Java CompletableFuture.orTimeout: ตั้งเวลาตายให้งานอะซิงก์

ใช้ orTimeout (Java 9+) ให้ Future ล้มด้วย TimeoutException เมื่อช้าเกิน — ตัวอย่างรันจริง

น้องกาย
นากกายอัปเดตช่องแผนที่พร้อมกันบนโต๊ะมิ้นต์โดยไม่ชนกุญแจ
javaconcurrencycollections

Java ConcurrentHashMap.compute: อัปเดตค่าต่อคีย์แบบ atomic

ใช้ compute เพื่อนับเคาน์เตอร์โดยไม่แข่ง get+put พร้อมตัวอย่างรันจริง

น้องกาย
นากกายรับกล่องงานสามใบที่เสร็จไม่พร้อมกันบนสายพานมิ้นต์
pythonconcurrencyfutures

Python as_completed: เก็บผลงานขนานทีละชิ้นตามลำดับเสร็จ

ใช้ concurrent.futures.as_completed เพื่อประมวลผล future ที่เสร็จก่อนโดยไม่รอทั้งหมด พร้อม unittest

น้องกาย
นากกายยืนหน้านาฬิกาทรายคิวงาน มีงานที่ครบเวลาโผล่ช่องอำพัน
javaconcurrencydelayqueue

DelayQueue: ดึงงานเมื่อครบเวลาโดยไม่ busy-wait

ใช้ DelayQueue กับ Delayed เพื่อให้ take/poll คืนเฉพาะงานที่หมดเวลารอแล้ว

น้องกาย
นากกายถ่ายสำเนาแผ่นรายการแล้วอ่านสำเนา ขณะอีกฝั่งแก้ต้นฉบับ
javaconcurrencycopyonwrite

CopyOnWriteArrayList: อ่าน snapshot ปลอดภัยตอน listener เยอะ

ใช้ CopyOnWriteArrayList เมื่ออ่านบ่อย เขียนน้อย และต้องการ iterator ที่ไม่สะดุดจาก concurrent modification

น้องกาย
นากกายต้นฉบับกำลังรวมเมล็ดจากหลายรางนับเข้าสู่ถ้วยสรุปตรงกลาง
javaconcurrencymetrics

Java LongAdder: ลดการแย่ง counter ใน metrics แต่ห้ามใช้แทนเลขลำดับธุรกิจ

ใช้ LongAdder กับ counter ที่เขียนพร้อมกันสูง พร้อมขอบเขตของ sum ที่ไม่ใช่ atomic snapshot

พี่โชว์
ตราประทับสองดวงบนโต๊ะมิ้นต์ดวงหนึ่งสีเขียวดวงหนึ่งสีอำพันสำหรับ validate
javaconcurrencystampedlock

Java StampedLock: อ่านแบบ optimistic แล้ว validate ก่อนเชื่อค่า

ใช้ tryOptimisticRead + validate ของ StampedLock เมื่อรอบอ่านเยอะและเขียนน้อย — พร้อมตัวอย่างทดสอบ

น้องกาย
ประตูไม้บนโต๊ะมิ้นต์มีตัวนับถอยหลังสีอำพันถึงศูนย์
javaconcurrencycountdownlatch

Java CountDownLatch: ประตูเปิดครั้งเดียวสำหรับรอ N งานให้เสร็จ

ใช้ CountDownLatch เป็นเกตเริ่มต้นหรือรอ worker ให้ครบ — ตัวอย่างที่รันด้วย Java และ assert ผล

น้องกาย
นากกายต้นฉบับคุมประตูงานที่มีบัตรผ่านจำนวนจำกัดและรับบัตรคืนหลังจบงาน
javaconcurrencybackpressure

Java Semaphore: จำกัดงานพร้อมกันด้วย permit ที่คืนเสมอ

ควบคุมจำนวนงานที่เข้าทรัพยากรพร้อมกันด้วย try/finally และเข้าใจ fairness ของ Semaphore

พี่โชว์
สวิตช์บริบทบนโต๊ะมิ้นต์ มีโทเค็นสีอำพันค้างอยู่ในบล็อก with
pythoncontextvarsstdlib

Python 3.14: Token ของ contextvars ใช้ with ได้ — set แล้วรีเซ็ตอัตโนมัติ

สรุป contextvars.Token เป็น context manager ใน Python 3.14 — with var.set(value): … แล้วค่าเดิมกลับเอง

น้องกาย
กลุ่มการ์ดงาน asyncio บนโต๊ะมิ้นต์ มีปุ่มยกเลิกสีอำพันตรงกลาง
pythonasynciostdlib

Python 3.15: TaskGroup.cancel — ยกเลิกกลุ่มงาน asyncio แบบตรง ๆ

สรุป asyncio.TaskGroup.cancel ใน Python 3.15 — เลิกใช้ทริคยก exception ปลอมเพื่อหยุดกลุ่มเมื่องานเสร็จก่อนกำหนด

น้องกาย
ซองบริบท immutable ส่งผ่านกรอบขอบเขตไปงานลูกบนโต๊ะมิ้นต์
javascoped-valuesjdk25

Scoped Values ขึ้น final ใน JDK 25: ส่ง requestId แบบอ่านอย่างเดียวข้ามเธรดลูก

สรุป JEP 506 — ScopedValue เป็นฟีเจอร์สมบูรณ์ใน Java 25 ต่างจาก ThreadLocal อย่างไร และเมื่อไหร่ควรใช้กับ virtual threads

น้องกาย
กรอบงานแม่ครอบงานลูกสามก้อนบนโต๊ะมิ้นต์ มีจุดรวมผลสีอำพัน
javaconcurrencystructured-concurrency

StructuredTaskScope.open + Joiner: รวมงานย่อยแบบ structured (JDK 25 preview)

สรุป JEP 505 — เปิด scope ด้วย open() และเลือก Joiner แทนคอนสตรัคเตอร์เก่า พร้อมแนวคิด all-success / any-success

น้องกาย
นากกายต้นฉบับกำลังย้ายลูกแก้วจากรางที่ขาดไปยังรางสำรองสีเขียวซึ่งกลับมารวมเส้นเดิม
javacompletablefutureconcurrency

Java exceptionallyCompose: fallback แบบ async โดยไม่ซ้อน CompletableFuture

กู้ future ที่ล้มด้วยงาน async อีกชุด พร้อมแยก recovery จากการแปลงผลปกติและทดสอบบน Java 17

พี่โชว์
กระรอกดินต้นฉบับดึงคันโยกที่ปล่อยแปรงทำความสะอาดเมื่อเชือกงานถูกตัด
goconcurrencycontext

Go context.AfterFunc: ผูก cleanup กับการยกเลิกโดยไม่ทิ้ง goroutine รอ

ใช้ context.AfterFunc ปลุกงาน cleanup เมื่อ context ถูกยกเลิก พร้อมเข้าใจ race ของ stop และการรอ callback ให้จบ

พี่โชว์
นากกายตั้งนาฬิกาจับเวลาข้างกล่องงานบนโต๊ะมิ้นต์
javaconcurrencycompletablefuture

Java CompletableFuture.orTimeout: ตัดงานช้าด้วยหมดเวลาในตัว

สอนใช้ CompletableFuture.orTimeout เพื่อล้มอนาคตที่ค้างเกินกำหนด พร้อม java-test ที่รันบน JDK ของเครื่อง

น้องกาย
กระรอกดินต้นฉบับหมุนกุญแจอำพันเพียงครั้งเดียวเพื่อเปิดลิ้นชักค่าคอนฟิกให้รางงานหลายราง
goconcurrencysync

Go sync.OnceValue: โหลดค่าครั้งเดียวโดยไม่เปิดช่องให้ cache แข่งกัน

ใช้ sync.OnceValue ทำ lazy initialization ที่ปลอดภัยระหว่าง goroutine พร้อมข้อจำกัดเรื่อง panic และค่าที่ต้อง refresh

พี่โชว์
นากต้นฉบับรอไฟสถานะสามดวงติดครบก่อนรวบตะกร้าผลลัพธ์ตามลำดับ
javaconcurrencycompletablefuture

Java CompletableFuture.allOf: รอครบได้ แต่ผลลัพธ์ต้องประกอบเอง

รวมงาน async หลายชิ้นด้วย allOf โดยรักษาลำดับผลลัพธ์และทำให้ failure path ชัด พร้อมตัวอย่าง Java 17 ที่รันจริง

พี่โชว์
มาสคอตแก้วกาแฟต้นฉบับควบคุมวาล์วน้ำจากถังผู้ผลิตให้หยดลงถ้วยผู้บริโภคทีละส่วน
javareactive-streamsbackpressure

Java Flow: ให้ Consumer กำหนดจังหวะด้วย Backpressure

เข้าใจ Publisher, Subscriber, Subscription และ request(n) พร้อมตัวอย่าง SubmissionPublisher ที่ขอข้อมูลทีละชิ้น

พี่โชว์
มาสคอตแก้วกาแฟต้นฉบับกำกับนักวิ่งหลายคนผ่านประตูเป็นช่วง โดยมีคนหนึ่งออกและอีกคนเข้าร่วมกลางทาง
javaconcurrencyphaser

Java Phaser: Barrier ที่เพิ่ม–ลด Worker ระหว่างทางได้

ใช้ Phaser ประสานงานหลายช่วงเมื่อจำนวน participant เปลี่ยนได้ พร้อมทดสอบ phase advance และ deregistration ด้วย Java 17

พี่โชว์
งูสีเขียวต้นฉบับกำลังกระจายกล่องคำนวณไปยังโต๊ะล่ามอิสระหลายตัวในห้องสว่าง
pythonconcurrencyparallelism

InterpreterPoolExecutor: ใช้หลาย Core โดยไม่แยก Process

ทดลอง subinterpreter pool ใน Python 3.14 เข้าใจ isolation, pickle boundary และเกณฑ์เลือกเทียบ thread/process pool

พี่โชว์
งูสีเขียวต้นฉบับกำลังปิดประตูรับกล่องเข้าราง แต่ปล่อยกล่องที่ค้างอยู่ไหลถึงปลายสายพาน
pythonasyncioconcurrency

asyncio.Queue.shutdown: ปิดสายพานงานโดยไม่ส่ง Sentinel

ใช้ shutdown และ QueueShutDown แยกการปิดรับงานออกจากการประมวลผลงานค้าง พร้อมทดสอบ graceful shutdown จริง

พี่โชว์
นากกายปล่อยการ์ดงานสามใบเข้าช่องพูล แล้วรอกล่องผลรวมสีอำพันบนโต๊ะมิ้นต์
javaconcurrencyexecutors

ExecutorService.invokeAll: ส่งงานหลายชิ้นแล้วรอผลพร้อมกัน

อธิบาย invokeAll บน ExecutorService พร้อมตัวอย่าง java-run ที่รอ Future ครบและตรวจผล

น้องกาย
นากกายปล่อยเส้นด้ายเรืองแสงหลายเส้นจากกระสวยเข้าเลนงานแยกบนโต๊ะมิ้นต์
javaconcurrencyexecutors

ExecutorService: ส่งงาน แล้วปิดพูลให้สะอาด

อธิบายการใช้ ExecutorService แบบพูลคงที่ พร้อมตัวอย่างรันได้บน JDK ที่ CI ใช้ และเทียบแนวคิด virtual-thread-per-task บน JDK 21+

น้องกาย
ซองจดหมายใส่วางในกรอบขอบเขตบนโต๊ะมิ้นต์มีลูกศรส่งต่อไปงานลูกโดยไม่คัดลอกกองใหญ่
javascoped-valuesconcurrency

Scoped Values เบื้องต้น: ส่งบริบทแบบ immutable ในขอบเขตเดียว

สรุปแนวคิด ScopedValue สำหรับแทนที่ ThreadLocal ในงาน request context พร้อมตัวอย่าง static-only ที่อ่านเป็นแนวคิดได้แม้ยังไม่รันบนทุก JDK

น้องกาย
เส้นด้ายบาง ๆ พันหมุดบนโต๊ะมิ้นต์มีนากกายถือกรรไกรตัดเส้นที่ติดแน่น
javavirtual-threadsconcurrency

Virtual thread pinning เบื้องต้น: อะไรเคยพิน และอะไรยังพินอยู่

อธิบาย pinning ของ virtual threads แบบสั้น ๆ สำหรับทีมที่เพิ่งย้ายจาก JDK 21 มาสายใหม่ พร้อมตัวอย่าง Main ที่แยกงานบล็อกใน virtual thread

น้องกาย
นากกายสีมิ้นต์หยุดรอสายพานงานที่นาฬิกาทรายหมด แต่เครื่องด้านหลังยังหมุนอยู่
javaconcurrencytimeouts

Java CompletableFuture.orTimeout: ตั้งเส้นตายได้ แต่ไม่ได้หยุดงานเบื้องหลังให้

แยกเวลารอของ future ออกจากการยกเลิก I/O พร้อม test สำเร็จและ timeout บน Java 17

พี่โชว์
โต๊ะมิ้นต์มีกล่องงานแม่และงานลูกสองกล่องที่เชื่อมกัน
javajdkconcurrency

JEP 533: Structured Concurrency รอบพรีวิวที่เจ็ดใน JDK 27

สรุป JEP 533 ที่พรีวิว StructuredTaskScope อีกรอบใน JDK 27 พร้อมแนวคิดงานลูกและ join เป็นหน่วยเดียว

น้องกาย
งูสีมิ้นต์ต้นฉบับโอบงานสามชิ้นไว้ใต้ร่มเดียวกันบนโต๊ะสว่าง
pythonasyncioconcurrency

Python asyncio.TaskGroup: ให้งานพี่น้องล้มและยกเลิกเป็นกลุ่ม

ใช้ structured concurrency ใน Python เพื่อไม่ทิ้ง background task ค้าง พร้อม unittest ที่ทดสอบทั้งสำเร็จและ fail-fast

น้องกาย
ภาพวาดกระรอกดินสีฟ้าอมเขียวต้นฉบับใช้แว่นขยายตรวจเชือกที่ติดกับรอกซึ่งหลุดออกจากระบบบนโต๊ะสว่าง
gogolangconcurrency

Go 1.27 หา Goroutine ที่ไม่มีวันตื่นด้วย Leak Profile

รู้จัก goroutineleak profile ที่ใช้ reachability จาก GC แยกงานติดค้างถาวรออกจากงานที่แค่รอนาน พร้อม test ที่รันจริง

น้องกาย
Beyond Syntax: เขียน Go ให้ Scale กับทีม ไม่ใช่แค่ CPU
gogolangbest-practices

Beyond Syntax: เขียน Go ให้ Scale กับทีม ไม่ใช่แค่ CPU

รวม 12 แนวคิดที่แยก Go ระดับ "เขียนได้" ออกจาก Go ระดับ "คิดมาแล้ว" — ตั้งแต่ function signature, error handling, interface design, concurrency ownership ไปจนถึง package structure, naming convention, dependency injection และ graceful shutdown ที่ทำให้โค้ดอ่านง่ายขึ้นจริงในระดับทีม

Dev Team
7 Concurrency Patterns ใน Go ที่คุณต้องรู้ — อัปเดต Go 1.25/1.26
gogolangconcurrency

7 Concurrency Patterns ใน Go ที่คุณต้องรู้ — อัปเดต Go 1.25/1.26

รวม 7 รูปแบบ concurrency ที่สำคัญที่สุดใน Go พร้อมตัวอย่างโค้ดที่อัปเดตสำหรับ Go 1.25/1.26 ครอบคลุม Worker Pool, Fan-Out/Fan-In, Pipeline, Pub-Sub, Select Timeout, Semaphore และ Rate Limiting

Dev Team
25 เทคนิค Go ที่นักพัฒนามืออาชีพใช้จริงในงาน Production
gogolangconcurrency

25 เทคนิค Go ที่นักพัฒนามืออาชีพใช้จริงในงาน Production

รวม 25 เทคนิค Go (Golang) ที่ใช้ได้จริงตั้งแต่ goroutines, channels, context, error handling ไปจนถึง generics, structured logging และฟีเจอร์ใหม่ใน Go 1.25/1.26 พร้อมตัวอย่างโค้ดและ diagram ประกอบทุกหัวข้อ

Dev Team