Bỏ phiếu đề cập đến việc kiểm tra nhiều lần xem một tài nguyên ( bất kỳ loại tài nguyên nào) đã sẵn sàng chưa.
Một spinlock là khi tài nguyên bạn đang bỏ phiếu là một khóa.
Lưu ý rằng bỏ phiếu không phải là xấu. Cụ thể, bỏ phiếu hiệu quả khi thường có dữ liệu sẵn sàng khi bạn bỏ phiếu. Bỏ phiếu chỉ không hiệu quả nếu bạn làm điều đó mà không nhận được bất kỳ dữ liệu nào.
Mặt khác, các ngắt là không hiệu quả nếu có quá nhiều dữ liệu khiến bạn liên tục bị gián đoạn. Chúng rất hiệu quả nếu dữ liệu đến hiếm khi đủ để bạn thực sự có thể hoàn thành một số công việc hữu ích trước khi bị gián đoạn.
Tôi có thể cho bạn một ví dụ thực tế từ kinh nghiệm của chính tôi: 15 năm trước, tôi đã thiết lập chương trình email của mình để làm gián đoạn tôi mỗi khi có email mới đến. Điều đó xảy ra một hoặc hai lần một tuần. Liên tục kiểm tra hộp thư đến của tôi sẽ là một sự lãng phí thời gian khổng lồ.
Ngày nay, tôi đã tắt tất cả các thông báo. Tôi biết rằng bất cứ khi nào tôi nhìn vào hộp thư đến của mình, sẽ có email mới ở đó. Bỏ phiếu hiệu quả hơn nhiều bây giờ.
Spinlocks có hiệu quả khi a) khả năng khóa được lấy thấp và b) nếu khóa được thực hiện, nó sẽ chỉ được giữ trong một thời gian ngắn. Nói cách khác: nó hiệu quả đối với các khóa hạt mịn hầu như không được bảo vệ, nhưng không hiệu quả đối với các khóa hạt thô có nhiều cạnh tranh.
(Và tất nhiên, spinlocks chỉ hoạt động khi có sự song song thực sự, nếu không thì các luồng khác sẽ không có cơ hội để mở khóa. Tôi đoán đó là điều hiển nhiên, nhưng dù sao tôi cũng muốn nói rõ.)