วันอังคารที่ 18 เมษายน พ.ศ. 2560

Keyword จากลูกพี่ (Non Blocking)

      วันนี้นั่งงง?งง?งง ทำไมมันไม่ออกนะ ลอง Debug ค่าออกมา มันก็มีค่านี่นา แล้วทำไม่ ไม่แสดงค่าออกมาที่หน้าเว็บล่ะ ลองหลายท่า เท่าที่น่าจะเป็นตามความคิด สุดท้าย น้องมาช่วยดู บวกกับได้คำชี้แนะจากลูกพี่มา เพียงแค่ "ลองไปอ่าน Non Blocking ดู"

      Blocking กับ Non Blocking ต่างกันก็ตรงที่ Blocking จะไม่ยอมให้การทำงานของ Function ที่อยู่ถัดไปทำงานจนกว่าการทำงานก่อนหน้าจะเสร็จ ส่งค่าออกไปแล้วจึงจะยอมให้ทำงานได้ (เหมือนกับ Sequence เลยแฮะ) ส่วน Non Blocking เป็นการทำงานที่ไม่ Block การทำงานใดๆเลย (ตรงตัว) หากมีการทำงานอยู่ 3 function คือ Function A , Function B , Function C ในการทำงานแบบนี้ จะไม่รอจนกว่าการทำงาน A จะเสร็จจนส่งค่าออกไปแล้วถึงจะทำงาน B แต่หากการทำงานของ Function B เสร็จก่อน ก็ให้ส่งผลของ B ออกไปก่อน โดยไม่ต้องรอให้ A เสร็จก่อน ถ้า C เสร็จก่อน ก็ให้ C ส่งผลออกไปก่อนได้ ข้อดีคือ ทำให้การทำงานของ โปรแกรมเร็วขึ้น เพราะไม่ต้องรอกัน แต่ก็มีจุดที่ทำให้ งงกันครับ ก็มันน่าจะได้ค่าแล้วนี่ เหมือนผมเลย

      พอได้รู้ตามนี้ ก็ลองมะโนตามเลย ผลที่ Debug โปรแกรมไว้ มันใช่เยย ค่าที่เราคาดหวัง มันอยู่ด้านล่าง ส่วนค่าที่อยู่ส่วนประกาศออกมาที่เว็บ มันอยู่ด้านบนซึ่ง ไม่มีค่าใดๆ (เป็นค่าว่าง) ใช่เลยงานนี้ แทนที่มันจะทำงานใน function ให้เสร็จก่อน แต่ไม่ใช่ มันดันเป็น Non Blocking มันประกาศค่าออกทางเว็บก่อนที่ function จะทำงานเสร็จเสียอีก ค่าที่คาดหวังจะได้ที่หน้าเว็บก็เลยไม่มีอะไรมาสู่สายตาครับ

      คราวนี้คิดสิ จะทำไงต่อหว่า ไว้พรุ่งนี้ต้องลองใหม่ครับ



ไม่มีความคิดเห็น:

แสดงความคิดเห็น