Nodejs tạo chủ đề
trong nút. js, worker thread trở nên hữu ích khi thực hiện các tác vụ JavaScript lớn. Worker đơn giản hóa việc chạy mã Javascript song song bằng cách sử dụng các luồng, làm cho nó nhanh hơn và hiệu quả hơn đáng kể. Chúng tôi có thể hoàn thành các công việc khó khăn mà không làm gián đoạn luồng chính. Chuỗi công nhân không có sẵn trong các phiên bản Node trước đó. Show
Nó cũng chịu trách nhiệm chuyển các phiên bản ArrayBuffer để xử lý các hoạt động sử dụng nhiều CPU Nút. js worker thread đã được chứng minh là giải pháp tốt nhất cho hiệu năng của CPU nhờ các tính năng sau
Để bắt đầu, chúng ta phải cập nhật Nút của mình. js lên phiên bản mới hơn. Chương trình sau đại học. Phát triển web đầy đủ ngăn xếphợp tác với Caltech CTME Đăng ký ngayLịch sử các ứng dụng sử dụng nhiều CPU trong nút. jsCó một số cách để chạy các ứng dụng sử dụng nhiều CPU trong Node. js trước chủ đề công nhân. Một số trong số họ được đề cập ở đây
Tuy nhiên, không có giải pháp thay thế nào trong số này được triển khai rộng rãi do hạn chế về hiệu suất, độ phức tạp gia tăng, thiếu sự chấp nhận, tính không ổn định và tài liệu Sử dụng Worker Threads cho các hoạt động chuyên sâu của CPUWorker thread là một giải pháp tuyệt vời cho vấn đề tương tranh của JavaScript; . Thay vào đó, cách tiếp cận chuỗi công nhân cho phép các ứng dụng sử dụng một số công nhân JavaScript bị cô lập, với Nút cung cấp giao tiếp giữa công nhân và công nhân mẹ. Mỗi worker trong Node. js có phiên bản Vòng lặp sự kiện và V8 của riêng mình. Công nhân, không giống như tiến trình con, có thể trao đổi bộ nhớ Ví dụconst {Công nhân} = yêu cầu ('worker_threads') const runService = (WorkerData) => { trả lại Lời hứa mới ((giải quyết, từ chối) => { const worker = new Worker('. /workerVí dụ. js', { WorkerData }); người làm việc. on('tin nhắn', giải quyết); người làm việc. on('lỗi', từ chối); người làm việc. on('thoát', (mã) => { nếu (mã. == 0) reject(new Error(`stopped with ${code} exit code`)); }) }) } const run = async() => { kết quả const = đang chờ runService ('nút xin chào. js') bảng điều khiển. nhật ký (kết quả); } chạy(). bắt (err => bàn điều khiển. lỗi (err)) Thêm cái này vào workerExample. tập tin js const { WorkerData, parentPort } = yêu cầu('worker_threads') cha mẹ. postMessage({ hoan nghênh. WorkerData }) đầu ra{ hoan nghênh. 'xin chào nút. js' } Chúng tôi đã nhập Công nhân từ chuỗi công nhân trong chính của chúng tôi. js, sau đó chuyển dữ liệu (tên tệp) để nhân viên xử lý. Như đã thấy trong workerExample. js, bước tiếp theo là lắng nghe các sự kiện tin nhắn từ worker thread. Ứng dụng chính của chúng tôi gửi WorkerData đến dịch vụ worker này, bao gồm một phương tiện để truyền lại dữ liệu đã xử lý qua parentPort. Chúng tôi sử dụng postMessage() trên đối tượng này (parentPort) để cung cấp dữ liệu đã xử lý Worker thread cũng cho phép chúng ta chia sẻ bộ nhớ bằng cách sử dụng các đối tượng SharedArrayBuffer. Chuyển các đối tượng ArrayBuffer cũng có thể được sử dụng để chia sẻ bộ nhớ khóa học miễn phí. Bắt đầu với NodeJSNắm vững kiến thức cơ bản về NodeJS Đăng ký ngayWorker Thread hoạt động như thế nào?Worker thread đã được giới thiệu như một tính năng thử nghiệm trong Node V10. Trong phiên bản 12, nó đã trở nên ổn định. Bởi vì worker thread không phải là thành phần tích hợp sẵn của Javascript, nên chúng không hoạt động chính xác như một hệ thống đa luồng tiêu chuẩn. Nó cho phép các tác vụ đắt tiền được ủy quyền cho các luồng khác nhau thay vì dừng vòng lặp sự kiện của ứng dụng Công việc của chuỗi công nhân là thực thi mã đã được chỉ định bởi chuỗi gốc hoặc chuỗi chính. Mỗi công nhân hoạt động độc lập. Mặt khác, một công nhân và cha mẹ của nó có thể giao tiếp qua kênh tin nhắn. Khi Javascript không kích hoạt đa luồng, các luồng công nhân sẽ sử dụng một phương pháp cụ thể để giữ cho các công nhân tách biệt với nhau. Công cụ V8 của Chrome được sử dụng để thực thi Node. V8 cho phép chúng tôi tạo thời gian chạy V8 bị cô lập. V8 Isolate là các phiên bản biệt lập với đống Javascript và hàng đợi tác vụ vi mô của riêng chúng. Ứng dụng Node có nhiều phiên bản Node chạy trong cùng một quy trình khi worker đang hoạt động. Mặc dù Javascript không hỗ trợ đồng thời theo mặc định, các luồng công nhân cung cấp một giải pháp thay thế để chạy một số luồng trong cùng một quy trình Điều gì phân biệt chủ đề công nhân
Làm thế nào để nút. js chạy song song?V8 isolate là phiên bản thời gian chạy Chrome V8 độc lập với bộ nhớ JS riêng và hàng đợi vi tác vụ. Điều này cho phép mỗi nút. js worker để chạy mã JavaScript của nó hoàn toàn độc lập với các worker khác. Nhược điểm là các công nhân không thể truy cập ngay vào các đống của nhau Khóa học Full Stack Web DeveloperĐể trở thành chuyên gia về MEAN Stack Xem khóa họcVượt qua ranh giới JS/C++Sử dụng nút. js', tập lệnh được chuyển đến V8. Mã JS trong tập lệnh đã chỉ định được V8 biên dịch và giá trị tương đương của hợp ngữ được trả về. Mã lắp ráp được tạo ra sau đó được chạy bởi Node. js bằng API V8 khác. Mã được biên dịch thành hợp ngữ và được trình biên dịch sao chép vào bộ nhớ Để chạy mã đã biên dịch, nó phân bổ một không gian trên bộ nhớ, di chuyển mã đến không gian được phân bổ và nhảy vào không gian bộ nhớ. Thực thi bây giờ bắt đầu từ mã được biên dịch ở bước nhảy. Kết quả là, nó đã vượt qua một dòng. Mã hiện đang được chạy là mã JS chứ không phải mã C++. Tất cả các mảnh hiện đang ở vị trí để lắp ráp. Khi mã JS được biên dịch xong, nó sẽ trở về mã C++. Các thuật ngữ "mã C++" và "mã JS" không đề cập đến mã nguồn C++ hoặc JS. Đó là mã hợp ngữ do trình biên dịch tạo ra từ mã nguồn của chúng đang được thực thi để phân biệt mã hợp ngữ nào đang được thực thi Dựa trên những điều trên, chúng ta có thể chia quá trình thiết lập worker thành hai giai đoạn.
Bước khởi tạo
Bước chạyQuá trình khởi tạo hiện đã hoàn tất. Chuỗi công nhân sau đó được bắt đầu bởi tập lệnh khởi tạo công nhân, tập lệnh này gọi vào C++
Tận dụng tốt nhất các chủ đề của nhân viênBây giờ chúng ta biết cách Node. js Worker Chủ đề chức năng. Hiểu cách chúng hoạt động có thể giúp chúng tôi đạt được kết quả tốt nhất từ worker thread. Khi tạo các ứng dụng phức tạp hơn so với worker-simple. js, chúng ta phải ghi nhớ hai cân nhắc luồng công nhân chính sau đây
Khóa học mới. Phát triển Full Stack cho người mới bắt đầuTìm hiểu Git Command, Angular, NodeJS, Maven và hơn thế nữa Đăng ký ngayTổng hợp chủ đề công nhântrong nút. js, nhóm luồng công nhân là một tập hợp các luồng công nhân đang hoạt động có thể được sử dụng để hoàn thành một công việc sắp tới. Khi nhận được một nhiệm vụ mới, nhiệm vụ đó có thể được giao cho một nhân viên có sẵn. Khi worker đã hoàn thành nhiệm vụ, kết quả có thể được trả về cho cha và worker lại sẵn sàng nhận nhiệm vụ mới. Tổng hợp luồng, khi được triển khai đúng cách, có thể tăng tốc độ đáng kể bằng cách giảm chi phí sinh ra luồng mới. Cũng cần lưu ý rằng việc thiết lập nhiều luồng là không hiệu quả vì số lượng luồng song song có thể chạy đúng cách luôn bị hạn chế bởi phần cứng Nâng cao sự nghiệp của bạn với tư cách là nhà phát triển MEAN stack với Nhà phát triển Web Full Stack - Chương trình của MEAN Stack Master. đăng ký ngay bây giờ Phần kết luậnVào tháng 4 năm 2019, Node. js v12 đã được khởi chạy. Chủ đề công nhân, được bật theo mặc định trong phiên bản này, hiện đã được hỗ trợ (thay vì cần cờ thời gian chạy tùy chọn). Việc sử dụng nhiều lõi CPU trong Node chưa bao giờ dễ dàng hơn thế. ứng dụng js Khả năng này có thể được sử dụng bởi Node. js với khối lượng công việc sử dụng nhiều CPU để giảm thời gian thực thi. Điều này đặc biệt quan trọng đối với Node. js chức năng không có máy chủ vì nền tảng không có máy chủ tính phí dựa trên thời gian thực thi. Sử dụng một số lõi CPU dẫn đến hiệu suất nâng cao cũng như giảm chi phí Công nhân (luồng) rất hữu ích để thực hiện các tác vụ JavaScript cần nhiều năng lượng CPU. Chúng không hữu ích cho các tác vụ yêu cầu nhiều I/O. Các hoạt động I/O không đồng bộ được tích hợp trong Node. js hiệu quả hơn Công nhân. Các luồng công nhân, không giống như tiến trình con hoặc cụm, có thể chia sẻ bộ nhớ. Họ đạt được điều này thông qua việc chia sẻ các phiên bản SharedArrayBuffer hoặc chuyển các đối tượng ArrayBuffer. Chúng tôi hy vọng rằng bài viết này có thể cung cấp cho bạn kiến thức toàn diện về các tính năng của Node Js worker và cách chúng tôi có thể sử dụng nó trong các dự án phát triển phần mềm của mình Nếu bạn muốn tìm hiểu thêm về NodeJS và các khái niệm liên quan khác, bạn có thể đăng ký Khóa học Chứng chỉ Phát triển Web Full Stack độc quyền của Simplilearn và đẩy nhanh sự nghiệp của bạn với tư cách là nhà phát triển phần mềm. Chương trình bao gồm nhiều khóa học phát triển phần mềm khác nhau, từ các nguyên tắc cơ bản đến các chủ đề nâng cao. Simplilearn cũng cung cấp các khóa học nâng cao kỹ năng trực tuyến miễn phí trong một số lĩnh vực, từ khoa học dữ liệu và phân tích kinh doanh đến phát triển phần mềm, trí tuệ nhân tạo và máy học. Bạn có thể tham gia bất kỳ khóa học nào trong số này để nâng cao kỹ năng và thăng tiến trong sự nghiệp của mình Tìm Chương trình sau đại học của chúng tôi trong Chương trình đào tạo trực tuyến về phát triển web Full Stack tại các thành phố hàng đầuNameDatePlacePost Chương trình sau đại học về Phát triển Web Full Stack Nhóm bắt đầu vào ngày 11 tháng 1 năm 2023,Đợt cuối tuầnChi tiết CityView của bạnChương trình sau đại học về Phát triển Web Full Stack, SydneyCohort bắt đầu vào ngày 26 tháng 1 năm 2023, Weekend batchSydneyView DetailsPost Graduate Program in Full Stack Web Development, MelbourneCohort starts on 15th Feb 2023, Weekend batchMelbourneView Details Giới thiệu về tác giảRavikiran ASRavikiran A S làm việc với Simplilearn với tư cách là Nhà phân tích nghiên cứu. Anh ấy là một người đam mê nhiệt tình, luôn săn lùng những công nghệ mới nhất. Anh ấy thành thạo Ngôn ngữ lập trình Java, Dữ liệu lớn và các Khung dữ liệu lớn mạnh mẽ như Apache Hadoop và Apache Spark Làm cách nào để tạo chủ đề trong NodeJs?Trong chỉ mục. js, bạn sẽ sử dụng mô-đun worker-threads để khởi tạo luồng và bắt đầu tác vụ trong worker. tệp js chạy song song với luồng chính . Khi tác vụ hoàn thành, worker thread sẽ gửi một thông báo chứa kết quả trở lại main thread.
Chúng ta có thể tạo nút JS đa luồng không?js bản thân nó là một ứng dụng đa luồng. Điều này hiển nhiên khi bạn sử dụng một trong các phương pháp không đồng bộ của thư viện chuẩn để thực hiện các thao tác I/O, chẳng hạn như đọc tệp hoặc thực hiện yêu cầu mạng. Các tác vụ này được ủy quyền cho một nhóm luồng riêng biệt mà Node tạo và duy trì bằng thư viện libuv C
Là nút vẫn còn đơn luồng?Nền tảng Node JS sử dụng kiến trúc “Vòng lặp sự kiện theo luồng đơn” để xử lý nhiều máy khách đồng thời . Sau đó, cách nó thực sự xử lý các yêu cầu máy khách đồng thời mà không cần sử dụng nhiều luồng.
Làm cách nào để sử dụng chuỗi công nhân trong NodeJs?Luồng công nhân sau đó được bắt đầu bởi tập lệnh khởi tạo công nhân, gọi vào C++. . Công nhân được cách ly động cơ V8 mới để làm việc với. V8 isolate là phiên bản thời gian chạy V8 tự chạy. . libuv đã được thiết lập. . Tập lệnh thực thi của nhân viên được thực hiện và vòng lặp sự kiện cho nhân viên được bắt đầu |