Tôi đã làm Javascript dựa trên web (vanilla JS, jQuery, Backbone, v.v.) trong vài năm nay và gần đây tôi đã làm một số công việc với Node.js. Phải mất một thời gian tôi mới hiểu được lập trình "không chặn", nhưng giờ tôi đã quen với việc sử dụng các cuộc gọi lại cho các hoạt động IO và không có gì.
Tôi hiểu rằng Javascript là một luồng đơn. Tôi hiểu khái niệm về "hàng đợi sự kiện" của Node. Điều tôi không hiểu là điều gì quyết định liệu một hoạt động javascript riêng lẻ có "chặn" so với "không chặn" hay không. Làm cách nào để biết tôi có thể sử dụng đồng bộ các thao tác nào để tạo đầu ra một cách đồng bộ để tôi sử dụng mã sau và những thao tác nào tôi cần chuyển lại cuộc gọi để tôi có thể xử lý đầu ra sau khi hoàn thành thao tác ban đầu? Có một danh sách các chức năng Javascript ở đâu đó không đồng bộ / không chặn và một danh sách các chức năng đồng bộ / chặn không? Điều gì đang ngăn ứng dụng Javascript của tôi trở thành một điều kiện cuộc đua khổng lồ?
Tôi biết rằng các hoạt động mất nhiều thời gian, như các hoạt động IO trong các hoạt động Node và AJAX trên web, yêu cầu chúng không đồng bộ và do đó sử dụng các cuộc gọi lại - nhưng ai đang xác định điều gì đủ điều kiện là "một thời gian dài"? Có một số loại kích hoạt trong các hoạt động này loại bỏ chúng khỏi "hàng đợi sự kiện" bình thường? Nếu không, điều gì làm cho chúng khác với các hoạt động đơn giản như gán giá trị cho các biến hoặc lặp qua các mảng, mà dường như chúng ta có thể phụ thuộc vào để hoàn thành một cách đồng bộ?
Có lẽ tôi thậm chí không nghĩ về điều này một cách chính xác - hy vọng ai đó có thể khiến tôi thẳng tiến. Cảm ơn!