Trong đa xử lý, bạn tận dụng nhiều CPU để phân phối các phép tính của mình. Vì mỗi CPU chạy song song, bạn có thể chạy nhiều tác vụ đồng thời một cách hiệu quả. Bạn muốn sử dụng đa xử lý cho giới hạn CPU tác vụ . Một ví dụ sẽ là cố gắng tính tổng tất cả các phần tử của một danh sách lớn. Nếu máy của bạn có 8 lõi, bạn có thể "cắt" danh sách thành 8 danh sách nhỏ hơn và tính tổng của từng danh sách đó riêng biệt trên lõi riêng biệt và sau đó chỉ cần cộng các số đó lại. Bạn sẽ nhận được tốc độ tăng lên ~ 8x khi làm điều đó.
Trong luồngbạn không cần nhiều CPU. Hãy tưởng tượng một chương trình gửi nhiều yêu cầu HTTP đến web. Nếu bạn đã sử dụng một chương trình đơn luồng, nó sẽ dừng thực thi (khối) ở mỗi yêu cầu, đợi phản hồi và sau đó tiếp tục khi nhận được phản hồi. Vấn đề ở đây là CPU của bạn không thực sự hoạt động trong khi chờ một số máy chủ bên ngoài thực hiện công việc; nó có thể thực sự thực hiện một số công việc hữu ích trong thời gian chờ đợi! Cách khắc phục là sử dụng các chuỗi - bạn có thể tạo nhiều chuỗi, mỗi chuỗi chịu trách nhiệm yêu cầu một số nội dung từ web. Điều thú vị về các luồng là, ngay cả khi chúng chạy trên một CPU, thỉnh thoảng CPU sẽ "đóng băng" việc thực thi một luồng và chuyển sang thực thi luồng kia (nó được gọi là chuyển đổi ngữ cảnh và nó xảy ra liên tục ở mức không xác định khoảng thời gian). - sử dụng ren.
asyncio về cơ bản là phân luồng không phải CPU mà là bạn, với tư cách là một lập trình viên (hoặc thực sự là ứng dụng của bạn), quyết định vị trí và thời điểm diễn ra chuyển đổi ngữ cảnh . Trong Python, bạn sử dụng một await
từ khóa để tạm dừng việc thực thi chương trình đăng quang của mình (được định nghĩa bằng async
từ khóa).