Tôi không thể tìm thấy tài liệu chi tiết về macro @async
. Từ các tài liệu về song song, tôi hiểu rằng chỉ có một luồng hệ thống được sử dụng bên trong một tiến trình Julia và có chuyển đổi nhiệm vụ rõ ràng đang diễn ra bởi sự giúp đỡ của hàm yieldto
- sửa tôi nếu tôi sai về điều này.Julia: hiểu khi chuyển đổi nhiệm vụ xảy ra
Đối với tôi rất khó để hiểu chính xác khi nào các công tắc nhiệm vụ này xảy ra chỉ bằng cách xem mã và biết khi nào điều đó xảy ra có vẻ rất quan trọng.
Khi tôi hiểu một số yieldto
ở đâu đó trong mã (hoặc trong một số hàm gọi là mã) cần phải có ở đó để đảm bảo rằng hệ thống không bị kẹt chỉ với một tác vụ.
Ví dụ: khi có hoạt động read
, bên trong đọc có thể là cuộc gọi wait
và trong quá trình triển khai wait
có thể là cuộc gọi yieldto
. Tôi nghĩ rằng nếu không có yieldto
gọi mã sẽ bị kẹt trong một nhiệm vụ; tuy nhiên chạy ví dụ sau dường như chứng minh giả thuyết này sai.
@async begin # Task A
while true
println("A")
end
end
while true # Task B
println("B")
end
Mã này xuất ra như sau
BA
BA
BA
...
Nó là rất rõ ràng với tôi, nơi các công việc chuyển đổi xảy ra bên trong nhiệm vụ tạo ra bởi các @async
vĩ mô trong đoạn code trên.
Làm cách nào tôi có thể biết về việc xem xét một số mã mà các công việc chuyển đổi xảy ra ở đâu?