WHAT'S NEW?
Loading...

nodejs:blocking vs nonblocking

สรุปแบบตามความเข้าใจของผม ผิดถูกก็ขอโทษด้วยนะครับ




blocking mode ก็คือการที่โปรแกรมเราอะไรสักอย่างหนึ่งแล้วจะทำงาน
  เช่น เขียน 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




0 ความคิดเห็น:

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