sách gpt4 ai đã đi

Kỹ năng cần thiết lập trình nâng cao C#.NET đồng thời cao - khóa

In lại Tác giả: Tôi là một chú chim nhỏ Thời gian cập nhật: 2023-08-20 22:33:45 27 4
mua khóa gpt4 Nike

Ứng dụng phổ biến nhất của khóa là kiểm soát hàng tồn kho trong các tình huống có nhiều hoạt động đồng thời. Lần này chúng tôi chỉ giới thiệu sơ lược về khóa độc lập. Hãy xem trực tiếp mã: Mỗi lần bạn yêu cầu kiểm kê -1. Nếu kiểm kê là 1000, sau 1000 yêu cầu, kiểm kê sẽ trở thành 0.

                          
                                 public int Reduce0() { int r = 0; string key = "stock"; string stock = Rds.cli.Get(key); int.TryParse(stock, out r); if (r > 0) { r--; Rds.cli.Set(key, r); } else { throw new Exception("Hết hàng!"); } return r; }

                          
                        

Kiểm tra này được thực hiện bằng Jmeter. Đầu tiên khởi tạo hàng tồn kho ở mức 1000.

Cài đặt Jmeter như sau. Một luồng yêu cầu 1000 lần. Sau đó kiểm tra inventory và nó chính xác là 0. Không có vấn đề gì:

Điều chỉnh các thông số thử nghiệm, 5 người yêu cầu cùng lúc, mỗi người yêu cầu 200 lần. Kiểm tra lại hàng tồn kho.

Sau khi tìm thấy yêu cầu, chỉ còn 279 sản phẩm trong kho. Đã có 1000 lần yêu cầu như vậy. Nhưng vẫn còn 279 sản phẩm trong kho, điều này rõ ràng là sai.

Nguyên nhân của vấn đề này rất đơn giản. Khi hàng tồn kho chưa được giảm hoàn toàn, một hoặc nhiều luồng khác đã đưa ra yêu cầu cùng một lúc và hàng tồn kho chỉ giảm 1.

Chỉ cần còn hàng, bạn có thể tiếp tục yêu cầu. Đến khi hết hàng hoàn toàn, đã có hơn 1.000 người yêu cầu. Không khớp với hàng tồn kho thực tế.

Để giải quyết vấn đề này. Chúng ta chỉ cần điều chỉnh mã:

                        
                                  đối tượng tĩnh riêng tư lck = đối tượng mới(); [HttpGet] int công khai Reduce1() { khóa(lck) { int r = 0; chuỗi khóa = "stock"; chuỗi stock = Rds.cli.Get(key); r = int.Parse(stock); if (r > 0) { r--; Rds.cli.Set(key, r); } else { ném ngoại lệ mới ("Hết hàng!"); } trả về r; } }

                        
                      

Khai báo một biến tĩnh và sau đó sử dụng lock trong thân phương thức. Sau khi điều chỉnh mã, hãy kiểm tra lại:

Người ta nhận thấy rằng sau 1000 yêu cầu, số lượng hàng tồn kho là 0. Điều chỉnh các thông số thử nghiệm cho 100 người*10 lần. Kết quả kiểm tra vẫn là 0.

Cho đến nay, vấn đề đã được giải quyết.

Tuy nhiên, trong các tình huống ứng dụng thực tế, các ứng dụng có tính đồng thời cao được triển khai theo cách phân tán trên nhiều máy. Làm thế nào để giải quyết vấn đề triển khai phân tán? Hãy nghĩ về điều này.

Cuối cùng, bài viết này về các kỹ năng thiết yếu để có tính đồng thời cao trong lập trình nâng cao c#.NET - locks đã kết thúc tại đây. Nếu bạn muốn biết thêm về các kỹ năng thiết yếu để có tính đồng thời cao trong lập trình nâng cao c#.NET - locks, vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

27 4 0
Tôi là một chú chim nhỏ
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com