Hướng dẫn coroutine python - trăn đăng quang
Chúng ta đều quen thuộc với khái niệm hàm, cái mà còn được gọi là subroutine (đoạn chương trình con), procedure (thủ tục) và subprocess (tiến trình con), v.v… Hàm là một chuỗi các chỉ thị được đóng gọi dưới dạng một đơn vị để thực hiện một tác vụ cụ thể. Khi logic của một hàm phức tạp được chia ra thành các hàm nhỏ hơn, thì các hàm nhỏ này được gọi là các helper function – hàm phụ trợ hoặc subroutines – các đoạn chương trình con. Show Nội dung chính
Subroutines – các đoạn chương trình con trong Puthon đều được gọi đến bởi main function – hàm main/hàm chính, cái mà chịu trách nhiệm điều phối việc sử dụng các đoạn chương trình con này. Các subroutines chỉ có một entry point (điểm để đi vào) duy nhất. Coroutine là sự khái quát của subroutine (đoạn chương trình con). Chúng thường được sử dụng cho xử lý đa nhiệm có tính kết hợp, trong đó một tiến trình (process) sẽ tự nguyện cho đi quyền điều khiển thực thi một cách định kỳ, hoặc khi tiến trình đó ở trạng thái nghỉ (idle), để cho phép nhiều ứng dụng có thể được chạy cùng lúc. Sự khác biệt giữa Coroutine và subroutine là: – Không giống như các subroutines, các coroutines sở hữu rất nhiều entry points (điểm đi vào) phục vụ cho việc tạm dừng thực thi và tiếp tục thực thi. Coroutine có thể tạm dừng việc thực thi của nó và chuyển quyền điều khiển chương trình sang cho coroutine khác và có thể tiếp tục thực thi trở lại từ cái thời điểm mà nó đã cho đi quyền điều khiển.
1. Coroutine và Thread3. Cơ chế thực thi của coroutine 4. Cách đóng lại một Coroutine 5. Ghép nối các coroutine để tạo ra đường ống 6. Tài liệu tham khảo thêm Subroutines – các đoạn chương trình con trong Puthon đều được gọi đến bởi main function – hàm main/hàm chính, cái mà chịu trách nhiệm điều phối việc sử dụng các đoạn chương trình con này. Các subroutines chỉ có một entry point (điểm để đi vào) duy nhất. Coroutine là sự khái quát của subroutine (đoạn chương trình con). Chúng thường được sử dụng cho xử lý đa nhiệm có tính kết hợp, trong đó một tiến trình (process) sẽ tự nguyện cho đi quyền điều khiển thực thi một cách định kỳ, hoặc khi tiến trình đó ở trạng thái nghỉ (idle), để cho phép nhiều ứng dụng có thể được chạy cùng lúc. Sự khác biệt giữa Coroutine và subroutine là: – Không giống như các subroutines, các coroutines sở hữu rất nhiều entry points (điểm đi vào) phục vụ cho việc tạm dừng thực thi và tiếp tục thực thi. Coroutine có thể tạm dừng việc thực thi của nó và chuyển quyền điều khiển chương trình sang cho coroutine khác và có thể tiếp tục thực thi trở lại từ cái thời điểm mà nó đã cho đi quyền điều khiển. 2. Coroutine trong Python Tới đây, bạn có thể nghĩ rằng Coroutine và Thread khác nhau như thế nào, bởi vì dường như chúng đều thực hiện cùng một công việc.
Trong trường hợp các threads, Việc chuyển đổi giữa các threads theo một lịch trình cụ thể được thực hiện bởi hệ điều hành (hoặc run time environment – môi trường thời gian chạy). Trong khi đối với các coroutine, các lập trình viên hoặc ngôn ngữ lập trình sẽ quyết định khi nào chuyển đổi giữa các coroutines. Các coroutines xử lý đa tác vụ một cách kết hợp bằng cách tạm dừng và trở lại thực thi tiếp tại một điểm/mốc được chỉ định bởi lập trình viên.
3. Cơ chế thực thi của coroutine4. Cách đóng lại một Coroutine 4. Cách đóng lại một Coroutine5. Ghép nối các coroutine để tạo ra đường ống
Trong trường hợp các threads, Việc chuyển đổi giữa các threads theo một lịch trình cụ thể được thực hiện bởi hệ điều hành (hoặc run time environment – môi trường thời gian chạy). Trong khi đối với các coroutine, các lập trình viên hoặc ngôn ngữ lập trình sẽ quyết định khi nào chuyển đổi giữa các coroutines. Các coroutines xử lý đa tác vụ một cách kết hợp bằng cách tạm dừng và trở lại thực thi tiếp tại một điểm/mốc được chỉ định bởi lập trình viên.
5. Ghép nối các coroutine để tạo ra đường ống6. Tài liệu tham khảo thêm – Một cái initial source – nguồn khởi tạo (hay còn gọi là producer), cái mà sẽ dẫn xuất ra toàn bộ đường ống. Producer thường không phải là một coroutine, nó chỉ là một phương thức đơn giản. – Một cái sink, là điểm cuối của đường ống dẫn. Một sink có thể thu thập tất cả dữ liệu và hiển thị chúng. Dưới đây là một ví dụ đơn giản về chainning coroutines – ghép nối các coroutines Đoạn code mô tả cơ chế coroutine chaining:
Kết quả in ra là:
6. Tài liệu tham khảo thêmTài liệu tham khảo pdf Wiki Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng! Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you! |