gần đây em đang code lại dự án dùng nhiều js. mà nếu như nó hỗ trợ multi thread như python thì sẽ tốt hơn rất nhiều thay vì đang phải chạy lần lượt từng request 1. em tìm qua googl thì thấy JS thuần vẫn k có đa luồng. e thấy NodeJS thì có worker, ko biết cái worker này có hoạt động giống như Thread trong python ko nhỉ? ưu và nhược điểm của nó như thế nào, mong mn giải đáp cho e. e cảm ơn
Javascript có đa luồng như python không?
Bậy bạ nè, kiến trúc máy tính phải hỗ trợ nữa, riêng ngôn ngữ lâp trình giải quyết gì được khi CPU có 1 core, hệ điều hành không hỗ trợ?
JavaScript đơn luồng nhưng nó lại có asynchronous nên cũng rất lợi hại.
Tóm lại thì trên cùng một cấu hình máy tính, gần như không có sự khác biệt giữa các ngôn ngữ lập trình nếu cùng giải quyết một bài toán mà là do trình độ lập trình, người am hiểu phần cứng và Assembly sẽ tạo ra được chương trình chạy nhanh hơn, ít tốt kém tài nguyên hơn. Mấy cái gọi là multi-threading, multi-processing dường như là ngôn ngữ của marketing và giới nghiên cứu. Trong thục tế ngành phần mềm rất ít kỹ sư biết về mấy cái đó để làm gì khi nào trừ khi họ tham gia những dự án đặc biệt cần có những chuyên gia đặc biệt đào tạo.
Mấy thým MMO thì cứ thích tận dụng tài nguyên để kiếm thêm tiền nên bày đặt nghĩ đến mấy cái để vắt cạn máy tính được thuê. Nhưng trong thực tế, những gã khôn là những gã thà tốn tiền cho phần cứng còn hơn ngồi ngâm cứu mấy cái vượt quá tầm. Nền tảng của họ có phải nhà khoa học máy tính đâu? Họ còn lâu đủ sức hiểu, chứng minh được mấy cái đó cái nào hiệu quả hơn cái nào? Mệt não! Ngay cả thằng bạn mình đã là PhD về khoa học máy tính ở Pháp, làm được nhiều cái hay ho nhưng khi hệ thống quá tải, nhanh nhất, anh ta đề xuất mua thêm tài nguyên cloud gắn vào để chạy thay vì ngồi đó mà vặn vẹo. Trừ khi ai đó làm về R&D được công ty trả lương cao để nghiên cứu mấy cái tối ưu mới nên thử vọc multi-xxx, pa-ra-leo com pú ting,… còn thì dân lập trình bình thường đụng vô chỉ có ngu người, tốn thời gian chẳng làm được gì. Dân MMO sờ vào lại càng hoang tưởng.
vậy là js không có multi thread như python. khi chạy ở 1 máy với cấu hình đáp ứng được nhu cầu thì rõ ràng multi thread của python cho hiệu quả tốt hơn js async mà a
Python cũng có multithread đâu, nó có cái GIL gì ngăn cản multithread mà
Vụ này thực ra chưa hẳn, JS là single thread nhưng được back bởi phần code C/C++ ở node engine có thể chạy multi thread và multi processing.
Cụ thể thì khi dùng nodejs sẽ rất mạnh về các tác vụ IO, khi thực thi request sẽ ủy quyền thực thi cho phía node engine, xong công việc sẽ nhận kết quả và notify lại cho nodejs xử lí tiếp công việc. Do đó việc request lấy dữ liệu của cả trăm API cùng lúc cũng k vấn đề, CPU khá nhàn rỗi ít tốn điện nhưng thông lượng xử lí dữ liệu vẫn cao (chỉ sợ băng thông mạng không đủ để xử lí ấy chứ)
CPython implementation detail: In CPython, due to the Global Interpreter Lock, only one thread can execute Python code at once (even though certain performance-oriented libraries might overcome this limitation). If you want your application to make better use of the computational resources of multi-core machines, you are advised to use
multiprocessing
orconcurrent.futures.ProcessPoolExecutor
. However, threading is still an appropriate model if you want to run multiple I/O-bound tasks simultaneously.
Đơn luồng đa xử lý
vs
1 core vẫn multithread bình thường chứ ?
Cái đó là vấn đề đặc điểm của ngôn ngữ có hỗ trợ hay không.
Vẫn bình thường, có lẽ mình trả lời thiếu sự đầu tư tìm hiểu vì multithread/ multithreading được hiểu khác nhau với nhiều góc nhìn khác nhau. Riêng với mình lúc này (không bàn về góc độ chúng ta sẽ đầu tư nghiên cứu học thuật) cảm giác multithread có vẻ là việc di chuyển bằng 50 xe máy (mỗi người 1 xe) trên con đường so với 50 người cùng ngồi trên chiếc xe buýt và cùng nhau đi đến sân vận động. Nên theo cách nào? Mình thua
như anh lấy ví dụ đi xe máy thì nó như là 1 con cpu cùi bắp không thể tải được 50 người. nếu ví dụ là xe bus 50 chỗ chở 50 người vs 50 cái xe bus 50 chỗ mà mỗi cái chỉ chở 1 người (vì nó không hỗ trợ multi thread), thì rõ ràng là multi thread hiệu quả hơn rồi nhỉ @@
em cũng có đọc qua ở đâu đó thấy cái GIL này, nhưng em thử thread trong python thì nó cũng chạy cùng lúc luôn mà nhỉ.?
vậy nodejs có thể chạy cùng lúc nhiều ajax request à a. hiệu năng của nó so với thread trong python ntn nhỉ a?
em test khi dùng thread rồi mở task manager lên xem nó vẫn chiếm nhiều cpu mà nhỉ.
Bạn có thể test thử bằng cách gửi 10000 http request và mở task manager lên xem CPU sẽ có 3 giải đoạn:
- Tạo request -> CPU lên 100%
- request đã gửi, chờ response -> CPU giảm xuống 1%
- Nhận và xử lý response -> CPU lên 100%
=> CPU “không xử lý” gì cả trong lúc “chờ đợi”
Bạn có thể ví dụ đoạn code mà bạn test được không?
Một con đường có 50 làn nhưng đều đi qua 1 cái ngã tư.
Tất nhiên trong 1 thời điểm chỉ có 1 hoặc một số làn có xe được di chuyển theo tín hiệu điều hành và đi qua cái ngã tư đó còn làn khác phải dừng lại chờ. Cứ lần lượt, nhịp nhàng và nhìn tổng thể thì 50 làn xe vẫn đang cùng nhau di chuyển qua 1 cái ngã tư.
Cái multithread ở đây người ta đang nhắc đến số làn, chứ không phải số cái ngã tư.