Tất cả một luồng thực hiện là các hoạt động xen kẽ để các phần của quá trình dường như trùng lặp về thời gian. Một máy lõi đơn có nhiều luồng chỉ nhảy xung quanh: nó thực thi các bit mã nhỏ từ một luồng, sau đó chuyển sang luồng khác. Một bộ lập lịch đơn giản quyết định chủ đề nào là ưu tiên cao nhất và thực sự được thực thi trong lõi.
Trên một máy tính lõi đơn, không có gì thực sự xảy ra "cùng một lúc". Tất cả chỉ là sự thực thi xen kẽ.
Có rất nhiều, nhiều cách để đạt được xen kẽ. Nhiều.
Giả sử bạn có một quy trình hai luồng đơn giản sử dụng khóa đơn giản để cả hai luồng có thể ghi vào một biến chung. Bạn có sáu khối mã.
- Khóa trước
- T1-có khóa
- Khóa sau
- Khóa trước
- T2-có khóa
- Khóa sau T2
[Điều này có thể trong một vòng lặp hoặc có nhiều khóa hoặc bất cứ điều gì. Tất cả những gì nó làm là lâu hơn, không phức tạp hơn.]
Các bước của T1 phải chạy theo thứ tự (T1-trước, T1-with, T1-after) và các bước của T2 phải chạy theo thứ tự (T2-trước, T2-with, T2-after).
Khác với ràng buộc "theo thứ tự", chúng có thể được xen kẽ theo bất kỳ cách nào. Dù sao. Họ có thể được chạy như được liệt kê ở trên. Một thứ tự hợp lệ khác là (T1-trước, T2-trước, T2-lock, T1-lock, T2-after, T1-after). Có rất nhiều thứ tự hợp lệ.
Chờ đợi.
Đây chỉ là một máy trạng thái với sáu trạng thái.
Đó là một automata trạng thái hữu hạn không xác định. Thứ tự của các trạng thái T1-xxx với các trạng thái T2-xxx là không xác định và không thành vấn đề. Vì vậy, có những nơi "trạng thái tiếp theo" là tung đồng xu.
Ví dụ: khi FSM bắt đầu, T1-trước hoặc T2-trước đều là các trạng thái đầu tiên hợp pháp. Tung đồng xu.
Hãy nói rằng nó đã xuất hiện trước đây. Làm vậy đi. Khi đã xong, có một sự lựa chọn giữa T1-với và T2-trước. Tung đồng xu.
Ở mỗi bước trong FSM sẽ có hai lựa chọn (hai luồng - hai lựa chọn) và một lần tung đồng xu có thể xác định trạng thái cụ thể nào được tuân theo.