nodejs:blocking vs nonblocking
สรุปแบบตามความเข้าใจของผม ผิดถูกก็ขอโทษด้วยนะครับ
เช่น เขียน server ต้องรอรับ client ส่งข้อมูลมาแล้วถึง แล้วจะทำงานต่อไปได้
non-blocking mode ก็จะไม่รอทำงานตามลำดับไปเรื่อยๆเลย แต่จะมีการใช้ callback กลับมา
โปรแกรมฝัง server ส่วนมากก็จะ ทำได้สองแบบคือ multi-thread กับ non-blocking
แต่ nodejs ไม่สามารถทำ multi-thread ได้แต่มันดีคือทำ non-blocking และเป็นแบบ event drivenที่ง่าย มาดูตัวอย่างกันเลย
ตัวอย่างส่วนมากที่เค้ายกเห็นชัดเจนก็การอ่านไฟล์
อ่านไฟล์แบบ blocking : ถ้าอ่านไม่เสร็จก็ยังทำอย่างอื่นต่อไม่ได้
-สร้างไฟล์ข้อมูลมาง่ายๆ ก่อน data.txt ข้อมูลแล้วแต่เราจะใส่ทดลอง
สร้างไฟล์ js อ่านข้อมูล
อธิบายโค้ด
เรียกใช้ คลาส readfile >>>>> require เป็นการเรียกใช้คลาส
สร้าง ตัวแปรเก็บเก็บข้อมูล ใช้เมทอดอ่านไฟล์ readFileSync('ตำแหน่งไฟล์','รูปแบบข้อมูล')
แสดงข้อมูลออกมาก
สุดท้ายให้แสดงข้อความออกมา
ผลลัพธ์
ออกมาตามลำดับต้องอ่านไฟล์เสร็จก่อนแล้วค่อนแสดงข้อความ Test read file
เราลองมาดู แบบ non blocking กันบ้าง
อ่านไฟล์แบบ non-bloking : อ่านไฟล์ยังไม่เสร็จก็ทำงานอื่นต่อได้
ใช้ไฟล์ข้อมูลเดิมเลย data.txt
สร้างไฟล์ readdata2.js
อธิบายโค้ด
เรียกใช้คลาส readFile เหมือนเดิม
ใช้ เมดทอด อ่านไฟล์แล้วสร้าง callback อ่านไฟล์ไม่เสร็จทำงานอื่นต่อได้
แล้วให้แสดงข้อมูลที่อ่านไฟล์
แล้วให้แสดงข้อความ Test read file
ผลลัพธ์ จะเหมือนเดิมมั้ยนะ
อ้าว ดันแสดงข้อความ Test read File ก่อนหละ อุส่าไว้ด้านล่างแล้วนะ
ก็อย่างที่บอกแหละครับ มันจะท่านงานแบบไม่รอให้งานหนึ่งเสร็จแต่มันจะทำงานต่ออื่นต่อเลย
เปรียบเทียบอีกครั้ง
อีกสักตัวอย่างนึงละกัน
ลองตั้งเวลาแล้วแสดงข้อมูลออกมา
อธิบายโค้ด
ตั้งให้โปรแกรม นับถอยหลัง 5 วินาทีแล้ว แสดง hello 1
หลังจากนั้น แสดง hello 2
แต่ด้วยการเขียนแบบ non-blocking ทำให้แสดงข้อความ hello 2 ออกมาก่อน โดยไม่ต้องรอ 5 วินาที ของ hello 1






































