ผมล่อคุณเข้ามาด้วยแคปชั่นเท่ๆ แต่จริงๆแล้ว ผมก็หมายถึงแบบนั้นนั่นแหละ55555 ในบางเรื่อง ถ้าเราแก้อะไรไม่ได้จริงๆ การยิ่งจมลงกับปัญหา ก็ไม่ได้ช่วยให้ปัญหานั้นถูกสะสาง แต่หากลองปล่อยมันไว้บ้าง ถอยออกมา ไปเที่ยว หรือลืมมันไปก่อน คุณเชื่อไหมว่า ปัญหานั้นอาจหายไปแล้วจริงๆ หรือคุณอาจเจอวิธีที่คุณไม่เคยคิดออกโดยบังเอิญ ทั้งหมดนี้เหมือนปฏิหาริย์ แต่จริงๆแล้ว การใช้เวลาอาจเป็นคำตอบสุดท้ายที่คุณทำได้ หากคุณทำอะไรไม่ได้แล้ว
จบเรื่องจริงจัง ปรัชญาชีวิตใดๆ เข้าสู่เรื่องที่จริงจังกว่า
สถานการณ์สมมติ
การทำงานวันปกติ บริษัทแห่งหนึ่ง🧑🏻🔧 เพื่อนคุณ: นายแก้ปัญหานี้ยังไง?
👨🏻💻 คุณ: ใช้ Ostrich Algorithm
มันคืออิหยัง??
Ostrich Algorithm คือกลยุทธ์การแก้ปัญหาทางวิทยาการคอมพิวเตอร์แบบหนึ่งโดย ignore หรือไม่สนใจปัญหานั้นไป เพราะมองว่าปัญหานี้มันเกิดขึ้นได้ยากมากๆ จึงไม่ต้องเสียเวลาหรือต้นทุนในการไปนั่งแก้มัน หรือง่ายๆคือ การพยายามหาวิธีป้องกันไม่ให้มันเกิดขึ้นอาจมีต้นทุนที่มากเกินไป กว่าการปล่อยให้มันเกิดขึ้นแล้วค่อยหาวิธีแก้ปัญหาเฉพาะหน้าต่อไป 1
🦩 ทำไมถึงเรียกว่า Ostrich Algorithm หรืออัลกอริทึมนกกระจอกเทศ?
เพราะลักษณะของนกกระจอกเทศที่ชอบเอาหัวมันมุดลงในทราย ที่ทำเป็นเหมือนว่ามองไม่เห็นว่ามีปัญหานั้นอยู่ตรงหน้า จึงเสมือนว่าปัญหานั้นได้หายไปแล้ว ลักษณะนี้เองเรียกว่า Ostrich Effect
Ostrich Effect หรือ Ostrich Syndrome
ภาพ: https://www.linkedin.com/pulse/do-you-have-ostrich-syndrome-monica-brown/
ตัวอย่างปัญหาแบบที่ว่า คืออะไร?
ปัญหาที่จะชอบยกตัวอย่างให้เข้ากับอัลกอริทึมแบบนี้คือ ปัญหา Dead Lock หรือ การปิดตายจาก Process ที่บล็อคกันเอง โดยมีโอกาสเกิดขึ้นยากมากๆ หรือต้องเป็นจังหวะเวลาที่ฟลุ๊กมาก ตัวอย่าง Dead Lock เช่น ระบบการทำงานอะไรบางอย่างที่ต้องใช้ทรัพยากรจากอีกที่ ในขณะที่อีกที่ก็พยายามจะใช้ทรัพยากรบางอย่างจากที่ตรงนี้เหมือนกันด้วยความที่ Process อันแรกยังไม่จบ และมันไปทับซ้อนกับอีก Process ที่เกิดขึ้น ทำให้มันไป block กันเอง หรือทั้งสอง Process เกิดการรออย่างไม่มีที่สิ้นสุด
🔒 ปัญหา Dead Lock
จากที่คุณอ่านมาแล้วในด้านบน คุณอาจยังไม่เห็นภาพ สมมติในการจะทำรายการของนาย A จำเป็นต้องบล็อคการแก้ไขข้อมูลจากที่ B เพื่อมาอัปเดทข้อมูลของนาย A ชั่วขณะ เพื่อที่จะตรวจสอบว่าทำได้มั้ย และทำการแก้ไขหรือบันทึกรายการให้เสร็จ แต่ถ้าหากขณะนั้นพอดีมีคนจะมาอัปเดทข้อมูลที่ B โดยจำเป็นต้องใช้ข้อมูลจาก A ระหว่าง Process นี้ระบบจะไม่ให้อัปเดทข้อมูลนาย A เพราะยังรอข้อมูล B อยู่ ส่วนที่ B ก็อัปเดทข้อมูลไม่ได้ เพราะยังรอข้อมูลจาก A อยู่ (รอให้ process A เสร็จก่อน) ดังนั้นจากความพร้อมกันนี้ (concurrency) การทำของ A ไปบล็อก B และการทำของ B ไปบล็อก A สรุปทั้งคู่ก็จะติดชะงักอยู่อย่างงั้น ทำอะไรไม่ได้
ตัวอย่าง Thread Deadlock ใน Java
ภาพ: https://medium.com/edureka/deadlock-in-java-5d1e4f0338d5
🔐 แก้ Dead Lock (เฉพาะหน้า หรือ ถาวร)
วิธีแก้ Deadlock ที่เกิดขึ้นแล้ว ก็มีอยู่หลายวิธีนะ เช่น Rollback ตัวใดตัวหนึ่งไปเลย หรือจะยกเลิกทั้งคู่ไปเลย หรือรอจนกว่า Process จะถูกยกเลิกไป หรือจะย้ายไปทำที่ process อื่น เป็นต้น ซึ่งจากที่ว่ามานี้คือ การใช้ Ostrich Algorithm หรือการแก้ไขปัญหาไปตามที่มันเกิดนั่นแหละ (Deadlock Ignorance) มันจะแตกต่่างกับอีกวิธีคือ การหาวิธีป้องกันไม่ให้ Deadlock นั้นเกิดขึ้นตั้งแต่แรก (Deadlock Prevention) เพราะ Dev อาจมองว่าจริงๆแล้วปัญหานี้ยากมากที่จะเกิดขึ้น หากจะหาวิธีป้องกันอาจจะเสีย cost มากขึ้น เช่น Cost ทางเวลา, Cost ทางการใช้ Resource เป็นต้น หรือคำพูดแบบง่ายๆเลยนะ ถ้ามีปัญหาก็ reboot มันไปแค่นั้น
🚧 ปัญหาชีวิตก็เช่นกัน
นกกระจอกเทศได้สอนเราว่า ลองก้มหัวลงไปในทราย ทุกปัญหาก็จะหายไป
2 ในชีวิตเราก็เช่นกัน3 ลองพักจากปัญหาที่เราไม่รู้ว่าจะต้องแก้มันยังไง ลองออกไปทำอย่างอื่น ไปนอน ไปเที่ยว ไปหาไรกิน แล้วปัญหานั้นจะถูกคลี่คลายด้วยตัวมันเอง
เช่น เราอาจจะคิดออกว่าต้องทำยังไง หรือเจอวิธีการใหม่ๆ หรือเจอโอกาสใหม่ๆ หรือบางทีอย่างที่ว่า ปัญหานั้นก็หายไปด้วยตัวมันเองจริงๆ
ผมไปเจอกราฟอันนี้มา ซึ่งเอาจริงมันดีมากเลยนะ จริงๆเราไม่ควรต้องกังวลกับอะไรเลย
ไม่ว่าอะไรจะเกิดขึ้นก็อย่าไปกังวล
(จำไม่ได้ว่ามาจากหนังสืออะไร แต่ตอนนี้คนก็แชร์กันเยอะแล้ว)
🎊 นั่นแหละครับคือทั้งหมด
หวังว่าคุณจะเห็นว่าแนวคิดทางวิทยาการคอมพิวเตอร์อันนี้น่าสนใจเหมือนกับผม (และยังใช้ได้ในการทำงานอย่างเท่ๆ) เลยเอามาฝากกัน ถ้าชอบก็ฝากแชร์ต่อครับ แล้วไปพบกันใหม่ในโอกาสถัดไป🙏🥹
References
-
Ostrich Algorithm https://en.wikipedia.org/wiki/Ostrich_algorithm# ↩
-
หรือจริงๆ มันเป็นโรครึป่าว ผมไม่แน่ใจนะอันนี้ ↩
-
The Ostrich Algorithm: Escaping Reality in the World of Programming (and Avoiding Deadlocks!) https://medium.com/@amittangale/the-ostrich-algorithm-escaping-reality-in-the-world-of-programming-and-avoiding-deadlocks-6de12494aac ↩