Trong khoa học máy tính, một thuật toán được gọi là không chặn nếu lỗi hoặc tạm ngưng của bất kỳ luồng nào không thể gây ra lỗi hoặc tạm dừng luồng khác;
Một luồng không bị chặn khi nó không khiến các luồng khác đợi cho đến khi [các] luồng khác kết thúc
Chủ đề chặn là gì?
Ngược lại, một luồng chặn là luồng sẽ đợi trước khi một số luồng hoặc luồng khác hoàn thành việc thực hiện
Các ví dụ thực tế tồn tại cho cả hai loại quy trình luồng trong điện toán
Trong hướng dẫn này, chúng tôi sẽ mô phỏng cả hai loại chủ đề này
Công dụng chính của luồng là để có một luồng không bị chặn trên thực tế để chúng tôi có thể làm được nhiều việc hơn với thời gian ít hơn nếu cả hai luồng không nhất thiết phải "kết nối" hoặc phụ thuộc vào nhau
Mã cho chuỗi không chặn [có nhận xét]
# importing libraries import random import time from threading import Thread # target function which takes a time at random[from 0 to 2 seconds] to simulate some "work" def worker[instance]: time_taken = random.uniform[0, 2] time.sleep[time_taken] print['thread %s : completed in %s sec' % [instance, time_taken]] if __name__ == '__main__': for i in range[0, 10]: # don't confuse with the variable "t" it is not bound to any thread! it is just a name t = Thread[target=worker, args=[i,]] # starting the thread which will continue working in background after this. t.start[]
Hy vọng bạn đã đọc các ý kiến
Vì vậy, những gì mã làm là nó bắt đầu 10 luồng có tên là luồng 0, luồng 1, v.v. trên worker[] mô phỏng một số công việc sử dụng thời gian. ngủ [] với thời gian ngẫu nhiên
khi một luồng hoàn thành, chúng ta có thể thấy rằng nó xuất ra thời gian mà nó đã hoàn thành
Chúng ta có thể thấy từ đầu ra rằng các luồng có thể đã bắt đầu tuần tự nhưng chúng không được hoàn thành một cách tuần tự như luồng 5 đã hoàn thành trước luồng 0
Nếu chúng tôi thực hiện một sửa đổi nhỏ và thêm một số mã vào chương trình chính bên ngoài luồng thì chúng tôi có thể thấy cách thức hoạt động của chương trình và không có luồng nào phụ thuộc vào cả các luồng khác hoặc chương trình chính
# importing libraries import random import time from threading import Thread # target function which takes a time at random[from 0 to 2 seconds] to simulate some "work" def worker[instance]: time_taken = random.uniform[0, 2] time.sleep[time_taken] print['thread %s : completed in %s sec' % [instance, time_taken]] if __name__ == '__main__': for i in range[0, 10]: # don't confuse with the variable "t" it is not bound to any thread! it is just a name t = Thread[target=worker, args=[i,]] # starting the thread which will continue working in background after this. t.start[] # this just simulates a main program that does some work which takes 2 seconds of time time.sleep[1] print["Hi,there.Main program here!"]
Tương tự như chương trình khác, điểm khác biệt duy nhất là chương trình chính được bao gồm hoạt động độc lập với các luồng
Trái ngược với các ví dụ trên, một luồng chặn sẽ đợi các luồng khác hoàn thành việc thực thi của chúng
Mặc dù chúng tôi sẽ không yêu cầu sử dụng các luồng như vậy vì thông thường mục đích của luồng là tính song song và đồng thời, điều mà việc chặn các luồng không thực hiện được.
# importing libraries import random import time from threading import Thread # target function which takes a time at random[from 0 to 2 seconds] to simulate some "work" def worker[instance]: time_taken = random.uniform[0, 2] time.sleep[time_taken] print['thread %s : completed in %s sec' % [instance, time_taken]] if __name__ == '__main__': # this just simulates a main program that does some work which takes 2 seconds of time for i in range[0, 10]: # don't confuse with the variable "t" it is not bound to any thread! it is just a name t = Thread[target=worker, args=[i,]] # starting the thread which will continue working in background after this. t.start[] t.join[] #the only change in the code to make it a blocking thread!!!
Sửa đổi duy nhất trong mã chúng tôi đã làm là t. join[] chức năng của nó là nó sẽ đợi hoặc chuỗi trước đó hoàn tất quá trình thực thi trước khi khởi động và giống như cách các chuỗi khác hoạt động
Mô-đun hệ điều hành trong Python cung cấp các chức năng để tương tác với hệ điều hành. Hệ điều hành đi kèm với các mô-đun tiện ích tiêu chuẩn của Python. Mô-đun này cung cấp một cách di động để sử dụng chức năng phụ thuộc vào hệ điều hành
Phương thức os.set_blocking[]
trong Python được sử dụng để đặt chế độ chặn của bộ mô tả tệp đã chỉ định. Phương pháp này sửa đổi hệ điều hành. Cờ O_NONBLOCK. Nó đặt hệ điều hành. Cờ O_NONBLOCK cho chế độ không chặn và xóa hệ điều hành. Cờ O_NONBLOCK cho chế độ chặn