Nút zlib
Luồng trong NodeJS là gì ?Streamstrong NodeJS là một bộ sưu tập dữ liệu giống như chuỗi hoặc mảng, sự khác biệt duy nhất là các luồng không tồn tại cùng một lúc. Điều khiến các luồng thực sự mạnh đó là khả năng làm việc khi xử lý dữ liệu lớn (dữ liệu lớn) hoặc nguồn dữ liệu đến từ các nguồn bên ngoài Show
Nội dung chính Hiển thị
Các luồng không chỉ dừng lại ở công việc lý dữ liệu, nó còn có khả năng quay lại khả năng kết hợp mã một cách tuyệt vời, giống như khi kết hợp các câu lệnh lunix với nhau thành một câu lệnh xử lý duy nhất Có rất nhiều mô-đun của Nodejs thực thi dựa trên hơi hướng của các luồng như Các luồng cho phép bạn đọc dữ liệu từ một nguồn hoặc ghi dữ liệu tới một đích đến. Trong NodeJS, có 4 loại luồng khác nhau
Mỗi luồng đều được cấp một EventEmitter cho phép chúng ta bắt sự kiện theo từng điểm cụ thể. Sau đây là một vài sự khác biệt hay sử dụng
Chế độ đối tượng trong Luồng NodeJSTất cả các luồng được tạo bởi API Nodejs đều được hoạt động trên các đối tượng kiểu chuỗi và Bộ đệm (hoặc Uint8Array). Tuy nhiên, dòng đôi khi làm việc với các loại giá trị khác nhau của Javascript (ngoại trừ giá trị null) Bởi vì vậy chế độ đối tượng chế độ được thêm vào, để sử dụng, bạn cần phải chuyển chế độ đối tượng sang chế độ khi bắt đầu tạo luồng. Việc chuyển các luồng đã được khởi tạo sang chế độ đối tượng là không hoàn toàn với dữ liệu Thao tác với Stream trong NodeJSLuồng là một chức năng rất mạnh trong Nodejs, hãy tưởng tượng khi bạn làm việc với dữ liệu trực tiếp thì bạn cần phải có một vùng nhớ đủ lớn để lưu trữ nó. Giả sử chúng ta có một file text 10GB mà trong khi đó server của bạn chỉ có 1GB Ram, để đọc file này ngay thì server sẽ không thể thực hiện được vì thiếu bộ nhớ. Luồng cho phép chúng ta đọc dữ liệu lớn bằng cách chia nhỏ dữ liệu ra và đọc giá trị theo từng phần Read data with StreamsChúng ta có tệp dữ liệu dạng văn bản ở tệp 2 như sauhocweb.vn Tạo tệp 3và khai báo sử dụng mô-đun fs,và sử dụng phương thức createReadStream() tham số là đường dẫn tệp bạn muốn đọc ở đây là 2
Open terminal and run command line to view results
Ghi dữ liệu với StreamsVới NodeJS, để ghi tệp từ luồng chúng ta sử dụng phương thức createWriteStream() trong mô-đun fs. Tạo tệp 5
Open terminal and chay line command ________số 8Lúc này chúng ta sẽ nhận được 1 tệp mới có tên đầu ra. txt có nội dung
Thuật toán Piping Stream trong Node. jsTrong 2 phần trước chúng ta đã tìm hiểu về cách đọc và ghi tệp sử dụng Luồng. Trong Luồng ta còn có một khái niệm khác nữa đó là Piping (đường ống) cho phép chúng ta lấy dữ liệu đầu ra từ một luồng làm đầu vào các luồng khác. Nó hoạt động như một đường ống giúp chuyển dữ liệu giữa các luồng với nhau Trong ví dụ này, chúng tôi lấy dữ liệu của đầu vào tệp. txt làm dữ liệu đầu vào cho đầu ra tệp. txt bằng cách tạo 2 luồng và kết nối với nhau bằng ống phương thức hocweb.vn0 Đoạn mã hành động thất bại trên ta sẽ cho kết quả ở đầu ra tệp. txt
Kỹ thuật Piping Chaining trong Node. jsPiping Chaining là kỹ thuật để kết nối đầu ra của các luồng lại với nhau, nối đầu ra của luồng này với luồng khác tạo thành một chuỗi bao gồm nhiều luồng. Nó được sử dụng với cách hoạt động của đường ống. Chúng ta sử dụng kỹ thuật này để lấy đầu ra của một tệp, nén nó lại sau đó tiến trình ghi tệp nén đó ra trong NodeJS hocweb.vn2 Khi chạy chương trình trên, chương trình sẽ lấy đầu ra của tệp đầu vào. txt để nén tệp sau đó sẽ tạo ra một tệp nén mới có tên đầu ra. txt. gz. Đây là một kỹ thuật được sử dụng khá nhiều Một số ví dụ về Streams trong NodeJSNếu như phần trên chúng ta tìm hiểu về các thao tác với stream thì trong phần này mình sẽ đưa ra một số ví dụ để chứng minh sức mạnh của Streams trong việc xử lý dữ liệu Ghi tệp dữ liệu lớn để sử dụng LuồngĐối với công việc ghi tệp lớn hơn một cách thông thường, bạn cần phải sử dụng rất nhiều bộ nhớ để xử lý công việc ghi tệp. Nhưng đối với các luồng công việc ghi tệp dữ liệu lớn không quá nhiều bộ nhớ hocweb.vn3 Khi bạn ghi tệp bằng các luồng, nó sẽ ghi vào tệp theo từng đoạn (chunk) Read file data to use StreamsChúng ta có một tệp vài GB, nếu bạn đọc thông thường thì máy chủ sẽ quá tải. Cách thức hoạt động của các luồng trong tệp đọc lớn là sẽ chia đọc theo từng phần. Khái niệm 6 là kích thước dữ liệu của mỗi đoạn khi trong luồngGiả sử dung lượng của tệp 7 là 40GB, nếu đọc tệp theo cách thông thường sẽ mất khá nhiều dung lượng bộ nhớ 0Kết quả còn đây là đọc tệp sử dụng luồng 1Kết luậnQua bài viết, bạn đã hiểu về Stream và cách sử dụng hiệu quả. Hãy áp dụng vào dự án, ứng dụng của bản thân để tận dụng tối đa |