thảo luận node JS vẫn chưa thể lập trình đa luồng

Bản chất thì multithread hay không nó không phụ thuộc vào language, mà phụ thuộc vào runtime/compiler nhé các anh. C ko dùng mấy cái lib kiểu pthread thì cũng ko multithread đc, mà sau này ông nào rảnh làm cái runtime hỗ trợ cho javascript create thread mutex các kiểu thì js nó cũng là multithread thôi

Không hẳn. Về cơ bản cái spec của ngôn ngữ được viết ra với tư tưởng của event loop / queue nên nếu muốn implement được 1 cái runtime hỗ trợ "explicit multi-threading" thì phải sửa lại spec của cả ngôn ngữ

https://262.ecma-international.org/6.0/#sec-executable-code-and-execution-contexts

đoạn mục 8.3 , 8.4

"An execution context is a specification device that is used to track the runtime evaluation of code by an ECMAScript implementation. At any point in time, there is at most one execution context that is actually executing code. This is known as the running execution context. A stack is used to track execution contexts. The running execution context is always the top element of this stack. A new execution context is created whenever control is transferred from the executable code associated with the currently running execution context to executable code that is not associated with that execution context. The newly created execution context is pushed onto the stack and becomes the running execution context."

"More than one job may be in progress at the same time, but only one job in a given job queue is executed at a time. Once a job is started the ECMAScript implementation controls its completion and the selection of the next job to be initiated from the queue."
 
Nodejs ko có multi-thread nhé bác, mặc dù có worker thread xử lý các task I/O song song nhưng ko được coi là multi-thread vì nó thư viện libuv nó viết bằng C++ nhé bác, phải chung core mới multi-thread được, bác có thể tìm hiểu thằng Deno nó giống Nodejs viết bằng Rust
Đồng ý với bạn, nó chỉ được xử lý ở một "chỗ khác" (worker thread), không được coi là multi-threading.
 
Thread này hay đấy, mà lướt một hồi thấy toàn bàn về Worker Cluster. Đã thử cái này rồi, và thấy nó khá phức tạp vì khi dùng thì nó chuyển đổi code thành string gửi cho worker để handle, nên mấy cái closure, reference không dùng được. Hiện tại cách để dẹ án nodejs có thể handles đc nhiều request cùng lúc là sử dụng Containerazation, dùng K8s để cở bản dùng Deployments handles mấy con containers. Mặc dù khi config sẽ hơi rắc rối, như phải cài Load Balancer/ Ingress Nginx để route request tới Rest Api backends ( mình đang đề cập tới hệ thống kiểu monolith, chưa nói tới microservices), nhưng thấy làm cách này nó dễ dàng code hơn. Còn muốn truyền thống hơn thì cài nginx, config route request, dùng pm2 spam số lượng instances bằng với số core của con CPU.
 
Với tác vụ xử lý phức tạp thì multi thread xử lý nhanh hơn so với single thread.
Còn với nhiều tác vụ nhỏ thì single thread sẽ nhanh hơn do vấn đề về context switching trong multiple thread. Khi này thời gian hao phí do context switching sẽ là đáng kể so với thời gian xử lý một request.
Với mô hình micro service bây giờ thì nodejs cần gì multi thread khi mà có thể gọi service khác xử lý cho đơn giản hơn nhiều.
 
await nó sẽ dừng việc thi code để chờ 1 thứ gì đó chạy xong, vì sao mình nói await là vì nó cũng có thể khả năng dừng luồng, mà người ta nói node js là không chặn, điều này không hoàn toàn đúng khi dùng await, để lập trình đa luồng người ta cần điều phối lúc cho luồng này chạy, lúc cho luồng khác chạy, thì người ta cần có chức năng tạm dừng luồng.
nói thật vào đọc bài để tìm thêm kinh nghiệm của các cao thủ gặp ngay thằng (phải gọi là thằng) đ biết gì cũng lên phát biểu. Giọng điệu đi làm chắc cũng lâu rồi mà kiến thức nông cạn, đừng truyền đạt cái sự ngu dốt của mình cho người khác bạn ơi
 
hôm nay em tìm hiểu node JS đã có thể lập trình đa luồng chưa, em search đọc thì tiêu đề là lập trình đa luồng nhưng hóa ra là nó tạo 1 child process,-giao tiếp với parentProcess, paprent gửi input cho child process, rồi nhận kết quả, như vậy thì bản chất vẫn là tiến trình, không thể gọi là lập trình đa luồng như ngôn ngữ java được, trong ngôn ngữ java có các luồng có thể chia sẻ chung 1 bộ nhớ, đọc ghi chung 1 file hoặc 1 biến
Nếu bạn muốn System Programming thì Nodejs không phải là language we're talking about. Lúc này C >> C++ >> Java là cái cần dùng.

Mà vấn đề là công việc của bạn nó là cái gì. Web hoặc những service nhỏ dùng để IO với Database thì Nodejs rất gọn gàng, nhẹ nhàng và hiệu quả. Có chăng là nó không có type nên hơi tệ thôi. Còn bạn là Database Enginneer/ Operating System Engineer thì trình bạn nó on top r, lúc đấy bạn thắc mắc dùng mutex C++ nó dễ chịu hơn Java/C hay không thôi.

Nói chung ráng học, cứ từ từ, mình phải giỏi về single core program đã (code bạn viết ra ở công ty bạn đang làm, nó rất hiếm khi có bug), rồi ráng cứng Algorithms, rồi hãy bàn đến Multicore programming.
 
Back
Top