Bạn có thể sử dụng một trong các khung công tác này nếu bạn muốn viết mã kết nối mạng.
Ví dụ: nếu bạn định viết a massively multiplayer video game, "thiết lập chương trình Java ... để gửi một chuỗi cho mỗi yêu cầu" có thể không phải là một tùy chọn; tung hứng nhiều chủ đề phức tạp phi thường, và nó cũng hoạt động kém. Không phải đề cập đến thực tế là "chỉ sinh ra một loạt các chủ đề" là thiếu một loạt các công cụ quản lý Twisted et. al. có, như twistd
, xử lý ghi nhật ký, thực hiện, khởi động và tắt máy, v.v.
Hoặc nếu bạn muốn viết build automation system, khả năng asynchronously invoke and control subprocesses sẽ hữu ích. Nếu bạn sinh ra một tiến trình không đồng bộ, bạn có thể dễ dàng giết chết quá trình đó và xử lý một cách duyên dáng với lối thoát của nó. Nếu bạn sinh ra nó bằng cách bắt đầu một luồng và chặn trong chuỗi đó, bạn không thể dừng nó một cách dễ dàng, kể từ stopping a thread is inherently unsafe.
EventMachine và Twisted đều có thể được sử dụng để viết các chương trình phía máy khách; có thể bạn đang viết một ứng dụng GUI không dựa trên web và bạn muốn sử dụng cùng một giao thức thực hiện trên máy khách và máy chủ.
Vì bạn có thể sử dụng khung không đồng bộ trong nhiều ngữ cảnh khác nhau, có thể bạn muốn sử dụng nó trong ứng dụng web đơn giản chỉ vì bạn có mã thư viện hiện tại, được viết cho một số ứng dụng khác sử dụng khung không đồng bộ của bạn để sử dụng. Hoặc bạn có thể muốn sử dụng lại mã ứng dụng web của mình trong một số ứng dụng phi web giả định trong tương lai. Trong trường hợp này, nó không khác nhiều so với việc sử dụng Apache hoặc Tomcat hay bất cứ điều gì về chức năng, nó chỉ cung cấp cho bạn một cách tổng quát hơn, có thể tái sử dụng để tổ chức chương trình của bạn.
Tôi mua mà chờ đợi cho những thứ khác mất rất nhiều thời gian, nhưng những gì về một tình huống mà một trang cụ thể có rất nhiều chế biến đang diễn ra và mất ~ 500ms để hoàn thành. Điều đó có nghĩa là mọi yêu cầu khác giữa bắt đầu và kết thúc của nó sẽ phải đợi đến 1/2 giây trước khi nó bắt đầu. Tôi đang suy nghĩ một kịch bản mà có rất nhiều số crunching trên những thứ mà không thể truy xuất được trong một thời trang đã biên dịch, tức là rất nhiều CPU, ít I/O. – CCw
@CCw: Không, nó sẽ không, ít nhất là với nút.js bạn thiết lập một sự kiện cho quá trình đó và nhận được một cuộc gọi lại khi nó được thực hiện (trong ngắn hạn), trong khi phần còn lại của kịch bản tiếp tục làm việc trong async và phục vụ yêu cầu. Những gì bạn mô tả là ngược lại, phương pháp 'đồng bộ'. – stagas
Thật vậy, một cái gì đó mà 500ms tính trên mỗi trang sẽ cần rất nhiều CPU để có được đồng thời - hoặc nên được cắt ra như một nhiệm vụ nền, với một sự kiện để hoàn thành nó. Hầu hết các hệ thống web balk với nhiều loại điều này chạy - rất nhiều ngăn xếp treo xung quanh, chủ đề được chuyển đổi và không ai nhận được nhiều thực hiện. Lập trình không đồng bộ buộc một người phải tách biệt các bit mã bị xáo trộn và suy nghĩ về toàn bộ hệ thống. – aredridel