Tag: concurrency
44 รายการ
Blog
Python 3.14 os.reload_environ: รีเฟรช environment ได้ แต่ห้ามแข่งกับ thread อื่น
เข้าใจเวลาที่ os.environ ไม่ตรงกับ process environment พร้อมทดสอบ reload แบบ isolated และวาง synchronization
Java ConcurrentHashMap.newKeySet: ทำ concurrent set โดยไม่ใส่ Boolean หลอก
ใช้ key set สำหรับ dedup ข้ามหลาย thread พร้อมทดสอบ add semantics และแยกจาก map ที่ต้องเก็บ metadata
Java Exchanger: นัดแลกข้อมูลระหว่างสองงานแบบเจอกันพอดี
ใช้ Exchanger ทำ two-party handoff พร้อม timeout และแยกจาก queue ที่รองรับหลาย producer/consumer
Java SynchronousQueue: ส่งต่อแบบไม่มีชั้นวางพัก
เข้าใจ zero-capacity handoff, fairness และ timeout สำหรับ producer-consumer ที่ต้องเจอกันจริง
Java delayedExecutor: หน่วงการส่งงานโดยไม่สร้าง scheduler ใหม่ทุกจุด
ใช้ CompletableFuture.delayedExecutor ประกอบ async pipeline พร้อมแยก delay ออกจาก timeout และทดสอบบน Java 17
Java completeOnTimeout: ใส่ค่าสำรองเมื่องานช้าเกินเวลา
ใช้ CompletableFuture.completeOnTimeout กันอนาคตค้าง พร้อมทดสอบว่าค่าสำรองเข้าเมื่อหมดเวลาและค่าจริงชนะถ้าเสร็จก่อน
Java CyclicBarrier: นัดพบครบจำนวนแล้วค่อยไปต่อด้วยกัน
ใช้ CyclicBarrier ให้หลาย thread รอจนครบ parties แล้วผ่านเฟสร่วม พร้อมทดสอบว่า barrier รีเซ็ตใช้ซ้ำได้
Java ReentrantLock.tryLock: ลองคว้ากุญแจ ถ้าไม่ได้ก็ไม่ยืนรอ
ใช้ tryLock และ tryLock(timeout) ลดการค้างรอเมื่อต้องแย่งทรัพยากร พร้อมทดสอบว่า thread ที่พลาดล็อกเดินต่อได้
Java LongAccumulator: รวมสถิติที่มีคนอัปเดตพร้อมกัน
ใช้ accumulator แบบ associative ลด contention พร้อมเข้าใจว่า get ไม่ใช่ snapshot สำหรับ coordination
Java ExecutorCompletionService: รับผลตามงานที่เสร็จก่อน
แยกคิวส่งงานจากคิวผลลัพธ์ เพื่อไม่ให้งานช้าตัวแรกบังผลที่เสร็จแล้ว
Go context.WithCancelCause: บอกเหตุผลที่งานถูกยกเลิก
ส่งสาเหตุผ่าน cancellation tree โดยยังรักษา contract ของ context พร้อม go test ที่รันจริง
Java CompletableFuture.orTimeout: ตั้งเวลาตายให้งานอะซิงก์
ใช้ orTimeout (Java 9+) ให้ Future ล้มด้วย TimeoutException เมื่อช้าเกิน — ตัวอย่างรันจริง
Java ConcurrentHashMap.compute: อัปเดตค่าต่อคีย์แบบ atomic
ใช้ compute เพื่อนับเคาน์เตอร์โดยไม่แข่ง get+put พร้อมตัวอย่างรันจริง
Python as_completed: เก็บผลงานขนานทีละชิ้นตามลำดับเสร็จ
ใช้ concurrent.futures.as_completed เพื่อประมวลผล future ที่เสร็จก่อนโดยไม่รอทั้งหมด พร้อม unittest
DelayQueue: ดึงงานเมื่อครบเวลาโดยไม่ busy-wait
ใช้ DelayQueue กับ Delayed เพื่อให้ take/poll คืนเฉพาะงานที่หมดเวลารอแล้ว
CopyOnWriteArrayList: อ่าน snapshot ปลอดภัยตอน listener เยอะ
ใช้ CopyOnWriteArrayList เมื่ออ่านบ่อย เขียนน้อย และต้องการ iterator ที่ไม่สะดุดจาก concurrent modification
Java LongAdder: ลดการแย่ง counter ใน metrics แต่ห้ามใช้แทนเลขลำดับธุรกิจ
ใช้ LongAdder กับ counter ที่เขียนพร้อมกันสูง พร้อมขอบเขตของ sum ที่ไม่ใช่ atomic snapshot
Java StampedLock: อ่านแบบ optimistic แล้ว validate ก่อนเชื่อค่า
ใช้ tryOptimisticRead + validate ของ StampedLock เมื่อรอบอ่านเยอะและเขียนน้อย — พร้อมตัวอย่างทดสอบ
Java CountDownLatch: ประตูเปิดครั้งเดียวสำหรับรอ N งานให้เสร็จ
ใช้ CountDownLatch เป็นเกตเริ่มต้นหรือรอ worker ให้ครบ — ตัวอย่างที่รันด้วย Java และ assert ผล
Java Semaphore: จำกัดงานพร้อมกันด้วย permit ที่คืนเสมอ
ควบคุมจำนวนงานที่เข้าทรัพยากรพร้อมกันด้วย try/finally และเข้าใจ fairness ของ Semaphore
Python 3.14: Token ของ contextvars ใช้ with ได้ — set แล้วรีเซ็ตอัตโนมัติ
สรุป contextvars.Token เป็น context manager ใน Python 3.14 — with var.set(value): … แล้วค่าเดิมกลับเอง
Python 3.15: TaskGroup.cancel — ยกเลิกกลุ่มงาน asyncio แบบตรง ๆ
สรุป asyncio.TaskGroup.cancel ใน Python 3.15 — เลิกใช้ทริคยก exception ปลอมเพื่อหยุดกลุ่มเมื่องานเสร็จก่อนกำหนด
Scoped Values ขึ้น final ใน JDK 25: ส่ง requestId แบบอ่านอย่างเดียวข้ามเธรดลูก
สรุป JEP 506 — ScopedValue เป็นฟีเจอร์สมบูรณ์ใน Java 25 ต่างจาก ThreadLocal อย่างไร และเมื่อไหร่ควรใช้กับ virtual threads
StructuredTaskScope.open + Joiner: รวมงานย่อยแบบ structured (JDK 25 preview)
สรุป JEP 505 — เปิด scope ด้วย open() และเลือก Joiner แทนคอนสตรัคเตอร์เก่า พร้อมแนวคิด all-success / any-success
Java exceptionallyCompose: fallback แบบ async โดยไม่ซ้อน CompletableFuture
กู้ future ที่ล้มด้วยงาน async อีกชุด พร้อมแยก recovery จากการแปลงผลปกติและทดสอบบน Java 17
Go context.AfterFunc: ผูก cleanup กับการยกเลิกโดยไม่ทิ้ง goroutine รอ
ใช้ context.AfterFunc ปลุกงาน cleanup เมื่อ context ถูกยกเลิก พร้อมเข้าใจ race ของ stop และการรอ callback ให้จบ

Java CompletableFuture.orTimeout: ตัดงานช้าด้วยหมดเวลาในตัว
สอนใช้ CompletableFuture.orTimeout เพื่อล้มอนาคตที่ค้างเกินกำหนด พร้อม java-test ที่รันบน JDK ของเครื่อง
Go sync.OnceValue: โหลดค่าครั้งเดียวโดยไม่เปิดช่องให้ cache แข่งกัน
ใช้ sync.OnceValue ทำ lazy initialization ที่ปลอดภัยระหว่าง goroutine พร้อมข้อจำกัดเรื่อง panic และค่าที่ต้อง refresh
Java CompletableFuture.allOf: รอครบได้ แต่ผลลัพธ์ต้องประกอบเอง
รวมงาน async หลายชิ้นด้วย allOf โดยรักษาลำดับผลลัพธ์และทำให้ failure path ชัด พร้อมตัวอย่าง Java 17 ที่รันจริง
Java Flow: ให้ Consumer กำหนดจังหวะด้วย Backpressure
เข้าใจ Publisher, Subscriber, Subscription และ request(n) พร้อมตัวอย่าง SubmissionPublisher ที่ขอข้อมูลทีละชิ้น
Java Phaser: Barrier ที่เพิ่ม–ลด Worker ระหว่างทางได้
ใช้ Phaser ประสานงานหลายช่วงเมื่อจำนวน participant เปลี่ยนได้ พร้อมทดสอบ phase advance และ deregistration ด้วย Java 17
InterpreterPoolExecutor: ใช้หลาย Core โดยไม่แยก Process
ทดลอง subinterpreter pool ใน Python 3.14 เข้าใจ isolation, pickle boundary และเกณฑ์เลือกเทียบ thread/process pool
asyncio.Queue.shutdown: ปิดสายพานงานโดยไม่ส่ง Sentinel
ใช้ shutdown และ QueueShutDown แยกการปิดรับงานออกจากการประมวลผลงานค้าง พร้อมทดสอบ graceful shutdown จริง
ExecutorService.invokeAll: ส่งงานหลายชิ้นแล้วรอผลพร้อมกัน
อธิบาย invokeAll บน ExecutorService พร้อมตัวอย่าง java-run ที่รอ Future ครบและตรวจผล

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

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

Virtual thread pinning เบื้องต้น: อะไรเคยพิน และอะไรยังพินอยู่
อธิบาย pinning ของ virtual threads แบบสั้น ๆ สำหรับทีมที่เพิ่งย้ายจาก JDK 21 มาสายใหม่ พร้อมตัวอย่าง Main ที่แยกงานบล็อกใน virtual thread
Java CompletableFuture.orTimeout: ตั้งเส้นตายได้ แต่ไม่ได้หยุดงานเบื้องหลังให้
แยกเวลารอของ future ออกจากการยกเลิก I/O พร้อม test สำเร็จและ timeout บน Java 17

JEP 533: Structured Concurrency รอบพรีวิวที่เจ็ดใน JDK 27
สรุป JEP 533 ที่พรีวิว StructuredTaskScope อีกรอบใน JDK 27 พร้อมแนวคิดงานลูกและ join เป็นหน่วยเดียว
Python asyncio.TaskGroup: ให้งานพี่น้องล้มและยกเลิกเป็นกลุ่ม
ใช้ structured concurrency ใน Python เพื่อไม่ทิ้ง background task ค้าง พร้อม unittest ที่ทดสอบทั้งสำเร็จและ fail-fast
Go 1.27 หา Goroutine ที่ไม่มีวันตื่นด้วย Leak Profile
รู้จัก goroutineleak profile ที่ใช้ reachability จาก GC แยกงานติดค้างถาวรออกจากงานที่แค่รอนาน พร้อม test ที่รันจริง
Beyond Syntax: เขียน Go ให้ Scale กับทีม ไม่ใช่แค่ CPU
รวม 12 แนวคิดที่แยก Go ระดับ "เขียนได้" ออกจาก Go ระดับ "คิดมาแล้ว" — ตั้งแต่ function signature, error handling, interface design, concurrency ownership ไปจนถึง package structure, naming convention, dependency injection และ graceful shutdown ที่ทำให้โค้ดอ่านง่ายขึ้นจริงในระดับทีม
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
25 เทคนิค Go ที่นักพัฒนามืออาชีพใช้จริงในงาน Production
รวม 25 เทคนิค Go (Golang) ที่ใช้ได้จริงตั้งแต่ goroutines, channels, context, error handling ไปจนถึง generics, structured logging และฟีเจอร์ใหม่ใน Go 1.25/1.26 พร้อมตัวอย่างโค้ดและ diagram ประกอบทุกหัวข้อ